openXML spreadsheetdocument return byte-array für die MVC-Datei herunterladen
Ich versuche, um wieder eine openXML-spreadsheetdocument als byte [], welches ich dann nutzen kann zulassen, dass meine MVC, schicken Sie die Datei an einen Benutzer. hier ist mein spreadsheetdocument-Methode zur Rückgabe des byte-array
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();
}
dann in mein MVC-controller habe ich es so nennen
return File(crs.CreateReportSpreadSheet(reports),"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Reports.xlsx");
den Datei-downloads, aber wenn Sie gehen zu öffnen zeigt es eine Fehlermeldung, dass die Datei beschädigt ist. Gibt es irgendeinen anderen Weg, um Ihnen zu ermöglichen, diese Datei zu downloaden?
Haben Sie überprüft, die generierte Datei einzeln? Ich meine , ist Ihre Datei korrekt geöffnet wird, wenn Sie speichern es auf der Festplatte zu "mem.ToArray ()" - position? Ich denke, es sollte ein problem mit der generierten Datei nicht die Art und Weise Sie es zurück an den client.
InformationsquelleAutor Canvas | 2014-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, das ist spät, aber ich glaube, es liegt daran, dass Sie den Aufruf nicht in der Nähe auf Ihrem Tabellendokument, nachdem Sie mit ihm fertig sind. Stellen Sie sicher, dass Sie das Dokument schließen, bevor Sie den Speicher-stream zu verpflichten, alle zugrunde liegenden streams verwendet, die durch das Dokument.
http://msdn.microsoft.com/en-gb/library/documentformat.openxml.packaging.spreadsheetdocument(v=office.14).aspx
InformationsquelleAutor Mr.Brownstone
Ich hatte ein ähnliches problem mit einem Word-Dokument. Ich löste dies durch die Verwendung der byte-array außerhalb der Verwendung, wie:
InformationsquelleAutor developer10214