Есть ли способ отредактировать существующий файл Excel, используя формулы, сохраняющие Python? - PullRequest
0 голосов
/ 05 октября 2011

Я пытаюсь отредактировать несколько файлов Excel (.xls), не меняя остальную часть листа.Единственное, что я пока нашел, это модули xlrd, xlwt и xlutils.Проблема с этим заключается в том, что xlrd оценивает формулы при чтении, а затем помещает ответ в качестве значения ячейки.Кто-нибудь знает способ сохранить формулы, чтобы я мог затем использовать xlwt для записи в файл, не теряя их?У меня большая часть опыта работы с Python и CLISP, но я мог бы довольно быстро выбрать другой язык, если бы у него была лучшая поддержка.Спасибо за любую помощь, вы можете дать!

Ответы [ 4 ]

7 голосов
/ 25 марта 2014

У меня была такая же проблема ... И в итоге нашёл следующий модуль:

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)

==> При этом мой файл был сохранен с сохранением всех формул, вставленных ранее.

Надеюсь, это поможет!

1 голос
/ 06 октября 2011

На данный момент xlrd не читает формулы.Дело не в том, что он оценивает их, он просто не читает их.

На данный момент, вам лучше всего программно контролировать работающий экземпляр Excel, либо через pywin32, либо Visual Basic, либо VBScript (или какой-либо другой Microsoft-дружественный язык, который имеет интерфейс COM).Если вы не можете запустить Excel, вы можете сделать что-то аналогичное OpenOffice.org.

1 голос
/ 22 августа 2012

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

Итак, откройте 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]))

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

1 голос
/ 05 октября 2011

Я использовал функцию xlwt.Formula прежде, чтобы иметь возможность получать гиперссылки в ячейку. Я думаю, что это будет работать и с другими формулами.

Обновление: Вот фрагмент, который я нашел в проекте, в котором я использовал его:

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