我想用程序中的数据创建一个工作簿,所以我从一个空的工作簿开始(下面的代码)。我尝试了有无行(代码已注释掉了行代码),更改了几行的顺序,但没有任何效果。
我从Docs.Microsoft.com /这里获取了代码,并从http://www.dispatchertimer.com/tutorial/how-to-create-an-excel-file-in-net-using-openxml-part-1-basics/(示例大致相同)
[当我尝试在Excel中打开工作簿时,出现错误:我们在'Foo.xlsx'中发现了某些内容的问题。您是否希望我们尽力恢复原状?如果您信任此工作簿的来源,请单击“是”。
我使用了.NET Core(尽管我也可以使用.NET Framework对其进行复制)和DocumentFormat.OpenXml版本:2.10.0
我在做什么错?
谢谢
Jordi
using (SpreadsheetDocument document = SpreadsheetDocument.Create("D:\\Diff\\Sample2\\Foo.xlsx", SpreadsheetDocumentType.Workbook, false))
{
// A SpreadsheetDocument must have at least a WorkbookPart and a WorksheetPart
WorkbookPart workbookPart = document.AddWorkbookPart();
workbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook(); // Name ambiguity...
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Test" };
sheets.Append(sheet);
SheetData sheetData = worksheetPart.Worksheet.AppendChild(new SheetData());
////Row row = new Row();
////row.Append(
//// ConstructCell("Id", CellValues.String),
//// ConstructCell("Name", CellValues.String),
//// ConstructCell("Birth Date", CellValues.String),
//// ConstructCell("Salary", CellValues.String));
////// Insert the header row to the Sheet Data
////sheetData.AppendChild(row);
////uint id = 1;
////foreach (Spreadsheet spreadsheet in m_sheets.Values)
////{
//// Debug.Assert(spreadsheet != null);
//// spreadsheet.SaveToExcel(workbookPart, sheets, id++);
////}
workbookPart.Workbook.Save();
document.Close();
}
我也确实在GitHub上发布了一个问题,并且在那得到了响应,指出这是代码错误而不是SDK错误。感谢Scott Haney,因为他在Github上回复了我。答复的摘要是:
如果删除该行,它对我有用(
SheetData
在作为构造函数的参数传递给工作表时,已经添加到工作表中了,所以这条额外的行导致它被添加了两次):
SheetData sheetData = worksheetPart.Worksheet.AppendChild(new SheetData());
并且也替换
workbookPart.Workbook.Save()
与
document.Save()
。