从Excel文件读取缓存的外部字段,结果与Excel中看到的不同

5 投票
3 回答
1392 浏览
提问于 2025-04-17 17:02

我正在用Python3中的xlrd库读取一个Excel文件,但读取的单元格内容和我在Excel中看到的结果不一样。

我发现我想访问的单元格似乎是从某个外部来源获取数据的,这些数据会定期更新,但我无法访问那个来源,所以Excel显示的是一些缓存的值。这些值其实在同一个Excel文件的其他地方,所以在工作表中你看到的比如“2.65111”,但在Excel的编辑栏中,单元格的实际内容显示为“=BC12”。

当我尝试通过xlrd读取这个单元格时,代码如下:

wb=xlrd.open_workbook("filename.xls",formatting_info=True)
wb.sheet_by_name("sheetname").cell(12,9)

读取的单元格内容显示为:

'text:'[XXXX]' (XF:95)'

(其中XXXX很可能是这个外部.csv文件的某一列的名称)

我本来希望xlrd能返回我在Excel中看到的“2.65111”,或者至少返回“=BC12”作为对另一个单元格的引用,但我无法使用这个“[XXXXX]”的东西。

有没有办法让xlrd显示这两者中的任何一个?

我真的很困惑这个“[XXXXX]”是从哪里来的,为什么和我在Excel中看到的差别这么大。

另外,我不能只使用BC12单元格的数据,因为这应该是一个自动处理文件的过程,而只有“原始”单元格的位置是固定的,其他的单元格可能第二天就会在随机的位置。

3 个回答

0

你可能唯一的选择是通过Excel的COM API来预处理文件。你可以在.NET中做一些简单的操作,加载Excel文件,获取数据,然后保存成一个结构类似但没有外部引用的Excel文件。用Excel加载一个文件需要花费一些时间(几秒钟),如果在服务器上过载的话肯定会失败,但如果你每天只有几个文件要处理,那这样是可以的。当然,如果你不是在Windows系统上,这种方法就行不通了。

0

"12,9单元格"在Excel中被称为J13(不是J12)。你确定你在比较相同的内容吗?J13里面应该有指向BC12的内容吗?你能通过查看J13和BC12周围的单元格来推测出什么吗?

1

一个解决办法是把你的Excel表格复制一份,只保留数值,不要公式或外部链接。

你可以先选中并复制所有内容,然后在新表格里使用“特殊粘贴”,选择“仅粘贴数值”或者类似的选项。

撰写回答