【问题标题】:OpenXML: XML and Excel worksheet has different valuesOpenXML:XML 和 Excel 工作表具有不同的值
【发布时间】:2019-01-07 15:44:38
【问题描述】:

当我使用 OpenXML 读取 Excel 工作表时,我的值与 Excel 中的单元格值不同。这发生在 OpenXML Productivity Tool、我的代码中以及当我将扩展名更改为 .zip 并在浏览器中查看 XML 时。例如,这是我的 Excel 工作表的一部分(抱歉,我没有足够的“声誉”来在此处发布工作表的图像):

SAMPLE ID   ANALYTE ID  RESULT QUANTIFIER   RESULT
782-3M-000085   75-35-4 <   0.11
782-3M-000085   56-23-5 <   0.0006
782-3M-000085   156-59-2    <   0.497
782-3M-000085   75-69-4 <   0.0009
782-3M-000085   67-66-3 <   0.008
782-3M-000085   76-13-1 <   0.006
782-3M-000085   127-18-4        1.79

XML 看起来像这样(其中一部分):

 <row r="1" spans="1:18" ht="38.25" x14ac:dyDescent="0.2">
 <c r="A1" s="30" t="s">
  <v>103</v> 
  </c>
 <c r="B1" s="30" t="s">
  <v>6</v> 
  </c>
 <c r="C1" s="30" t="s">
  <v>24</v> 
  </c>
 <c r="D1" s="30" t="s">
  <v>104</v> 
  </c>
 <c r="E1" s="30" t="s">
  <v>105</v> 
  </c>
   </row>
 <row r="2" spans="1:18" x14ac:dyDescent="0.2">
 <c r="A2" t="s">
  <v>48</v> 
  </c>
 <c r="B2" t="s">
  <v>115</v> 
  </c>
 <c r="C2" s="36" t="s">
  <v>116</v> 
  </c>
 <c r="D2">
  <v>0.11</v> 
  </c>
 <c r="E2" t="s">
  <v>117</v> 
  </c>
   </row>
 <row r="3" spans="1:18" x14ac:dyDescent="0.2">
 <c r="A3" t="s">
  <v>48</v> 
  </c>
 <c r="B3" t="s">
  <v>123</v> 
  </c>
 <c r="C3" s="36" t="s">
  <v>116</v> 
  </c>
 <c r="D3">
  <v>5.9999999999999995E4</v> 
  </c>
   </row>
 <row r="4" spans="1:18" x14ac:dyDescent="0.2">
 <c r="A4" t="s">
  <v>48</v> 
  </c>
 <c r="B4" t="s">
  <v>124</v> 
  </c>
 <c r="C4" s="36" t="s">
  <v>116</v> 
  </c>
 <c r="D4">
  <v>0.497</v> 
  </c>
   </row>

有人知道我做错了什么吗?我正在尝试将工作表中的值导入到我的代码中。

【问题讨论】:

  • 我想你在问为什么 /xl/worksheets/sheet.xml 中没有显示字符串值?它们存储在单独的文件 /xl/sharedStrings.xml 中,以帮助减少重复字符串的使用。
  • 我的工作表中的值在任何 XML 文件中都找不到。这对我来说真的很奇怪。我已经在 PowerPoint 中使用 OpenXML 做了很多工作,但从来没有使用 Excel。会不会是数据类型问题?
  • @CharlieHorse 请提供一个示例,说明您正在寻找的正是您在 xml 中没有看到的值。如果您发布了一个您认为有问题的实际工作簿的链接,那将是最好的。
  • 我正在寻找“782-3M-000085”(这应该是一个字符串值)并得到“48”。
  • @CharlieHorse 您到底在哪里寻找那个字符串?如果我将您的数据粘贴到工作簿中,然后将其作为 xml 打开,则该字符串存在。和所有其他数据一样

标签: excel openxml


【解决方案1】:

@psantiago 是对的 - 您正在处理“共享字符串”。

单元格元素的 't' 属性告诉您单元格的 - 元素中的数据类型。 (OpenXml 标准中的第 18.3.1.4 节)。在这种情况下,“s”值告诉您该值是 SharedStrings 文件的索引。 (第 18.18.11 节 ST_CellType(小区类型))。因此,在 SharedStrings.xml 文件的索引 48 处,您会找到所需的信息。

还要查看与包含值“0.11”的单元格的差异。

<c r="D2">
  <v>0.11</v> 
</c>

它没有“单元格数据类型”属性,因此单元格中的值只是“0.11”。

您可以在http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html 获取完整文档 - 在页面中搜索“ISO/IEC 29500-1:2012”

【讨论】:

  • 完美!我错过了 sharedStringTable 位。
猜你喜欢
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 2019-07-20
  • 2021-03-20
相关资源
最近更新 更多