我必须将 算法从Excel工作表移植到python代码, 但必须对 Excel文件中的算法 进行 反向工程 。
Excel工作表非常复杂,它包含许多单元格,在这些单元格中有引用其他单元格的公式(也可以包含公式或常数)。
我的想法是使用python脚本分析工作表,以构建一种单元格之间的依存关系表,即:
A1取决于B4,C5,E7公式:“ = sqrt(B4)+ C5 * E7”
A2取决于B5,C6公式:“ = sin(B5)* C6”
…
所述xlrd蟒模块允许读取XLS工作簿但此刻我可以访问到 的值
的单元,而不是的 公式 。
例如,使用以下代码,我可以简单地获取单元格的值:
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对象中获取公式。他们在文档中说可以获取该公式的字符串版本(英文,因为在Excel文件中没有存储有关函数名称转换的信息)。他们谈论
Name 和 Operand 类中的公式(表达式),无论如何我都无法理解如何通过必须包含它们的 Cell 类实例来获取这些类的实例。
您能否建议一个从单元格获取公式文本的代码段?
[免责声明]:我是的作者/维护者xlrd
。
公式文本的文档参考中涉及“名称”公式。阅读文档开头附近的“命名引用,常量,公式和宏”部分。这些公式在工作表范围或全书范围与名称相关联;它们与单个单元格无关。示例:PI
映射到=22/7
,SALES
映射到=Mktng!$A$2:$Z$99
。编写名称-
公式反编译器以支持检查已定义名称的更简单和/或常见用法。
一般而言,公式有几种:单元格,共享和数组(都直接或间接与单元格关联),名称,数据验证和条件格式。
从字节码到文本反汇编通用公式是一个“正在进行中”的过程。请注意,假设它可用,那么您将需要解析文本公式以提取单元格引用。正确地解析Excel公式并非易事。与HTML一样,使用正则表达式看起来很简单,但不起作用。最好直接从公式字节码中提取引用。
还要注意,基于单元格的公式可以引用名称,而名称公式可以同时引用单元格和其他名称。因此,有必要从基于单元格和名称的公式中提取单元格和名称引用。获得有关共享公式的信息可能对您很有用;否则解析以下内容:
B2 =A2
B3 =A3+B2
B4 =A4+B3
B5 =A5+B4
...
B60 =A60+B59
您需要自己推断B3:B60
公式之间的相似性。
在任何情况下,以上任何一种方法都不可能在不久的xlrd
将来可用-优先事项位于其他地方。
在Java中,我应该得到的输出是
问题内容: 我正在使用apache POI读取Excel文档。至少可以说,到目前为止,它已经可以满足我的目的。但是令我震惊的一件事是将单元格的值提取为HTML。 我有一个单元格,用户将在其中输入一些字符串并应用某种 格式(例如,项目符号/数字/粗体/斜体) 等。 因此,当我阅读它时,内容应为 HTML 格式,而不是POI给出的纯字符串格式。 我几乎遍历了整个POI API,但找不到任何人。我只想保
问题内容: 如何在Java中使用poi获取单元格值? 我的代码看起来像这样 但是,如果在这种情况下,我如何检查我的单元格值是否包含错误值,例如#DIV / 0!以及如何用N / A替换它 问题答案: 您必须使用FormulaEvaluator,如图所示这里。如果单元格包含这样的公式,它将返回一个值,该值要么是单元格中存在的值,要么是公式的结果: 如果您需要精确的内容(例如,如果单元格包含公式,则为
我试图从excel文件中读取所有数据,其中也有一些公式单元格,但我不知道哪个单元格是公式单元格。如何读取单元格中的所有值,而不考虑单元格的类型。 我的代码看起来像这样 我得到的公式单元格值为0
我正在开发一个上传excel文件并将其值插入数据库的应用程序。 我的代码如下: 所以当我上传一个像下面这样的excel文件时,它会工作并将其数据插入db。 但是,当我上传像以下这样的excel文件时,db不会更新。 我可以问你如何解决这个问题,所以即使单元格的值是=ROUNDUP((600),2),而不是600,它仍然更新db。 提前谢谢你。
我的C#. Net应用程序通过使用excel公式字符串加载和读取excel工作表单元格值。 例如,excel工作表位置和选项卡名称及其单元格行/列将作为公式字符串提供。 'D:\DataX[数据.Xls]EOD'$A5级 根据上述公式-C#应用程序加载数据。Xls,并打开EOD选项卡,应读取第5行A列值。 寻找在C#中完成的最佳方式。Net框架。