生成的Excel电子表格无法在Excel中打开

时间:2014-03-27 18:36:49

标签: c# openxml

我开发了一个工具,允许您自动化使用数据填充Excel报表的过程。 (使用C#库OpenXML 2.0)

我花了很多时间处理Excel错误" Excel发现了不可读的内容......"打开我自动生成的报告时。我怀疑在格式错误的SharedStringTable中遇到了一个问题 这是我的xml

<x:sst count="1" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:si>
    <x:t>asdd</x:t>
</x:si>

这里是在Excel中恢复的xml

<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
count="35" uniqueCount="1">
<si>
    <t>asdd</t>
</si>

什么是计数=&#34; 35&#34;? 这个参数是必需的还是只是为了加快文件打开过程?

原始文档和已恢复文档中的其他可疑差异是我的SharedStringTablePart

的ID
<Relationship Type="...sharedStrings" Target="..." Id="R0fd51616d10e4c31" />

并恢复

<Relationship Id="rId6" Type=".../sharedStrings" Target="..."/>
你怎么看?这会导致问题吗? 我使用此代码创建SharedStringTablePart

var sharedTablePart = doc.WorkbookPart.SharedStringTablePart;
        if (null == sharedTablePart)
        {
            sharedTablePart = doc.WorkbookPart.AddNewPart<SharedStringTablePart>();
            sharedTablePart.SharedStringTable = new SharedStringTable();
            sharedTablePart.SharedStringTable.Count = 0;
        }

1 个答案:

答案 0 :(得分:0)

我知道这不是你的答案,但是让我告诉你在使用#OpenXml SDK创建Excel文件时我做了什么。

首先,

我没有在代码中生成Excel文件 - 我在Excel中生成了一个Excel文件,并将其用作我用代码更新的模板。

其次,

你知道你不需要使用共享字符串表,对吧?您可以生成在单元格中保留字符串的标记,并且根本不引用SharedStrings。这使得处理Excel文件变得更加容易,而且由于SharedStrings-table是为真正的huuuuuuge电子表格中的优化而设计的,你可能根本不需要它?

我记不起副手了。但如果你有兴趣的话,我很乐意为你查询。

让我知道: - )