2016-12-02 183 views
1

我想要做的是1)在excel中獲得一個folmula結果和2)將值更新到現有的excel文件。 [output_result我使用「xlsxwriter」創建並編寫了這個folmula。但是,當我嘗試使用openpyxl(或熊貓)來檢索folmula結果時,它返回0.我想用「xlwings」來解決這個問題,但不知道如何去做。誰能幫忙?如何使用xlwings獲得公式結果excel

#openpyx 
wb = openpyxl.load_workbook(filename=xlsx_name,data_only=True) 
ws = wb.get_sheet_by_name("sheet1") 
print "venn_value",(ws.cell('X2').value) 
#pandas 
fold_merge_data=pd.read_excel(xlsx_name,sheetname=1) 
print fold_merge_data['Venn diagram'][:10] 
+0

該XlsxWriter公式爲0時解釋原因在文檔中:[XlsxWriter公式結果](https://xlsxwriter.readthedocs.io/working_with_formulas.html#formula-results)。 – jmcnamara

+0

其實我之前讀過文檔,而且我也在另一個線程中看過xlwings可能有助於解決這個問題; [LINK1](http://stackoverflow.com/questions/38915228/fails-to-read-the-value-of-formular-after-using-xlsxwriter-to-close-and-then-usi/38922683#38922683)和[link2](http://stackoverflow.com/questions/28517508/read-excel-cell-value-and-not-the-formula-computing-it-openpyxl)。我只是想知道使用xlwings(或其他)的代碼片段能夠解決這個問題。 – talktalk

+0

如果您已經在使用XlsxWriter,爲什麼還要打擾xlwings?這些文檔還向您展示瞭如何將值寫入單元格(以及公式),以便它不爲零。 –

回答

0

是,xlwings可以,因爲它使用pywin32對象互動使用Excel,而不是像openpyxl和熊貓只是讀/寫XLSX或CSV文件,解決這個問題你。這樣,Excel實際上執行公式,xlwings抓取結果。

爲了獲得價值,你可以這樣做:

import xlwings as xw 
sheet = xw.sheets.active # if the document is open 
#otherwise use sheet = xw.Book(r'C:/path/to/file.xlsx').sheets['sheetname'] 
result = sheet['X2'].value 

另外請注意,您可以設置使用公式,例如

sheet['A1'].value = '=1+1' # or ='B1*2' if you want to reference other cells 
+0

需要注意的一件重要的事情是,這樣做會打開Excel,所以基於xlwings的腳本將不能在Linux系統上運行(可能通過Wine,我沒有嘗試過)。而且,這種方法比通過例如大熊貓,所以如果你想處理大量的文件,它不是可擴展的。 – sheridp

+0

一個恥辱,我需要在Linux中這樣的東西。 – 2017-11-04 05:18:08