0

xlwt.Workbook()でワークシートの列数の値を返す方法が見つからないようです。アイデアは、ディレクトリ内の.xlsファイルの札束を取り、それらを1つに結合することです。私が抱えている問題の1つは、次のファイルを書き込むときに列の位置を変更することです。これは私がこれまで取り組んできたものです:

import xlwt, xlrd, os

def cbc(rd_sheet, wt_sheet, rlo=0, rhi=None,
rshift=0, clo=0, chi=None, cshift = 0):
    if rhi is None: rhi = rd_sheet.nrows
    if chi is None: chi = 2#only first two cols needed
    for row_index in xrange(rlo, rhi):
        for col_index in xrange(clo, chi):
            cell = rd_sheet.cell(row_index, col_index)
            wt_sheet.write(row_index + rshift, col_index + cshift, cell.value)

Dir = '/home/gerg/Desktop/ex_files'
ext = '.xls'
list_xls = [file for file in os.listdir(Dir) if file.endswith(ext)]
files = [Dir + '/%s' % n for n in list_xls]
output = '/home/gerg/Desktop/ex_files/copy_test.xls'
wbook = xlwt.Workbook()
wsheet = wbook.add_sheet('Summary', cell_overwrite_ok=True)#overwrite just for the repeated testing

for XLS in files:
    rbook = xlrd.open_workbook(XLS)
    rsheet = rbook.sheet_by_index(0)
    cbc(rsheet, wsheet, cshift = 0)

wbook.save(output)

list_xlsは以下を返します:

['file2.xls', 'file3.xls', 'file1.xls', 'copy_test.xls']

ファイルは以下を返します:

['/home/gerg/Desktop/ex_files/file2.xls', '/home/gerg/Desktop/ex_files/file3.xls', '/home/gerg/Desktop/ex_files/file1.xls', '/home/gerg/Desktop/ex_files/copy_test.xls']

私の質問は、xlwt.workbookに書き込まれた各ファイルを毎回2ずつスクートする方法です。このコードは、に保存された最初のファイルを提供し.../copy_test.xlsます。ファイル一覧にも問題はありませんか?あるかもしれない気がします。これはPython2.6で、WindowsとLinuxの間を行き来しています。

GMさん、ご協力ありがとうございます

4

1 に答える 1

1

各入力スプレッドシートの最初の2列のみを使用しています。「xlwt.Workbook()のワークシートの列数」は必要ありません。コードにはすでにcshiftメカニズムがありますが、使用していません。次のように、外側のブロックのループを変更するだけです。

for file_index, file_name in enumerate(files):
    rbook = xlrd.open_workbook(file_name)
    rsheet = rbook.sheet_by_index(0)
    cbc(rsheet, wsheet, chi = 2, cshift = file_index * 2)

一般的に、上記のコードで行ったよう
if chi is None: chi = 2
に、関数の行をに変更し、引数として
if chi is None: chi = rsheet.ncols
渡します。chi=2

上書きチェックをオーバーライドする理由がわかりません...確かにアプリケーションでは、既存のセル値を上書きするのは正しくありませんか?

あなたは「このコードは私に.../copy_test.xlsに保存された最初のファイルを与える」と言います。入力順の最初はfile2.xlsです。あなたが示したコードは前の入力を上書きしていて、最初のファイルではなく、最後のファイル(入力順)を提供します...おそらくあなたは間違っています。注:最後の入力ファイル'copy_test.xls'は、前のOUTPUTファイルである可能性が非常に高いです。おそらく、出力ファイルは別のフォルダーに配置する必要があります。

于 2012-05-20T23:20:43.800 に答える