2011-10-05 46 views
0

我正在嘗試編輯幾個excel文件(.xls)而不更改工作表的其餘部分。到目前爲止,我發現的唯一東西是xlrd,xlwt和xlutils模塊。這些問題似乎是xlrd在閱讀時評估公式,然後將答案作爲單元格的值。有沒有人知道保存公式的方法,以便我可以使用xlwt寫入文件而不會丟失它們?我有我在Python和CLISP方面的大部分經驗,但如果他們有更好的支持,他可以很快地選擇另一種語言。謝謝你提供的所有幫助!有什麼方法可以使用Python保存公式來編輯現有的Excel文件?

+0

您是否安裝了Excel? –

+0

是的,但我在Mac上運行它。我也有OpenOffice – user934001

回答

1

我已經使用xlwt.Formula函數才能夠獲取超鏈接到單元格中。我想它也可以與其他公式一起使用。

更新:這裏有一個片段我在我用它在一個項目中找到:

link = xlwt.Formula('HYPERLINK("%s";"View Details")' % url) 
sheet.write(row, col, link) 
+1

你似乎錯過了這個問題。 OP的問題是xlrd不讀公式。因此,他沒有用xlwt寫出的公式。 –

1

截至目前,xl​​rd不讀公式。這不是它評估它們,它根本不會讀取它們。

現在,您最好的選擇是通過pywin32或Visual Basic或VBScript(或其他Microsoft友好的具有COM接口的語言)以編程方式控制Excel的運行實例。如果您無法運行Excel,那麼您可以改用OpenOffice.org做類似的事情。

1

我們剛剛遇到了這個問題,我們可以做的最好的辦法是手動將公式寫爲文本,然後將它們轉換爲適當的輸出公式。

所以打開Excel和替換=SUM(C5:L5)"=SUM(C5:L5)"包括引號。如果你有你的公式中一個雙引號,用2個引號替換它,因爲這會逃跑,所以= "a" & "b"成爲"= ""a"" & ""b"" "

然後在你的Python代碼,遍歷源和輸出紙張的每一個細胞,做:

output_sheet.write(row, col, xlwt.ExcelFormula.Formula(source_cell[1:-1])) 

我們使用this SO answer,使源表的副本是輸出板,它甚至可以保留的風格,避免從上面覆蓋手寫文本公式。

+0

謝謝,它的工作原理 –

6

我有同樣的問題......最後發現下一個模塊:

from openpyxl import load_workbook 
def Write_Workbook(): 
    wb = load_workbook(path) 
    ws = wb.get_sheet_by_name("Sheet_name") 
    c = ws.cell(row = 2, column = 1) 
    c.value = Some_value 
    wb.save(path) 

==>這樣做,我的文件保存得到保留之前插入所有公式。

希望這會有所幫助!

+0

只要文件是'.xlsx'或者可以轉換成這個文件就可以解決這個問題。 OpenPyXL不能與'.xls'文件一起使用。 –

相關問題