OpenXML 电子表格在 Excel 中损坏

OpenXML Spreadsheet corrupted in Excel

我正在使用 OpenXML (2.5) 创建自定义电子表格。在我使用的 VM 上,我只有 Open Office,其中 OpenXML 电子表格运行良好(具有自定义格式和所有内容)。但是,当将文件移动到装有 Microsoft Office 的计算机时,由于数据损坏,文件的每个版本都无法打开。我删除了所有自定义设置,但结果仍然损坏(在 Open Office 中仍然有效)。

这是我的基本电子表格文件的代码,它同样可以在 Open Office 中运行,但在 Excel 中被视为已损坏。

public string CreateGrid()
{
    var path = Path.GetTempFileName();
    var document = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook);
    var workbookpart = document.AddWorkbookPart();

    workbookpart.Workbook.Save();
    document.Close();
    return path;
}

我得到的错误是 'An invalid character was found in the text content.' 线路:1 列:1 文件偏移:0 正如您在代码中看到的那样,我还没有添加任何文本,我相当确定它不是非法字符。任何帮助将不胜感激。

我能够找出问题所在。首先,使用我上面的代码,Excel 在使用 OpenXML 时需要一个完全格式化的文件。这意味着只有一个带有工作簿的文件是不够的,它必须有工作簿、worksheets 和至少 1 sheet 才能正常打开。我遇到的另一个问题(数据不会显示在 Excel 中)是因为当我向下遍历行时,我并不是每次都创建一个新行。对于尝试与我相同的人,代码应如下所示:

foreach (var temp in tempList)
{
    if (cellIdex == 12)
    {
        cellIdex = 0;
        rowIdex = rowIdex + 1;
        row = new Row { RowIndex = rowIdex };
        sheetData.AppendChild(row);
     }
     cell = CreateTextCell(ColumnLetter(cellIdex), rowIdex, tempToString(), 3);
     row.AppendChild(cell);
     cellIdex = cellIdex + 1;
}  

要注意的最重要部分是 "row = new Row{RowIndex = rowIdex};"。看似简单,却让我很头疼。