Так что я знаю, что это очень старый пост, но я нашел достойный способ получения формул из всех листов в книге, а также с вновь созданной рабочей книга сохраняет все форматирование.
Первый шаг, чтобы сохранить копию файла .xlsx в .xls - Используйте .xls в качестве имени файла в коде ниже
Использование Python 2.7
from lxml import etree
from StringIO import StringIO
import xlsxwriter
import subprocess
from xlrd import open_workbook
from xlutils.copy import copy
from xlsxwriter.utility import xl_cell_to_rowcol
import os
file_name = '<YOUR-FILE-HERE>'
dir_path = os.path.dirname(os.path.realpath(file_name))
subprocess.call(["unzip",str(file_name+"x"),"-d","file_xml"])
xml_sheet_names = dict()
with open_workbook(file_name,formatting_info=True) as rb:
wb = copy(rb)
workbook_names_list = rb.sheet_names()
for i,name in enumerate(workbook_names_list):
xml_sheet_names[name] = "sheet"+str(i+1)
sheet_formulas = dict()
for i, k in enumerate(workbook_names_list):
xmlFile = os.path.join(dir_path,"file_xml/xl/worksheets/{}.xml".format(xml_sheet_names[k]))
with open(xmlFile) as f:
xml = f.read()
tree = etree.parse(StringIO(xml))
context = etree.iterparse(StringIO(xml))
sheet_formulas[k] = dict()
for _, elem in context:
if elem.tag.split("}")[1]=='f':
cell_key = elem.getparent().get(key="r")
cell_formula = elem.text
sheet_formulas[k][cell_key] = str("="+cell_formula)
sheet_formulas
структура словаря
{'Worksheet_Name': {'A1_cell_reference':'cell_formula'}}
Пример результатов '' sheet_formulas:
{u'CY16': {'A1': '=Data!B5',
'B1': '=Data!B1',
'B10': '=IFERROR(Data!B12,"")',
'B11': '=IFERROR(SUM(B9:B10),"")',
Попробуйте использовать модуль 'openpyxl'. Он позволяет загружать файл excel, сохраняя формулы в виде формул, а не вычисляемых ячеек. – Abdou
Я уже построил всю свою работу с xlrd, я предпочитаю, если есть какой-либо способ с xlrd, чем изменить всю мою работу на openpyxl , если это единственное решение, то я перейду к openpyxl, но действительно предпочитаю что-то с xlrd –
xlrd has класс под названием Name, который должен это сделать, но я не уверен, как создать экземпляр с помощью книги. Попробуйте и посмотрите на это. – Abdou