使用开放的XML创buildexcel文件

我正在尝试使用Open XML来创build一个文件,但是当试图添加头文件的第一行文件被损坏,我无法打开,任何人都可以告诉我我在做什么错在这里?

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create("C:\\testpdfs\\mytest.xlsx", 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()); // Append a new worksheet and associate it with the workbook. Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart. GetIdOfPart(worksheetPart), SheetId = 1, Name = ViewBag.Title }; Row row = new Row() { RowIndex = 1 }; Cell header1 = new Cell() { CellReference = "A1", CellValue = new CellValue("Interval Period Timestamp") }; row.Append(header1); Cell header2 = new Cell() { CellReference = "A2", CellValue = new CellValue("Settlement Interval") }; row.Append(header2); Cell header3 = new Cell() { CellReference = "A3", CellValue = new CellValue("Aggregated Consumption Factor") }; row.Append(header3); Cell header4 = new Cell() { CellReference = "A4", CellValue = new CellValue("Loss Adjusted Aggregated Consumption") }; row.Append(header4); sheet.Append(row); sheets.Append(sheet); //sheet.Append(row); workbookpart.Workbook.Save(); // Close the document. spreadsheetDocument.Close(); return View(); } 

这里有几个问题。

首先,你要添加row到工作Sheet但它需要被添加到SheetData 。 最简单的方法是保留对SheetData对象的引用,以便稍后使用它:

 SheetData sheetData = new SheetData(); worksheetPart.Worksheet = new Worksheet(sheetData); ... sheetData.Append(row); 

其次,您需要明确地给每个单元格一个数据types,因为如果没有给出数据types,默认是数字:

 Cell header1 = new Cell() { CellReference = "A1", CellValue = new CellValue("Interval Period Timestamp"), DataType = CellValues.String }; 

最后,你的单元格引用不太正确。 您将所有内容添加到一行,但添加了行1到4(A1-A4)的引用。 鉴于单元格在您的代码中被称为“标题”,我猜你实际上需要单元格A1-D1中的值,在这种情况下,您只需要更新CellReference值。 如果你真的想要A1-A4的值,那么你需要将每个单元格添加到一个新的行。

完整的代码清单(假设你想要单元格A1-D1)是:

 using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create("C:\\testpdfs\\mytest.xlsx", 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>(); SheetData sheetData = new SheetData(); worksheetPart.Worksheet = new Worksheet(sheetData); // Add Sheets to the Workbook. Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook. AppendChild<Sheets>(new Sheets()); // Append a new worksheet and associate it with the workbook. Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart. GetIdOfPart(worksheetPart), SheetId = 1, Name = ViewBag.Title }; Row row = new Row() { RowIndex = 1 }; Cell header1 = new Cell() { CellReference = "A1", CellValue = new CellValue("Interval Period Timestamp"), DataType = CellValues.String }; row.Append(header1); Cell header2 = new Cell() { CellReference = "B1", CellValue = new CellValue("Settlement Interval"), DataType = CellValues.String }; row.Append(header2); Cell header3 = new Cell() { CellReference = "C1", CellValue = new CellValue("Aggregated Consumption Factor"), DataType = CellValues.String }; row.Append(header3); Cell header4 = new Cell() { CellReference = "D1", CellValue = new CellValue("Loss Adjusted Aggregated Consumption"), DataType = CellValues.String }; row.Append(header4); sheetData.Append(row); sheets.Append(sheet); workbookpart.Workbook.Save(); // Close the document. spreadsheetDocument.Close(); return View(); }