Как прочитать отображаемое значение ячейки электронной таблицы, а не формулу?

#python #excel #win32com #openoffice-calc

#python #excel #win32com #openoffice-calc

Вопрос:

У меня есть программа, которая считывает значение ячейки в электронной таблице (через COM), получая доступ к ее элементу ‘Text’. Когда я использовал Excel 2003, моя программа корректно возвращала отображаемое значение ячейки. Теперь я использую OpenOffice Calc, и вместо этого я возвращаю формулу в ячейку (‘=SUM(F8: F10)’).

Чтобы усложнить ситуацию, я использую инструмент под названием AutomateIt! чтобы позволить мне обрабатывать Calc так, как если бы это был Excel, так что, возможно, проблема в этом, а не в Calc.

Моя программа написана на Python, и я использую библиотеку win32com.client для создания COM-диспетчера. В этом суть кода Python (функция ’empty’ всегда возвращает 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

...
  

Использование ‘Value’ в empty() дает то же значение, что и ‘Text’.

Комментарии:

1. Помилуйте, это большая технология, просто получить значение из таблицы распространения.

2. Когда вы переключились на OpenOffice Calc, вы начали использовать файлы ods или придерживались xls / xlsx?

3. Изначально я просто использовал Python / win32com для открытия Excel. Теперь, когда мой работодатель решил перейти на OpenOffice, у меня больше нет Excel. Автоматизируйте это! Calc должен выглядеть как Excel, поэтому я решил попробовать. И это в основном работает, за исключением чтения значения ячеек формулы.

Ответ №1:

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

Комментарии:

1. Я бы предположил, что он хочет сохранить формулы.

2. Мой запасной вариант — открыть файл вручную и отредактировать его. Однако раньше я мог запускать скрипт на Python для выполнения нужного мне изменения, и я хотел бы продолжать это делать, если это вообще возможно.