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.
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est tard, mais je crois que c'est parce que vous ne faites pas appel à proximité de votre document de feuille de calcul lorsque vous avez terminé avec elle. Assurez-vous de fermer le document avant de renvoyer le flux de mémoire de commettre tous les flux sous-jacent utilisé par le document.
http://msdn.microsoft.com/en-gb/library/documentformat.openxml.packaging.spreadsheetdocument(v=office.14).aspx
J'ai eu un problème similaire avec un document Word. J'ai résolu ce problème en utilisant le tableau d'octets outsite l'utilisation, comme: