OpenXML电子表格在Excel中已损坏

时间:2016-05-22 19:16:48

标签: c# excel visual-studio openxml

我正在使用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;
}

我得到的错误是'在文字内容中找到了无效字符。' 线:1 专栏:1 文件偏移量:0 正如您在代码中看到的那样,我还没有添加任何文本,我相当确定它不是非法字符。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我能够找出问题所在。首先,使用上面的代码,Excel在使用OpenXML时需要一个完全格式化的文件。这意味着只有一个带有工作簿的文件是不够的,它必须有工作簿,工作表和至少1张才能正常打开。我遇到的另一个问题(数据不会在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};”。可能看起来很简单,但让我很头疼。

相关问题