私たちは数千のxlsファイルを持ち、各ファイルには何十枚ものシートがあります。ファイルとシートを結合するためのより大きなプロジェクトに取り組んでいますが、まずそれらをxlsxに変換する必要があります。複数のxlsファイルをxlsxに変換する - 単一ファイルからの拡大を伴う問題
次のコードは、単一のファイルに正常に動作します:
import xlrd
from openpyxl.workbook import Workbook as openpyxlWorkbook
xlsBook = xlrd.open_workbook(C://path)
workbook = openpyxlWorkbook()
for i in xrange(0, xlsBook.nsheets):
xlsSheet = xlsBook.sheet_by_index(i)
sheet = workbook.active if i == 0 else workbook.create_sheet()
sheet.title = xlsSheet.name
for row in xrange(0, xlsSheet.nrows):
for col in xrange(0, xlsSheet.ncols):
sheet.cell(row=row+1, column=col+1).value = xlsSheet.cell_value(row, col)
workbook.save(c://path/workbook.xlsx")
これは完璧に動作します。
我々が使用するすべてのファイル、をループしようとしたとき:メソッド保存コメントアウト最初の二つの場合
import xlrd
from openpyxl.workbook import Workbook as openpyxlWorkbook
import glob
import pandas as pd
from pandas import ExcelWriter
import os
path ="C://path"
path2 = "C://path2"
allFiles = glob.glob(path + "/*.xls")
for file_ in allFiles:
xlsBook = xlrd.open_workbook(file_)
workbook = openpyxlWorkbook()
for i in xrange(0, xlsBook.nsheets):
xlsSheet = xlsBook.sheet_by_index(i)
sheet = workbook.active if i == 0 else workbook.create_sheet()
sheet.title = xlsSheet.name
for row in xrange(0, xlsSheet.nrows):
for col in xrange(0, xlsSheet.ncols):
sheet.cell(row=row+1, column=col+1).value = xlsSheet.cell_value(row, col)
##workbook.save(os.path.join(path2,file_))
##workbook.to_excel(os.path.join(path2,file_))
workbook.save("C://path/workbook.xlsx")
、workbook.saveは絶対に何もしないようだ、とto_excelは、ブックプロパティを持っていない私に指示to_excelと呼ばれています...私はループの中でパンダを呼んでいないので、それはありますか?
最後のworkbook.saveはテストでした。ループの最終的な反復を正しく保存すると仮定しました。これは、1つのファイルだけでスクリプトで機能したためです。
代わりに、すべてのワークシートの名前は正しく指定されていますが、どのワークシートにもデータは含まれていないファイルが作成されます。
何が不足していると思いますか?明確にするために、私はループの終わりに元のファイル名と有効なxlsx拡張子を付けた名前のファイルを用意したいと考えています。
本当に何千ものファイルがあるなら、openpyxlが提供する 'write-only'モードを見ることをお勧めします。 'to_excel'はPandasのDataFramesのメソッドです。 –