angezeigt werden. Ich hatte einige Werte generiert und sie in eine Tabelle mit xlsxwriter
eingefügt. Dies ist, wie ich es tat:Die erstellte .xlsx-Datei konnte nicht im Verzeichnis
class main1():
.
.
.
.
def fun1():
workbook = xlsxwriter.Workbook(self.Output_fold+'Test'+time.strftime("%H_%M_%S_%d_%m_%Y")+'.xlsx')
worksheet_A = workbook.add_worksheet('Sheet_A')
.
.
worksheet_A.write(row,col,<val>)
.
.
workbook.close()
Jetzt, da ich mehrere Schreibvorgänge machen musste, und fügte hinzu, komplexere Logik, entschied ich mich eine andere Funktion fun2
eingeführt zu haben, die die Werte entsprechend schreiben würde. Die neue Logik erfordert die Generierung von Werten in fun1
sowie fun2
(durch Aufruf einer anderen Funktion fun3
). So entschied ich mich, Variablen workbook
usw. mit self.workbook
und ebenso zu ersetzen. Meine modifizierte Skript sieht wie folgt aus:
main_file.py
import xlsxwriter
import libex
import os
import time
import sys
import string
class main_cls():
def __init__(self):
self.i=0
self.t1=""
self.t2=""
pwd=os.getcwd().split('\\')
base='\\'.join(pwd[0:len(pwd)-1])+'\\'
print base
self.Output_fold=base+"Output\\"
self.Input_fold=base+"Input\\"
self.workbook=xlsxwriter.Workbook(self.Output_fold+'Test_'+time.strftime("%H_%M_%S_%d_%m_%Y")+'.xlsx')
self.worksheet_A = self.workbook.add_worksheet('Sheet_A')
self.worksheet_A.write(self.i,self.i,"Text 1")
self.worksheet_A.write(self.i,self.i+1,"Text 2")
self.i+=1
def fun1(self):
self.t1="1"
self.t2="2"
self.worksheet_A.write(self.i,self.i,self.t1)
self.worksheet_A.write(self.i,self.i+1,self.t2)
self.i+=1
self.eg=libex.exlib()
self.t1=self.eg.gen(0)
self.t2=self.eg.gen(0)
self.fun2()
self.workbook.close()
def fun2(self):
if option==1:
self.fun3()
def fun3(self):
self.t1=self.eg.gen(0)
self.t2=self.eg.gen(1)
self.worksheet_A.write(self.i,self.i,self.t1)
self.worksheet_A.write(self.i,self.i+1,self.t2)
self.i+=1
option=int(sys.argv[1])
if len(sys.argv)==2:
p=main_cls()
if option==1:
p.fun1()
else:
pass
else:
print "Wrong command"
libex.py
class exlib():
def __init__(self):
self.a="duh"
def gen(self,x):
if int(x)==0:
return(self.a)
elif int(x)==1:
self.a=str(self.a+" "+self.a+" "+self.a+" !!!")
return(self.a)
Nun, dies in diesem speziellen Fall funktioniert, aber in den eigentlichen Code, es nicht. Die Datei selbst wird nicht im Ausgabeverzeichnis erstellt. Dann fügte ich folgende Zeile hinzu:
print "Workbook created at path : ",self.workbook.filename
um zu sehen, ob die Datei erstellt wird und es überraschenderweise zeigte mit voller Pfad !!!
Wo könnte ich hier falsch liegen und wie kann ich das beheben?
UPDATE1: Ich spielte ein wenig herum mit ihm und fand, dass self
von self.workbook
Entfernung bewegt workbook
-__init__(self)
bevölkerten die Datei mit den Anfangswerten erstellt.
UPDATE2: Habe meinen Code wie vorgeschlagen minimal repliziert. Und das funktioniert ganz gut !!!
Es sieht so aus, als ob Sie die Datei in 'fun1()' öffnen und schließen, damit sie nicht in 'fun2() '' schreibt – jmcnamara
@jmcnamara Macht 'self' es nicht" globaler "? Ich meine genau wie andere Variablen? Bevor ich aus 'fun2()' in das Excel schreibe, schreibe ich noch ein paar Werte aus 'fun1()'. Also, sollte es in diesem Fall nicht zumindest diese Werte zeigen? –
Ich komme hauptsächlich zu der Tatsache, dass die Arbeitsmappe in 'fun1()' geschlossen ist, so dass der Aufruf von 'write()' in 'fun2()' keinen Effekt hat (außer 'fun2()' wird aufgerufen von 'fun1()'. Allerdings ist es schwer zu beurteilen, ohne das vollständige Programm zu sehen.Allgemein denke ich, Sie könnten sich selbst und uns retten :-), einige Zeit, indem Sie ein kleines, aber vollständiges Programm hinzufügen. – jmcnamara