使用DocumentFormat.OpenXml(2.10.0)创建示例(空)工作簿时发生错误

问题描述 投票:0回答:1

我想用程序中的数据创建一个工作簿,所以我从一个空的工作簿开始(下面的代码)。我尝试了有无行(代码已注释掉了行代码),更改了几行的顺序,但没有任何效果。

我从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();
        }
openxml-sdk
1个回答
0
投票

我也确实在GitHub上发布了一个问题,并且在那得到了响应,指出这是代码错误而不是SDK错误。感谢Scott Haney,因为他在Github上回复了我。答复的摘要是:

如果删除该行,它对我有用(

SheetData

在作为构造函数的参数传递给工作表时,已经添加到工作表中了,所以这条额外的行导致它被添加了两次):

SheetData sheetData = worksheetPart.Worksheet.AppendChild(new SheetData());

并且也替换

workbookPart.Workbook.Save()

document.Save()

© www.soinside.com 2019 - 2024. All rights reserved.