2017-02-17 5 views
0

複数のカンマ区切りのCSVファイルを使用して、ファイル名がスプレッドシート内の別のタブになるXLSスプレッドシートを生成しています。私が持っているコードでは、スプレッドシートを開くときを除いて、次のような警告が表示されます。「他のドキュメントを閉じてもう一度やり直すと、このファイルでテキストの書式が変更されることがあります。 " 65536の行制限を超えてセルの書式を変更しようとしたときに問題が発生していることがわかりましたが、行の変更を制限する方法がわかりません。私は4つの列に数百行を超える必要はありません。XLSスプレッドシートの生成時に最大フォント数を超えない方法

import csv, glob, xlwt, sys, os 
csvFiles = os.path.join(LogFileFolder, "*") 
wb = xlwt.Workbook() 
colNames = ['iNFADS_FAC','CAT','Crosswalk_FAC','FAC'] 
for filename in glob.glob(csvFiles): 
    (f_path, f_name) = os.path.split(filename) 
    (f_short_name, f_extension) = os.path.splitext(f_name) 
    ws = wb.add_sheet(f_short_name) 
    with open(filename, 'rb') as csvf: 
     csvReader = csv.reader(csvf) 
     for rowx, row in enumerate(csvReader): 
      for colx, value in enumerate(row): 
       if value in colNames: 
        ws.write(rowx, colx, value, xlwt.easyxf(
         "border: top medium, right medium, bottom double, left medium; 
         font: bold on; pattern: pattern solid, fore_color pale_blue; 
         align: vert centre, horiz centre")) 
       elif value not in colNames: 
        ws.write(rowx, colx, float(value), 
         xlwt.easyxf("align: vert centre, horiz centre")) 
##This second "xlwt.easyxf(align...)" part is the offending section of the code, if 
##I remove just that part then the problem goes away. Is there a way to keep 
##it within the 65536 limit here? 
       else: 
        pass 
wb.set_active_sheet = 1  
outXLS = os.path.join(LogFileFolder, "FAC-CAT Code Changes.xls") 
wb.save(outXLS) 

答えて

0

GoogleグループのJohn Machinに感謝したいと思います。私の質問に答えるために「python-excel」に感謝します。どうやら、解決策はスクリプトの中でeasyxf部分を変数の前に移動し、必要なときはいつでも呼び出すことです。したがって、スクリプトには次のように記述する必要があります。

csvFiles = os.path.join(LogFileFolder, "*") 
wb = xlwt.Workbook() 
headerStyle = xlwt.easyxf("border: top medium, right medium, bottom double," \ 
    "left medium; font: bold on; pattern: pattern solid, fore_color pale_blue;" \ 
    "align: vert centre, horiz centre") 
valueStyle = xlwt.easyxf("align: vert centre, horiz centre") 
colNames = ['iNFADS_FAC','CAT','Crosswalk_FAC','FAC'] 
for filename in glob.glob(csvFiles): 
    (f_path, f_name) = os.path.split(filename) 
    (f_short_name, f_extension) = os.path.splitext(f_name) 
    ws = wb.add_sheet(f_short_name) 
    with open(filename, 'rb') as csvf: 
     csvReader = csv.reader(csvf) 
     for rowx, row in enumerate(csvReader): 
      for colx, value in enumerate(row): 
       if value in colNames: 
        ws.col(colx).width = 256 * 15 
        ws.write(rowx, colx, value, headerStyle) 
       elif value not in colNames: 
        ws.write(rowx, colx, float(value), valueStyle) 
       else: 
        pass 
wb.set_active_sheet = 1  
outXLS = os.path.join(LogFileFolder, "FAC-CAT Code Changes.xls") 
wb.save(outXLS) 
関連する問題