2016-09-18 2 views
0

Ich versuche, die volle Formel von Excel zu erhalten Datei ich viele Möglichkeiten ausprobiert, aber alle für mich bekommen den WertPython: get full Formel aus Excel, mit xlrd

ich die volle Formel benötigen, die in ist die Zelle, nicht der Wert selbst

ich verwende python mit xlrd

gibt es eine Funktion, die ich verwenden kann? oder gibt es überhaupt zu?

Thanks a lot

+0

Versuchen Sie das 'openpyxl' Modul zu benutzen. Sie können die Excel-Datei laden, indem Sie Formeln als Formeln und nicht als berechnete Zellen speichern. – Abdou

+0

Ich habe bereits alle meine Arbeit mit xlrd, ich bevorzuge, wenn es irgendeine Möglichkeit mit xlrd als alle meine Arbeit zu openpyxl ändern, wenn dies die einzige Lösung ist dann werde ich auf openpyxl verschieben, aber wirklich etwas mit xlrd –

+0

xlrd haben eine Klasse namens Name, die das tun soll, aber ich bin mir nicht sicher, wie man sie mit einer Arbeitsmappe instanziiert. Probieren Sie es aus und schauen Sie sich das an. – Abdou

Antwort

1

So weiß ich, das ist eine sehr alte Post, aber ich fand die Formeln aus allen Blättern in einer Arbeitsmappe sowie mit dem neu erstellen Arbeitsmappe alle Formatierungen das Erhaltens behält eine anständige Art und Weise.

Erster Schritt ist eine Kopie Ihrer .xlsx-Datei als .xls speichern - Verwenden Sie die .xls als Dateiname in dem folgenden Code

Python Verwenden von 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 

Struktur Wörterbuch 'sheet_formulas'

{'Worksheet_Name': {'A1_cell_reference':'cell_formula'}} 

Beispielergebnisse:

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