2011-11-14 109 views
1

我有一個程序,通過訪問其「文本」成員來讀取電子表格中的單元格的值(通過COM)。當我使用Excel 2003時,我的程序正確地返回了單元格的顯示值。現在我正在使用OpenOffice Calc,取而代之,我正在取回單元格中的公式('= SUM(F8:F10)')。如何讀取電子表格單元格的顯示值,而不是公式?

使事情複雜化,我正在使用一個名爲AutomateIT!的工具,讓我把Calc看作是Excel,所以可能是因爲這導致問題而不是Calc。

我的程序是在Python中,我使用win32com.client庫來創建COM調度程序。 這是Python代碼的本質(在「空」功能總是含有公式的單元格返回false):

from win32com.client import Dispatch 

def empty(cell): 
    """Returns false if the specified cell has a non-zero value in it""" 
    val = sheet.Range(cell).Text 
    return val == 0.0 or val == '' or val == None 

xlApp = Dispatch('Excel.Application') # Actually opens OpenOffice Calc, thanks to AutomateIT! 

xlApp.Workbooks.Open('myfile.ods') 

sheet = xlApp.Workbooks(1).Sheets(1) 

if empty('F12'): 
    sheet.Range('C2').Value = 'X' # Never get here because F12 is a formula cell 

... 

在空使用「價值」()給出了相同的值「文本」。

+3

慈悲,這是很多技術,只是爲了從spreasheet中獲得價值。 –

+0

當你切換到OpenOffice Calc你開始使用ods文件還是你堅持使用xls/xlsx? –

+0

最初我只是使用Python/win32com打開Excel。現在我的僱主決定遷移到OpenOffice,我不再擁有Excel了。 AutomateIT!應該讓Calc看起來像Excel,所以我想我會試試看。除了閱讀公式單元格的值之外,它主要起作用。 –

回答

0

爲什麼不把文件保存爲Excel中的CVS,然後使用csv模塊從文件中提取數據?這會給你的細胞數據,而不是公式。

+0

我會想象他想保留這些公式。 –

+0

我的回退位置是手動打開文件並對其進行編輯。不過,我曾經可以運行一個Python腳本來完成我想要的MOD,並且如果可能的話我會繼續這樣做。 –

相關問題