2016-06-10 2 views
1

Я создал несколько значений и заполнил их в таблицу, используя 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: воспроизвести мой код минимально, как это было предложено. И это работает очень хорошо !!!

+0

Похоже, что вы открываете и закрываете файл в 'fun1()', поэтому он не будет открыт для записи в 'fun2()' – jmcnamara

+0

@jmcnamara Не 'self' делает его более« глобальным »? Я имею в виду, как и другие переменные? Даже в противном случае, прежде чем писать в excel из 'fun2()', я пишу несколько значений из 'fun1()'. Итак, в таком случае, не должны ли это показывать эти значения? –

+0

Я в основном комментирую тот факт, что книга закрыта в 'fun1()', поэтому вызов 'write()' в 'fun2()' не будет иметь эффекта (если не будет вызван 'fun2()' от 'fun1()'. Однако трудно судить, не видя полной программы. В целом, я думаю, вы могли бы сэкономить и нас :-), некоторое время, добавив небольшую, но полную программу. – jmcnamara

ответ

2

Попытался воспроизвести, файл создается просто отлично, возможно, у вас есть проблема с переменной self.Output_fold или с разрешениями на файлы или с файловым проводником вашего редактора кода.

+0

Я уверен, что сам.Output_fold' отлично (я печатаю путь, чтобы проверить его). Другие два файла - разрешения файлов и редактор кода (я использую pyscripter), не похоже на проблему, потому что, когда я начинаю с нуля и пытаюсь воспроизвести с использованием минимального кода, он действительно работает отлично, как ты сказал. Не могу понять, что я делаю неправильно. –

Смежные вопросы