5

我正在尝试在 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 中看到的如此不同。

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

4

3 回答 3

1

一种解决方案可能是制作仅包含值、不包含公式或外部源的 Excel 工作表的副本。

您可以通过突出显示和复制所有内容,然后将“特殊粘贴”“粘贴”到新工作表中,然后选择“仅值”或类似的东西来做到这一点。

于 2013-02-28T14:42:19.117 回答
0

您可能唯一的选择是通过 Excel COM API 使用实际的 Excel 预处理文件。您可以在 .NET 中做一些简单的事情,这将加载 excel 文件,获取数据并将其保存在类似结构的 excel 文件中,但没有外部引用。用 Excel 加载一个 excel 文件需要很长时间(几秒钟),如果你在服务器上超载它肯定会失败,但如果你每天有几个文件,它会工作。当然,如果您不在 Windows 上运行,它将无法工作。

于 2013-03-06T14:07:47.540 回答
0

Excel 将“12,9 单元格”称为 J13(不是 J12)。你确定你是在比较同类吗?预计 J13 将包含对 BC12 的引用吗?你能通过检查 J13 和 BC12 周围的细胞来推断什么吗?

于 2013-03-02T21:44:51.950 回答