python - 使用 python xlrd 从 Excel 单元格中获取公式

标签 python excel formula xls xlrd

我必须将算法从 Excel 工作表移植到 Python 代码,但我必须对 Excel 文件中的算法进行逆向工程

Excel 工作表相当复杂,它包含许多单元格,其中有引用其他单元格的公式(也可以包含公式或常数)。

我的想法是用python脚本来分析表格,建立一个单元格之间的依赖关系表,即:

A1 depends on B4,C5,E7 formula: "=sqrt(B4)+C5*E7"
A2 depends on B5,C6 formula: "=sin(B5)*C6"
...

xlrd python 模块允许读取 XLS 工作簿,但目前我可以访问单元格的 value,而不是 formula

例如,使用以下代码,我可以简单地获取单元格的值:

import xlrd

#open the .xls file
xlsname="test.xls"
book = xlrd.open_workbook(xlsname)

#build a dictionary of the names->sheets of the book
sd={}
for s in book.sheets():
    sd[s.name]=s

#obtain Sheet "Foglio 1" from sheet names dictionary
sheet=sd["Foglio 1"]

#print value of the cell J141
print sheet.cell(142,9)

无论如何,似乎没有办法从 .cell(...) 方法返回的 Cell 对象中获取公式。 在 documentation他们说可以获得公式的字符串版本(英文是因为没有关于存储在 Excel 文件中的函数名称翻译的信息)。他们谈论 NameOperand 类中的公式(表达式),无论如何我无法理解如何通过 Cell 获取这些类的实例必须包含它们的类实例。

您能否推荐一个从单元格中获取公式文本的代码片段?

最佳答案

[Dis]声明:我是 xlrd 的作者/维护者。

公式文本的文档引用是关于“名称”公式的;阅读文档开头附近的“命名引用、常量、公式和宏”部分。这些公式在工作表范围或书籍范围内与名称相关联;它们与单个细胞无关。示例:PI 映射到 =22/7SALES 映射到 =Mktng!$A$2:$Z$99。名称公式反编译器旨在支持检查已定义名称的更简单和/或常见用法。

公式一般有几种:单元格、共享和数组(都与单元格直接或间接关联)、名称、数据验证和条件格式。

将一般公式从字节码反编译为文本是一项“正在进行的工作”,速度很慢。请注意,假设它可用,您将需要解析文本公式以提取单元格引用。正确解析 Excel 公式并非易事;与 HTML 一样,使用正则表达式看起来很简单,但不起作用。最好直接从公式字节码中提取引用。

另请注意,基于单元格的公式可以引用名称,而名称公式可以引用单元格和其他名称。因此,有必要从基于单元格的公式和名称公式中提取单元格和名称引用。获取有关可用共享公式的信息可能对您有用;否则解析以下内容:

B2 =A2
B3 =A3+B2
B4 =A4+B3
B5 =A5+B4
...
B60 =A60+B59

您需要自己推断 B3:B60 公式之间的相似性。

无论如何,上述任何一项都不太可能在短期内可用——xlrd 优先级在别处。

关于python - 使用 python xlrd 从 Excel 单元格中获取公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4690423/

相关文章:

python - 使用 ffmpeg-python 设置转换后的输出文件的帧率

python - 在python中从列表中检索数据时进行查询

Excel VBA 将多个工作表设置为变量

c# - 如何使用 C# 获取上传的 excel 文件的工作表名称?

在 Apache 中用于 Web 开发的 Python

Python numpy 从 1.6 更新到 1.8

excel - 需要对象 运行时错误 424

regex - R:如何创建公式对象以允许正确的文本表示?

python - 莱布尼茨行列式公式复杂度

user-interface - 滚动条内容步长公式