У меня есть программа, которая считывает значение ячейки в электронной таблице (через COM), обращаясь к ее члену «Текст». Когда я использовал Excel 2003, моя программа правильно возвращала отображаемое значение ячейки. Теперь я использую OpenOffice Calc, и вместо этого я получаю формулу в ячейке ('=СУММ(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

...

Использование «Значения» в empty() дает то же значение, что и «Текст».

1
Charles Anderson 14 Ноя 2011 в 21:28
3
Милосердие, это много технологий, просто чтобы получить значение из электронной таблицы.
 – 
William Walseth
14 Ноя 2011 в 21:35
Когда вы перешли на OpenOffice Calc, вы начали использовать файлы ods или остановились на xls/xlsx?
 – 
Steven Rumbalski
14 Ноя 2011 в 22:01
Первоначально я просто использовал Python/win32com для открытия Excel. Теперь, когда мой работодатель решил перейти на OpenOffice, у меня больше нет Excel. АвтоматизироватьIT! должен сделать Calc похожим на Excel, поэтому я решил попробовать. И это в основном работает, за исключением чтения значения ячеек формулы.
 – 
Charles Anderson
15 Ноя 2011 в 13:31

1 ответ

Почему бы просто не сохранить файл как CVS в Excel, а затем использовать модуль csv для извлечения данных из файла? Это даст вам данные ячейки, а не формулу.

0
Dave 14 Ноя 2011 в 21:59
Я полагаю, что он хочет сохранить формулы.
 – 
Steven Rumbalski
14 Ноя 2011 в 22:10
Моя запасная позиция - открыть файл вручную и отредактировать его. Однако раньше у меня была возможность запускать скрипт Python для создания нужного мне мода, и я хотел бы продолжать делать это, если это вообще возможно.
 – 
Charles Anderson
15 Ноя 2011 в 13:35