2010-11-16 27 views
1

我遇到了xlrd和xlwt的問題。粘貼下面的示例代碼 。XLWT和XLRD面臨的問題 - 同時讀寫

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文件,有一些出類拔萃像對數正態分佈,STDDEV等 特定的功能和讀取使用XLRD計算 值。

通過運行上面的代碼,我得到下面的成果,這是不可取 -

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

理想我應該拿15在第二排。當我打開它時,它會完美地寫出Excel ,但XLRD不會返回結果。我是 堅持這個非常關鍵的項目。要求您儘早回覆 。

感謝和問候 塔倫Pasrija

+0

嘗試在打開第二個工作簿之前關閉第一個工作簿。您可能有文件沖洗問題。 – katrielalex 2010-11-16 20:07:35

+2

另外,這些Excel專用函數是什麼?我很確定'scipy'會讓他們更純粹地在純Python中實現。 – katrielalex 2010-11-16 20:25:12

回答

2

您需要在Excel中打開它,並運行第二位之前重新保存。 xlwt/xlrd實際上並沒有自己制定公式,所以你需要Excel來做到這一點。我剛剛使用OpenOffice進行了測試,並在重新保存文件後運行。

另外,請告訴我,您是不是使用這種方法來計算平均值?你可以做的是Python很容易:

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

(在Python 3,你可以離開了浮動())

+0

嘿托馬斯..謝謝你的回覆。就像你說的,我沒有使用Excel的平均數等,但對於更多的科學研究操作,如LogNormDist和Stdev。當我試圖讀取包含由XLWT編寫的公式的單元格時,它將它們作爲字符串讀取,並且我想爲什麼它不能這樣做。重新開始工作,但如果我在webapp中自動化某些東西,我無法控制它,因爲計算的數字是爲我的圖表輸入的。你有解決這個問題的辦法嗎? – 2010-11-16 20:55:43

+0

蟒蛇很容易做到這些科學操作;例如導入scipy並使用scipy.std和scipy.lognormal。 – 2010-11-16 21:01:47

+1

我同意jimbob:使用Excel做計算是一個非常尷尬的方式來做到這一點,即使它可以自動化。我們在scipy中有很多科學計算功能:http://docs.scipy.org/doc/scipy/reference/stats.html。 – 2010-11-16 21:12:35

7

這是我給了同樣的問題蟒,Excel中的答案google-group昨天。

背景:我xlrd的作者/維護者和xlwt的維護者]

既不xlrd也不xlwt包含公式評估引擎。這與其他免費(在任何意義上)並且以解釋型語言編寫的軟件包相同。教程中記錄了這一點,您可以通過http://www.python-excel.org下載...請參閱第17頁和第36頁。

如果將腳本分解爲兩部分,請執行第一步,使用Excel/OOo打開結果XLS文件calc/Gnumeric,[可能需要按F9重新計算],再次保存,執行第二個腳本片段:xlrd將顯示結果。

其他可能性:

(1)問Gnumeric的郵件列表上,如果它可以驅動Gnumeric的編程方式的程度:打開一個名爲XLS文件,[重新]計算所有公式,保存爲名爲XLS文件(包括重新計算的公式結果 - 有必要強調這一點,因爲上次我詢問時,本地gnumeric文件格式未包括計算出的公式結果)。 (2)你可能會問關於Openoffice.org的calc程序的問題,也許在新聞上:comp.lang.python和/或www.stackoverflow.com ...它有一組API叫做「PyUNO」 ;上次我看,大多數人都放棄了嘗試瀏覽和理解文檔的數量太多。我肯定會在Python +電子表格世界中獲得更好的消息。(3)「LogNormal」(我認爲你的意思是LOGNORMDIST和/或LOGINV)和「StdDev」幾乎不是Excel特有的。你可以用Python計算你自己的結果;需要增加xlwt以允許調用者爲公式單元格提供結果值,而不是像您注意到的那樣插入不變的零長度字符串。

(4)告訴我們你的更高層次的目標......然後我們可能會提出其他建議。

這是「非常關鍵的項目」學術/慈善機構/商業企業?你認爲Resolver One(http://www.resolversystems.com/products/resolver-one/)? AFAIK,他們提供折扣和他們的產品是廉價的,無論如何,每個許可證大約100美元。