XML细胞错误地被示出为SharedStrings当它们不(XML cells incorrectl

2019-10-30 11:17发布

我通过Excel电子表格分析和有一些问题,一些值,因此在计算器成员的建议,我评价他们为共享字符串。 然而,现在一些单元格值不共享字符串和我的条件还评估为真,这意味着他们SharedStrings。 所以我想知道如果我评估这些代码是正确的或可能有一些错误的Excel电子表格我一直在使用。 这里是有条件的一个例子,在这种情况下应评估为假的serialNumber列不是共享字符串,但它被评价为它是一个共享字符串,因此将导致程序崩溃。

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>

Answer 1:

我想通了之后petelids告诉我一下从Excel电子表格中的XML。 我原来的计划保持从我虽然是三元条件一直为真,即使在特定的Excel单元格没有使用SharedStrings崩溃。 然而,XML显示,虽然没有SharedStrings细胞与T =“S”,那些不这样做,这意味着非sharedString细胞没有相应的数据类型。 正因为如此,代码是失败,因为的DataType的属性(((Cell)r.ChildElements[0])这实际上是零,所以试图让Value它导致了一个空指针异常。为了解决这个问题,我结束了简单的检查,看看是否在DataType为null。当它是,然后我就得到了内部XML的内容。如果不是这样,那么我使用的XML内容的SharedStringsTable索引来查找实际的字符串。结案!



文章来源: XML cells incorrectly being shown as SharedStrings when they are not