2016-05-11 15 views
2

複数のExcelファイルを読み込み、各ファイルのデータを1つのマスターファイルに追加しようとしています。各ファイルは同じヘッダーを持ちます(最初のファイルの後の最初の行のインポートはスキップできます)。OpenPyXLを使用して複数のExcelファイルをインポートする

私はPythonとOpenPyXLモジュールの両方にかなり新しいです。最初のワークブックを問題なくインポートできます。私の問題は、後続のファイルを開いて元のワークシートに貼り付けるためにデータをコピーする必要があるときに発生します。ここで

は、これまでの私のコードです:

# Creating blank workbook 
from openpyxl import Workbook 
wb = Workbook() 

# grab active worksheet 
ws = wb.active 

# Read in excel data 
from openpyxl import load_workbook 
wb = load_workbook('first_file.xlsx') #explicitly loading workbook, will automate later 

# grab active worksheet in current workbook 
ws = wb.active 

#get max columns and rows 
sheet = wb.get_sheet_by_name('Sheet1') 
print ("Rows: ", sheet.max_row) # for debugging purposes 
print ("Columns: ", sheet.max_column) # for debugging purposes 
last_data_point = ws.cell(row = sheet.max_row, column = sheet.max_column).coordinate 
print ("Last data point in current worksheet:", last_data_point) #for debugging purposes 

#import next file and add to master 
append_point = ws.cell(row = sheet.max_row + 1, column = 1).coordinate 
print ("Start new data at:", append_point) 
wb = load_workbook('second_file.xlsx') 
sheet2 = wb.get_sheet_by_name('Sheet1') 
start = ws.cell(coordinate='A2').coordinate 
print("New data start: ", start) 
end = ws.cell(row = sheet2.max_row, column = sheet2.max_column).coordinate 
print ("New data end: ", end) 

# write a value to selected cell 
#sheet[append_point] = 311 
#print (ws.cell(append_point).value) 

#save file 
wb.save('master_file.xlsx') 

ありがとう!

答えて

3

私はあなたのコードを理解していません。それはあまりにも複雑に見えます。ワークシート間でコピーする場合は、おそらくws.rowsを使用します。

wb1 = load_workbook('master.xlsx') 
ws2 = wb1.active 

for f in files: 
    wb2 = load_workbook(f) 
    ws2 = wb2['Sheet1'] 
    for row in ws2.rows[1:]: 
      ws1.append((cell.value for cell in row)) 
+0

これはうまくいきました。ファイルをファイル名の配列として定義し、ws1をws1に変更しました.Ws1を別の場所に定義していないためです。私は他の小さな編集をしなければならなかったが、全体的に私はあなたがしていたことを理解していた。日付は元のものとは異なる形式、つまり「日付」形式ではなく「カスタム」になりました。それを過度に複雑化することなくその問題を解決する簡単な方法はありますか? – Dennis

+0

私はあなたが何を意味するのかはわかりませんが、 "日付"のフォーマットはありません。すべての日付と時刻で多かれ少なかれカスタム書式が使用されます。しかしそれは別の問題です。 –

+0

はい、別の問題です。つまり、2015年9月1日の代わりに2015-09-01 0:00:00になるということです。本質的に、それは短い日付形式ではなくロング日付形式になります。しかし、これは大きな問題ではありません。 – Dennis

関連する問題