C# Excel中的OpenXML电子表格已损坏

C# Excel中的OpenXML电子表格已损坏,c#,excel,visual-studio,openxml,C#,Excel,Visual Studio,Openxml,我正在使用OpenXML(2.5)创建一个定制的电子表格。在我使用的虚拟机上,我只有OpenOffice,其中OpenXML电子表格工作正常(具有自定义格式和所有功能)。但是,将文件移动到带有Microsoft Office的计算机时,由于数据损坏,文件的每个版本都无法打开。我去掉了所有的定制,但仍然有一个损坏的结果(它仍然在OpenOffice中工作) 这是我为一个简单的电子表格文件编写的代码,它同样可以在OpenOffice中工作,但在Excel中被视为已损坏 public string C

我正在使用OpenXML(2.5)创建一个定制的电子表格。在我使用的虚拟机上,我只有OpenOffice,其中OpenXML电子表格工作正常(具有自定义格式和所有功能)。但是,将文件移动到带有Microsoft Office的计算机时,由于数据损坏,文件的每个版本都无法打开。我去掉了所有的定制,但仍然有一个损坏的结果(它仍然在OpenOffice中工作)

这是我为一个简单的电子表格文件编写的代码,它同样可以在OpenOffice中工作,但在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
正如您在代码中所看到的,我还没有添加任何文本,我相当确定它不是非法字符。任何帮助都将不胜感激。

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

你能把复制你问题的XLSX文件上传到某个地方吗?我会看一看它,让你知道它有什么问题。我能够找出最初的问题以及它失败的原因,而它只是一个工作簿。Excel希望所有元素都在那里(工作簿、工作表和内容)。如果只有工作簿,则检查失败。我最初的问题(数据在其中)是我没有在每次迭代中创建新行。基本上,我创建的是一行,其中包含多行。5月份没有错误。