2016-10-25 3 views
-2

Der Code zieht und setzt dann die Excel-Formeln und nicht die berechneten Daten der Formel.Excel-Formeln beim Exportieren von Daten mit Python vorberechnen?

xxtab.write(8, 3, "=H9+I9") 

Wenn dies in und in dieser separaten Datei gespeichert gelesen wird, wird es als „= H9 + I9“ und nicht der tatsächliche Wert dessen, was H9 + gespeichert I9 ist. Dann, wenn wir es zurück importieren, berechnet es immer noch nicht, was H9 + I9 tatsächlich ist, sondern stattdessen fügt es einfach "= H9 + I9" in Excel ein.

Das beabsichtigte Ziel besteht darin, die Mathematik entweder während des Exports auszuführen, nachdem es exportiert wurde, aber bevor es in eine andere Datei importiert wird, oder während des Imports.

Der Code sollte nicht einfach eine andere mathematische Funktion/Formel in das nächste Excel-Blatt einfügen. Es sollte eine Antwort auf alles geben, was gelesen wurde.

import xlsxwriter, string, csv, time, datetime, subprocess, os 
import urllib, urllib2, requests, openpyxl, sys 
import gspread 

# grab files 
workbook = '/path/to/the/WorkBook.xlsx' 

# Setup the spreadsheet 
print "Creating workbook" 
book = xlsxwriter.Workbook(workbook, {'strings_to_numbers': True}) 

# set matrix 
row = 0 # row number 
col = 0 # Column letter A=0 B=1 C=2 D=3...Z=26 ect. 
# var.write(row, col, value, format) 

# Make the sheet 
xxtab = book.add_worksheet('DB Tables') 

#Example of some .write commands which write to xxtab. The variables are taken directly from excel and are being read in by xlsl reader. This is stored in another file and is read in by the for loop. 
xxtab.write(8, 1, "T_ACCESSRULES") 
xxtab.write(8, 3, "=H9+I9") 
xxtab.write(8, 7, "=data_dbmetrics!B56") 

# The for loop, reads in a .txt file and does multiple .write commands 
with open('/path/to/my/file/interns_xxtables.txt', 'rb') as f: 
    reader = csv.reader(f, delimiter='\t') 
    for c, col in enumerate(reader): 
     if(len(col) > 3): 
      if (str(col[3]) == "bold"): 
       xxtab.write(int(col[0]), int(col[1]), col[2], bold) 
      elif (col[3] == "metric"): 
       xxtab.write(int(col[0]), int(col[1]), col[2], metric) 
      elif (col[3] == "title"): 
       xxtab.write(int(col[0]), int(col[1]), col[2], title) 
     else: 
      xxtab.write(int(col[0]), int(col[1]), col[2]) 
f.close() 

Sorry, ich bin neu in Stack Overflow. Ich weiß nicht, wie ich diese Frage sonst noch beschreiben soll. Ich weiß nicht, wie ich bekommen soll, was ich will, ich weiß nur, was ich will, wird mit dem, was ich geschrieben habe, nicht erreicht.

+1

Das macht nicht viel Sinn, und Sie haben nicht viel (irgendwelchen?) Tatsächlichen Code zur Verfügung gestellt. Bitte überlege, [Fragestellung] (http://stackoverflow.com/questions/ask) nachzulesen und stelle [MCVE] (http://stackoverflow.com/help/mcve) bereit. –

+0

Wenn ich Daten aus Excel lese, bekomme ich den "Zellenwert", der in die Zelle eingegeben wurde, was zufällig die Formeln sind. Was ich lesen muss, ist, was die Formel berechnet. Wenn die Formel also zwei Zahlen, zwei Zellen, einen Bereich oder was auch immer hinzufügt, brauche ich, was die angezeigte Antwort ist, nicht die Formel. Ich hoffe, das macht alles klar. –

+1

Wieder wäre es hilfreich, wenn Sie Ihren * tatsächlichen Code * oder eine vernünftige Annäherung davon gezeigt hätten. Wie liest du die Werte ein? Antworte mir hier nicht in den Kommentaren, geh zurück und bearbeite (http://stackoverflow.com/posts/40248564/edit) deine Frage, um diese (nützlichen) Details aufzunehmen. –

Antwort

1

Das beabsichtigte Ziel besteht darin, die Mathematik entweder während des Exports auszuführen, nachdem es exportiert wurde, aber bevor es in eine andere Datei importiert wird, oder während des Imports.

XlsxWriter, das gezeigte Modul, das die Excel-Datei schreibt, wertet das Ergebnis der Formeln, die es schreibt, nicht aus. Wenn Sie das Ergebnis in Ihrem Code berechnen können Sie es hinzufügen, wenn die Formel schreiben:

xxtab.write(8, 3, "=H9+I9", 42) 

Dies wird ausführlicher im Working with Formulas Abschnitt der XlsxWriter Dokumentation erläutert.

Kein Python Excel-Dateischreibmodul bewertet Formeln. Die einzigen Module, die das tun könnten, sind diejenigen, die Excel wie XlWings automatisieren.

+0

"Wenn Sie das Ergebnis in Ihrem Code berechnen, können Sie es beim Schreiben der Formel hinzufügen". Das würde bedeuten, dass ich alle Formeln einzeln berechnen müsste. Dies bedeutet jedoch auch, dass, wenn eine dieser Zellen den Wert ändert oder sich die Formel ändert, ich die Daten manuell durchlaufen und neu berechnen muss. Ich habe versucht, dies um jeden Preis zu vermeiden, also sollte ich dann in XlWings schauen? –

+0

Das ist mehr oder weniger, warum keines der Module, die Excel-Dateien von Grund auf neu schreiben, versucht, Formelergebnisse zu berechnen: alles, was über eine einfache Berechnung hinausgeht, wird eine Tabellenkalkulationsmaschine erfordern. Wenn Sie also nach dem Ergebnis einer Formel suchen, genau wie Excel es berechnet, müssen Sie ein Modul verwenden, das Excel automatisiert, wie Xlwings, unter Windows und MacOS. (Unter Linux gibt es einige Module, die auch OpenOffice/Libreoffice automatisieren können.) – jmcnamara

Verwandte Themen