XML单元格被错误地显示为sharedstring,而实际上不是

本文关键字:实际上 sharedstring 单元格 错误 显示 XML | 更新日期: 2023-09-27 18:16:53

我正在通过Excel电子表格进行解析,并且对某些值有一些问题,因此根据stackoverflow成员的建议,我将它们评估为共享字符串。然而,现在,一些单元格值不是共享字符串,我的条件仍然计算为真,这意味着它们是SharedStrings。所以我想知道如果我的代码评估这些是正确的,或者也许有一些问题与Excel电子表格我一直在工作。下面是一个条件示例,在本例中,由于SerialNumber列不是共享字符串,因此它的计算结果应该是false,但是它被计算为共享字符串,因此导致程序崩溃。

bool isSharedString = (((Cell)r.ChildElements[0]).DataType.Value == CellValues.SharedString);
row["SerialNumber"] = isSharedString ? stringTable.SharedStringTable.ElementAt(int.Parse(r.ChildElements[0].InnerText)).InnerText : r.ChildElements[0].InnerText;

这是我正在处理的行的内外部xml代码。只有A2和G2不是共享字符串。

<x:row r="2" spans="1:14" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <x:c r="A2"><x:v>20000001</x:v></x:c>
    <x:c r="B2" t="s"><x:v>14</x:v></x:c>
    <x:c r="C2" s="1" t="s"><x:v>19</x:v></x:c>
    <x:c r="D2" t="s"><x:v>19</x:v></x:c>
    <x:c r="E2" t="s"><x:v>19</x:v></x:c>
    <x:c r="F2" t="s"><x:v>19</x:v></x:c>
    <x:c r="G2"><x:v>0</x:v></x:c>
    <x:c r="H2" t="s"><x:v>19</x:v></x:c>
    <x:c r="I2" t="s"><x:v>19</x:v></x:c>
    <x:c r="J2" t="s"><x:v>20</x:v></x:c>
    <x:c r="K2" t="s"><x:v>22</x:v></x:c>
    <x:c r="L2" t="s"><x:v>20</x:v></x:c>
    <x:c r="M2" t="s"><x:v>22</x:v></x:c>
    <x:c r="N2" t="s"><x:v>19</x:v></x:c>
</x:row>

XML单元格被错误地显示为sharedstring,而实际上不是

petelids让我查看excel电子表格中的XML后,我才明白了。我原来的程序一直崩溃,从我认为是三元条件总是为真,即使当特定的excel单元格不使用SharedStrings。但是,xml显示,虽然具有t="s"的单元格,但没有sharedstring的单元格没有,这意味着非sharedstring单元格没有相应的DataType。正因为如此,代码因为(((Cell)r.ChildElements[0])DataType属性而失败,这实际上是空的,所以试图获得它的Value会导致空指针异常。为了解决这个问题,我最终只是检查DataType是否为空。当它是,然后我就得到了内部的xml内容。如果不是,那么我使用xml内容作为SharedStringsTable索引来查找实际字符串。情况下关闭!