openpyxlで1セルに対してのコピペ方法は紹介しましたが、今回は行も列も複数ある表の値を丸ごとコピペする方法を紹介します。またファイルをただコピーするだけでなく、事前にフォーマットデータを用意してそこへコピーした値を貼付けるといった状況を想定したコードを紹介します。
1.アウトプット
Excelファイルをそのままコピーするだけであれば、いくらファイル数が多いといっても、フォルダ内のファイルを一括選択→まとめてコピーをするなど、わざわざプログラミングにする魅力を感じにくいと思うので、自分がプログラミング使用した際に感じたメリットを書きます。
- 自分で用意した表題などを書き加えたフォーマットに必要なデータを書き込める
- 保護してあるデータをパスワード入力無しでコピーできる
今回はコピー元の表データを、表題を入れたフォーマットデータにコピペしていきます。これは過去に自分が作成した、「他部署の共有フォルダにあるデータを崩さないように自分のフォルダにコピーする」といった作業の簡易版になります。
2.コードの紹介
アウトプットとしては次のように「サンプル.xlsx」の内容を「フォーマット.xlsx」の書式に書き込んだ「完成.xlsx」が出来ます。

コードは次のようになります。
import openpyxl
from openpyxl import load_workbook
#サンプルファイルのサンプルシートをロード
wb1 = openpyxl.load_workbook('C:/Users/1/Desktop/python/openpyxl/サンプル.xlsx')
ws1 = wb1['サンプル']
#フォーマットファイルのフォーマットシートをロード
wb2 = openpyxl.load_workbook('C:/Users/1/Desktop/python/openpyxl/フォーマット.xlsx')
ws2 = wb2['フォーマット']
#iに行、jに列の範囲を指定
for i in range(1,7):
for j in range(1,7):
copy = ws1.cell(row = i, column = j).value
ws2.cell(row = i+2, column = j, value = copy)
j += 1
i += 1
#フォーマットに書き込んだデータを完成.xlsxと名前を付けて保存
wb2.save('C:/Users/1/Desktop/python/openpyxl/完成.xlsx')
表の読み込み・書き込みはfor文を使い、1行目の情報を「for j in range(1,7):」で1列ごとに処理して、
その処理を「for i in range(1,7):」で指定した行数分繰り返しています。
また今回フォーマットデータには表題が入っていて2行ずらしたいので、取得したvalueを書き込む際に「i+2」としています。
3.終わりに
Excelの表データを別Excelに書き写すコードを紹介しました。
今後このコードを使って、「複数ファイルのデータをつなげて1つの表にする」、「条件に当てはまった行だけを抽出して表にする」など更に条件を加えたものを紹介しようと思います。

コメントを残す