我們有幾千個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是一個測試 - 我認爲它會正確保存循環的最終迭代,因爲它只用一個文件在腳本中工作。
取而代之的是,它創建了所有工作表都正確命名的文件,但沒有任何工作表中的數據。
任何想法我失蹤?爲了清楚起見,我正在尋找在循環結束時使用其原始文件名命名的每個文件以及一個有效的xlsx擴展名。
如果你確實有成千上萬的文件,我建議你看看openpyxl提供的'只寫'模式。 'to_excel'是Pandas的DataFrames的一種方法。 –