面对XLWT和XLRD的问题 - 同时读写

时间:2010-11-16 19:59:55

标签: python excel xlrd xlwt

我遇到了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)

这个想法是给Excel文件写一些值,有一些excel LogNormal,StdDev等特定函数并读取计算结果 使用XLRD的值。

通过运行上面的代码,我得到以下结果 不希望的: -

[10.0, 20.0]
[u'', '']

理想情况下,我应该在第二排得到15分。它写了Excel 完全打开它但XLRD没有返回结果。我是 坚持这个非常关键的项目。请你好心 最早回复。

谢谢和问候 Tarun Pasrija

2 个答案:

答案 0 :(得分:8)

以下是我昨天在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文件,[重新]计算所有公式,保存为命名的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美元。

答案 1 :(得分:2)

您需要在Excel中打开它并在运行第二位之前重新保存它。 xlwt / xlrd实际上并没有自己计算出公式,所以你需要Excel才能做到这一点。我刚刚使用OpenOffice进行了测试,它在重新保存文件后起作用。

另外,请告诉我你没有使用这种方法来计算平均值?你可以很容易地在Python中做到这一点:

average = float(sum(mynumbers))/len(mynumbers)

(在Python 3中,你可以省略float())