Можно ли вставить значение формулы Excel, а не формулу - PullRequest
3 голосов
/ 04 марта 2020

Я пытаюсь вставить значение, используя формулу Excel, что происходит успешно, но я хочу сохранить значение, а не формулу, вот фрагмент кода, который я пытаюсь сделать до сих пор.

print("Adding formula to " + filename)         


for i,cellObj in enumerate(sheet_formula['P'],1):
        cellObj.value='=IF(AND(OR(A{0}="g_m",A{0}="s_m"),ISNUMBER(SEARCH("A", E{0}))), "A", VLOOKUP(A{0},\'i ma\'!A:B, 2, FALSE))'.format(i)
        sheet_formula.cell(row=1, column=16).value = 'C'

этот фрагмент может вставить формулу, но я хочу сохранить значение, а не формулу

1 Ответ

2 голосов
/ 04 марта 2020

"Основными c причинами отказа от openpyxl являются: (1) обработка файла XLS не поддерживается; (2) ошибка тестирования сохранения стиля текущей версии не устранена; если вы столкнулись с над двумя проблемами, брось openpyxl и обними xlwings. Выхода нет. " Схватил с здесь .


"Возможно использовать xlwings, который использует объекты pywin32 для взаимодействия с Excel, а не только чтение / запись документов xlsx или csv, таких как openpyxl и pandas. Таким образом, Excel фактически выполняет формулу, и xlwings захватывает результат. " Собрано с здесь .


Так что пока не возможно (так кажется ) используя просто Openpyxl или любую другую библиотеку, которая не поддерживает обработку файлов xls, в качестве библиотеки Python можно использовать xlwings. Я добавил простой пример ниже. Я просто открыл книгу fre sh, добавил формулу и преобразовал формулу в вычисленное значение.

import xlwings as xw
app = xw.App(visible=False, add_book=False)
wb = app.books.add()
ws = wb.sheets.active
ws['A1'].value = '=3+5'
ws['A1'].value = ws['A1'].value
wb.save(r'C:\Users\...\test.xlsx')
wb.close()
app.quit()
exit()

Надеюсь, что это поможет. Пожалуйста помни; Я Python новичок!


Для тех, кто заинтересован, можно найти хорошее объяснение разницы между Openpyxl и xlWings здесь . И несколько схожую проблему с некоторыми ответами можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...