【问题标题】:Empty Excel Shows a Number Value when Viewing XML. Causes XMLReader to not working Correctly查看 XML 时,空 Excel 显示数值。导致 XMLReader 无法正常工作
【发布时间】:2016-06-26 00:14:39
【问题描述】:

我用 .NET/C# 编写了一个 Excel 解析器。它利用 System.XML 中的 XMLReader 类,效果很好。但是我有一个奇怪的错误,其中一个空单元格作为字符串“1074”出现。如果您在 GUI 中查看 Excel 文件,则单元格为空。但是,如果您解压缩文件,它会为同一单元格显示以下内容。

<c r="Y311" s="1" t="s"><v>1074</v></c>

这个问题在以下情况下反复出现:

  • 它只出现在这一列(Y 列)
  • 仅当字段为空时
  • 仅在电子表格上的 Y311 之后
  • 总是用“1074?”表示

因为 XML 表示那里有一个值,所以当 XMLReader 到达电子表格的那个部分时,它会将值解析为“1074”而不是一个空单元格。

另外,在 Y311 之前,所有空单元格都具有以下 XML 格式(当然是正确的):

<c r="Y300" s="1"/>

然后没有&lt;v&gt;&lt;/v&gt; 属性,因为单元格是空的。这就是所有空单元格应该的显示方式。

知道为什么其中一些单元格填充“1074”,即使它们应该是空的?

【问题讨论】:

  • 也许单元格值真的 1074,但是在Excel中查看时由于某种原因它们被隐藏了?我知道单元格是“空的”,但是如果你在 Excel 中将单元格光标放在它上面,公式栏中会显示什么?有条件格式吗?单元格是否包含带有=if(...) 的公式?
  • 感谢您的想法。我已清除所有格式并验证没有公式。该值仍然是 1074。
  • 通过找到其中一个幻像并删除上下所有行以及左右所有列,将其保留在 A1 处,构建一个最小版本的单单元格电子表格。然后看看 XML。
  • 我试一试,看看它是否显示什么。

标签: c# .net xml excel


【解决方案1】:

单元格的类型是 SharedString - t="s" - 这意味着值 - &lt;v&gt;1074&lt;/v&gt; - 是对共享字符串表的引用,而不是表示单元格中显示的值

如果你查看.xlsx文件的xl文件夹中的sharedstrings.xml,你会找到相关的字符串

各种细胞类型的详细信息在this answer

【讨论】:

  • 你是对的。我只是看着那个共享文件并意识到这一点!
猜你喜欢
  • 1970-01-01
  • 2021-10-01
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多