Я создал несколько значений и заполнил их в таблицу, используя xlsxwriter
. Это, как я это сделал:Невозможно увидеть созданный файл .xlsx в каталоге
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()
Теперь, так как я должен был сделать несколько записей, и добавил более сложную логику, я решил еще одна функция, введенная fun2
, который будет записывать значения соответственно. Новая логика требует генерирования значений в fun1
, а также fun2
(путем вызова другой функции fun3
). Итак, я решил заменить переменные workbook
и т.д. с self.workbook
и аналогичным образом. Мой измененный сценарий выглядит следующим образом:
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)
Теперь, это работает в данном конкретном случае, но в самом коде, это не делает. Сам файл не создается в выходном каталоге. Затем я добавил следующую строку:
print "Workbook created at path : ",self.workbook.filename
чтобы посмотреть, будет ли файл создан, и это удивительно показало полный путь !!!
Где я могу ошибиться, и как я могу исправить это?
Update1: Я играл немного с ним и обнаружил, что удаление self
от self.workbook
перемещения workbook
в __init__(self)
создает файл с исходными значениями заселенных.
UPDATE2: воспроизвести мой код минимально, как это было предложено. И это работает очень хорошо !!!
Похоже, что вы открываете и закрываете файл в 'fun1()', поэтому он не будет открыт для записи в 'fun2()' – jmcnamara
@jmcnamara Не 'self' делает его более« глобальным »? Я имею в виду, как и другие переменные? Даже в противном случае, прежде чем писать в excel из 'fun2()', я пишу несколько значений из 'fun1()'. Итак, в таком случае, не должны ли это показывать эти значения? –
Я в основном комментирую тот факт, что книга закрыта в 'fun1()', поэтому вызов 'write()' в 'fun2()' не будет иметь эффекта (если не будет вызван 'fun2()' от 'fun1()'. Однако трудно судить, не видя полной программы. В целом, я думаю, вы могли бы сэкономить и нас :-), некоторое время, добавив небольшую, но полную программу. – jmcnamara