Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:使用xlrd从excel获取完整公式_Python_Python 2.7_Xlrd - Fatal编程技术网

python:使用xlrd从excel获取完整公式

python:使用xlrd从excel获取完整公式,python,python-2.7,xlrd,Python,Python 2.7,Xlrd,我正试图从Excel文件中获取完整的公式 我尝试了很多方法,但都为我带来了价值 我需要单元格中的完整公式,而不是值本身 我正在使用python和xlrd 有什么功能我可以使用吗? 还是有什么好办法 非常感谢所以我知道这是一篇非常古老的文章,但我找到了一种体面的方法,可以从工作簿中的所有工作表中获取公式,并让新创建的工作簿保留所有格式 第一步是将.xlsx文件的副本保存为.xls --在下面的代码中使用.xls作为文件名 使用Python2.7 from lxml import etree fro

我正试图从Excel文件中获取完整的公式 我尝试了很多方法,但都为我带来了价值

我需要单元格中的完整公式,而不是值本身

我正在使用python和xlrd

有什么功能我可以使用吗? 还是有什么好办法


非常感谢

所以我知道这是一篇非常古老的文章,但我找到了一种体面的方法,可以从工作簿中的所有工作表中获取公式,并让新创建的工作簿保留所有格式

第一步是将.xlsx文件的副本保存为.xls --在下面的代码中使用.xls作为文件名

使用Python2.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
示例结果:

{u'CY16': {'A1': '=Data!B5',
  'B1': '=Data!B1',
  'B10': '=IFERROR(Data!B12,"")',
  'B11': '=IFERROR(SUM(B9:B10),"")',

尝试使用
openpyxl
模块。它允许您通过将公式保留为公式而不是计算单元来加载excel文件。我已经用xlrd构建了我的所有工作,我更喜欢使用xlrd,而不是将我的所有工作更改为openpyxl。如果这是唯一的解决方案,那么我将移动到openpyxl,但是我更喜欢使用xlrdxlrd的东西,它有一个名为Name的类,应该这样做,但我不知道如何用工作簿实例化它。这正是我从昨天开始一直在努力做的事情,我没有成功,如果我能在这方面得到任何帮助,我会很高兴的。也非常感谢你的帮助
{u'CY16': {'A1': '=Data!B5',
  'B1': '=Data!B1',
  'B10': '=IFERROR(Data!B12,"")',
  'B11': '=IFERROR(SUM(B9:B10),"")',