首页 > 解决方案 > js xlsx readFile 无缘无故地偏移列

问题描述

读取 excel 文件时我有一个奇怪的行为。当我打开文件并使用我的 Excel 版本保存时,使用 xlsx 正确读取文件。但是,当我不触摸它并用 xlsx 读取它时,一些公式会被抵消。这是一个示例:我阅读了我的 excel 文件并专注于单元格 O124。在打开它并保存它之前(不做任何修改),这是我在单元格 O124 中得到的:

    { t: 'n', v: 18202.970297029704, f: 'O124*(1+P144)*(1+P$146)', w: '18,203',

当然,这里有一个循环引用(在 O124 上)。P144 和 P146 也被移位。但是,当我打开它并使用 Excel 保存时(我使用的是 Excel 2019),我可以看到公式是 N124 而不是 O124(所以没有循环引用)。这是他的结果:

    { t: 'n', v: 18202.970297029704, f: 'N124*(1+O144)*(1+O$146)', w: '18,203',

我有正确的 N124、O144 和 O146。

我真的不明白为什么当我不先“重新保存”我的文件时会发生变化。你有什么想法吗?

[编辑] 我将 xlsx 包与节点 js 一起使用,然后我使用 xlsx-calc 包在工作表上进行计算。这是我首先得到循环引用错误的地方。

非常感谢你的帮助!

标签: node.jsjs-xlsx

解决方案


对于那些感兴趣的人,使用最新版本的包 xlsx (0.14.4) 时解决了这个问题。事实上,正如包的开发人员所回答的那样,这是由于 excel 中的共享公式。在文件的 xml 中,我们有:

    <c r="N123" s="20">
        <f t="shared" ref="M123:O125" si="201">M123*(1+N143)*(1+N$146)</f>
        <v>12208.016586040083</v>
      </c>


      <c r="O124" s="20">
        <f t="shared" si="201"/>
        <v>18202.970297029704</v>

si是一个引用共享公式的索引。使用最新版本的软件包解决了该问题。


推荐阅读