openXML spreadsheetdocument retour tableau d'octets pour MVC téléchargement de fichier

Je vais essayer de revenir un openXML spreadsheetdocument comme un byte[] à laquelle je peux ensuite utiliser pour permettre à mon MVC envoyer ce fichier à un utilisateur. voici mon spreadsheetdocument méthode pour retourner un tableau d'octets

using (MemoryStream mem = new MemoryStream())
{
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.
Create(mem, SpreadsheetDocumentType.Workbook);
//Add a WorkbookPart to the document.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
//Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
//Add Sheets to the Workbook.
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.
AppendChild<Sheets>(new Sheets());
SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
//row start
for (int id = 0; id <= reports.Count(); id++)
{
if (id == 0)
{
Row contentRow = CreateContentRow(reports.ElementAt(id), true, 2 + id);
sheetData.AppendChild(contentRow);
}
else
{
Row contentRow = CreateContentRow(reports.ElementAt((id - 1)), false, 2 + id);
sheetData.AppendChild(contentRow);
}
}
//Append a new worksheet and associate it with the workbook.
Sheet sheet = new Sheet()
{
Id = spreadsheetDocument.WorkbookPart.
GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "mySheet"
};
sheets.Append(sheet);
workbookpart.Workbook.Save();
return mem.ToArray();
}

ensuite dans mon contrôleur MVC je l'appelle comme ça

return File(crs.CreateReportSpreadSheet(reports),"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Reports.xlsx");

le fichier se télécharge, mais quand vous allez à l'ouvrir, il affiche un message d'erreur que le fichier est corrompu. Est-il un autre moyen de leur permettre de télécharger ce fichier?

  • Avez-vous vérifié le fichier généré séparément? Je veux dire , c'est que votre fichier ne s'ouvre pas correctement lorsque vous l'enregistrez sur le disque à "mem.ToArray()" position? Je pense qu'il devrait y avoir un problème avec votre fichier généré pas la façon de le retourner au client.
InformationsquelleAutor Canvas | 2014-02-28