2011-11-14 69 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,并且如果可能的话我会继续这样做。 –

相关问题