2

我正在尝试通过打开带有表格的xml来创建电子表格。但是在打开创建的 excel 文件时总是返回错误“Excel 在 test1.xlsx 中发现不可读的内容,你想恢复吗?为什么总是发生这个错误?当创建没有表格的 excel 时,我没有收到任何错误。请查找下面是我用来创建的示例代码。

            using (SpreadsheetDocument spreadsheetdocument = SpreadsheetDocument.Create(@"c://test.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 = "mysheet"
            };
            sheets.Append(sheet);

             TableDefinitionPart tableDefinitionPart = worksheetpart.AddNewPart<TableDefinitionPart>("rId1");

            GenerateTablePartContent(ref tableDefinitionPart);

            TableParts tableParts1 = new TableParts() { Count = (UInt32Value)2U };
            TablePart tablePart1 = new TablePart() { Id = "rId1" };
            tableParts1.Append(tablePart1);
            worksheetpart.Worksheet.Append(tableParts1);
             spreadsheetdocument.Close();
} 
//Added spaces to get the code in one block
 private void GenerateTablePartContent(TableDefinitionPart part)
    {
        Table table1 = new Table() { Id = (UInt32Value)1U, Name = "Table1", DisplayName = "Table1", Reference = "A1:C3", TotalsRowShown = false };
        AutoFilter autoFilter1 = new AutoFilter() { Reference = "A1:C3" };

        TableColumns tableColumns1 = new TableColumns() { Count = (UInt32Value)3U };
        TableColumn tableColumn1 = new TableColumn() { Id = (UInt32Value)1U, Name = "Column1" };
        TableColumn tableColumn2 = new TableColumn() { Id = (UInt32Value)2U, Name = "Column2" };
        TableColumn tableColumn3 = new TableColumn() { Id = (UInt32Value)3U, Name = "Column3" };

        tableColumns1.Append(tableColumn1);
        tableColumns1.Append(tableColumn2);
        tableColumns1.Append(tableColumn3);
        TableStyleInfo tableStyleInfo1 = new TableStyleInfo() { Name = "TableStyleMedium2", ShowFirstColumn = false, ShowLastColumn = false, ShowRowStripes = true, ShowColumnStripes = false };

        table1.Append(autoFilter1);
        table1.Append(tableColumns1);
        table1.Append(tableStyleInfo1);

        part.Table = table1;
    }
4

1 回答 1

1

使用 Open XML SDK 生产力工具。使用正常方式创建一个 excel 文件并将相同的数据也放在那里,并将该文件与您使用代码创建的文件进行比较。您将在那里看到更改。我也面临同样的问题,我正在尝试使用该工具修复更改。让我们来看看....

如果你已经解决了这个问题,请指导我如何去做。

于 2012-06-06T08:39:55.127 回答