2017-06-21 3 views
1

Je travaille sur un programme pour diviser des fichiers Excel en sections de 1000. Je n'arrive pas à l'obtenir pour créer un second fichier Excel, car xlsxwriter ne crée pas la seconde fichier.XLSXWriter refuse de créer un deuxième fichier Excel

from os.path import join, dirname, abspath 
from xlrd.sheet import ctype_text 
import csv 
import os 
import sys 
import xlrd 
import xlsxwriter 
import xlwt 

file_paths = sys.argv[1:] 
draganddrop = ''.join(file_paths) 
beginGrab = 0 
counting = 0 
endGrab = 1000  
thousands = 0 

if draganddrop == "": 
    fileName = raw_input("\nInput the file with extension\n>")  
else: 
    fileName = draganddrop 

stopPoint = fileName.index('.') 
prepRev = fileName[stopPoint:] 
preName = fileName[:stopPoint] 

if prepRev == ".csv": 
    excelFile = xlsxwriter.Workbook(preName + '.xlsx') 
    worksheet = excelFile.add_worksheet() 
    with open(fileName,'rb') as f: 
     content = csv.reader(f) 
     for index_col, data_in_col in enumerate(content): 
      for index_row, data_in_cell in enumerate(data_in_col): 
       worksheet.write(index_col,index_row,data_in_cell) 
    excelFile.close() 
    fileName = (preName + '.xlsx') 
    delMe = 1 
    print("Temporary Convert to xlsx done.\n") 

stopPoint = fileName.index('.') 
prepRev = fileName[0:stopPoint] 
fname = join(dirname(abspath(__file__)), fileName) 
xl_workbook = xlrd.open_workbook(fname) 
sheet_names = xl_workbook.sheet_names() 
xl_sheet = xl_workbook.sheet_by_name(sheet_names[0]) 
book = xlwt.Workbook(encoding="utf-8") 
worksheet = book.add_sheet("Results", cell_overwrite_ok=True) 

workbook = xlrd.open_workbook(fileName) 
for sheet in workbook.sheets(): 
    for row in range(sheet.nrows): 
     row = int(row) 

if(int(row)>1000): 
    subDivide = int(row)/1000 
    while(thousands != subDivide + 1): 
     thousands = thousands + 1 
     counting = 0 
     totalName = preName + "_" + str(thousands) + ".xlsx" 
     print(totalName) 
     excelFile = xlsxwriter.Workbook(str(totalName)) 
     worksheet = excelFile.add_worksheet() 
     with open(totalName,'rb') as f: 
      col = xl_sheet.col_slice(0,1,10101010) 
      for idx, cell_obj in enumerate(col, start=beginGrab): 
       counting = counting + 1 
       if(counting == 1000): 
        break     
       cell_type_str = ctype_text.get(cell_obj.ctype, 'unknown type') 
       cell_obj_str = str(cell_obj) 
       telePhone = (cell_obj_str[7:19]) 
       worksheet.write(idx+1, 0, "1" + telePhone)   
     worksheet.write(0,0, "Telephone Number") 
     beginGrab = thousands * 1000 
     endGrab = beginGrab + 1000 
     excelFile.close() 
     excelFile = None 

else: 
    print("Mate, this is Tiny!") 
print ("Ding! Job Done!") 

J'ai été capricieuse en caoutchouc cela et je ne peux pas trouver où je suis en faute.

EDIT:

RÉSOLU !!

En créant une feuille puis en la fermant, le programme peut alors la saisir. Je vais probablement faire un problème de git à ce sujet. En le fermant, on peut le voir alors qu'il contient toujours la même information.

excelFile = xlsxwriter.Workbook(totalName) 
    worksheet = excelFile.add_worksheet() 
    with open(fileName,'rb') as f: 
+0

pouvez-vous signaler un retraçage de l'erreur que vous obtenez? (J'ai répondu, mais je ne suis pas sûr que c'est le seul problème que vous avez) –

+0

'Fichier" /home/nmenard/Documents/Haircuttery/FileSplit.py ", ligne 62, en ' 'avec open (totalName, 'rb') comme f: ' ' IOError: [Errno 2] Aucun fichier ou répertoire: 'OyVey_2.xlsx'' Est-ce vrai? – GarnetSunset

+0

@GarnetSunset que faire si vous utilisez le chemin d'accès complet, comme '/ mon/fichier/OyVey_2.xlsx'. Etes-vous sûr que ce fichier existe et existe (avec l'extension _2?) – David542

Répondre

1

cette ligne est probablement la raison pour laquelle vous ne pouvez pas relire votre dossier et votre script se bloque:

fname = join(dirname(abspath('__file__')), '%s' % fileName) 

'__file__' ne devrait pas avoir des guillemets. Je ferais:

fname = join(dirname(abspath(__file__)), fileName) 
+0

Très belle addition, merci, mais, pour une raison quelconque, cela n'a toujours pas fonctionné. – GarnetSunset

2

Est-ce pas la ligne save/close besoin d'être dans la boucle while? Dans le cas contraire, il semblerait que cela ne sauvera que le premier/dernier élément:

while(thousands != subDivide + 1): 
    # write file 
    excelFile.close() 
+0

Je l'ai déplacé, et je vois toujours la même erreur. Permettez-moi de modifier mon code dans le principal pour ajouter votre solution. – GarnetSunset