我正面临着xlrd和xlwt的问题.粘贴下面的示例代码.
from xlwt import Workbook, Formula, XFStyle
import xlrd
book = Workbook()
sheet1 = book.add_sheet('Sheet 1')
myFontStyle = XFStyle()
myFontStyle.num_format_str = '0.00'
sheet1.write(0,0,10, myFontStyle)
sheet1.write(0,1,20, myFontStyle)
sheet1.write(1,0,Formula('AVERAGE(A1:B1)'), myFontStyle)
book.save('formula.xls')
wb = xlrd.open_workbook('formula.xls')
sh = wb.sheet_by_index(0)
for rownum in range(sh.nrows):
print sh.row_values(rownum)
Run Code Online (Sandbox Code Playgroud)
想法是将一些值写入Excel文件,具有一些excel特定函数,如LogNormal,StdDev等,并使用XLRD读取计算值.
通过运行上面的代码,我得到以下不希望的结果: -
[10.0, 20.0]
[u'', '']
Run Code Online (Sandbox Code Playgroud)
理想情况下,我应该在第二排得到15.当我打开它时,它会完美地写入Excel,但XLRD不会返回结果.我坚持这个非常关键的项目.请求您尽早回复.
谢谢并问候Tarun Pasrija
这是我昨天在python-excel google-group上对同一个问题给出的答案.
[背景:我是xlrd的作者/维护者和xlwt的维护者]
xlrd和xlwt都不包含公式评估引擎.这与其他免费(在任何意义上)并以解释语言编写的包相同.这可以在教程中记录,您可以通过http://www.python-excel.org下载...参见第17和36页.
如果你把你的脚本分成两部分,执行第一部分,用Excel/OOo calc/Gnumeric打开结果XLS文件,[可能需要在这里按F9重新计算],再次保存,执行第二个脚本部分:xlrd将显示结果.
其他可能性:
(1)在gnumeric邮件列表上询问是否可以以编程方式驱动gnumeric:打开命名的XLS文件,[re-]计算所有公式,保存为命名的XLS文件(包含重新计算的公式结果 - 它有必要强调这一点,因为上次我问过,原生的gnumeric文件格式没有包含计算的公式结果).
(2)你可以问一下关于Openoffice.org的计算程序的相同问题,也许是关于新闻:comp.lang.python和/或www.stackoverflow.com ......它有一组叫做"PyUNO"的API; 上次我看的时候,大多数人都放弃了试图跋涉并理解大量文件.任何更好的消息我都会在Python +电子表格世界中感激不尽.
(3)"LogNormal"(我认为你的意思是LOGNORMDIST和/或LOGINV)和"StdDev"几乎不是特定于Excel的.你可以用Python计算你自己的结果; 需要增加xlwt以允许调用者为公式单元格提供结果值,而不是如您所注意到的那样插入不变的零长度字符串.
(4)告诉我们你的更高层次的目标......然后我们可以提出其他建议.
这是一个"非常关键的项目"学术/慈善机构/商业企业吗?您是否考虑过Resolver One(http://www.resolversystems.com/products/resolver-one/)?AFAIK,他们提供折扣,他们的产品很便宜,无论如何每个许可证约100美元.