エクセルのコピペ シートまるまるコピー
エクセルを開いて、全選択してコピーして、別のエクセルを開いて、貼り付ける。
という作業を自動化したイメージ。
import openpyxl
# コピーしたいファイル
inwb = openpyxl.load_workbook(r"C:\Users\oono\Desktop\抽出データ.xlsx")
# ペーストしたいファイル
outwb = openpyxl.load_workbook(r"C:\Users\oono\Desktop\任意データ.xlsx")
# シートを選択(activeは現在開いているシート)
inws = inwb.active
outws = outwb.active
# シート名が決まっている場合は以下のようにシート名を指定する。
# outws = outwb["シート名"]
# 最終行を取得。(一番下が何行まであるか)rowは行。1行目、2行目、3行目・・・
rows = inws.max_row
# 最終列を取得。(一番横が何列まであるか)columnは列。A列、B列、C列・・・
columns = inws.max_column
# 一列(横)をコピーして新しいところへ貼り付けるための関数
def input_excel(row_num):
# コピーしたデータを入れるための空のリスト
in_list=[]
# どこからどこまでの列をコピーしたいのか設定する。
start_col="A"
goal_col ="CH"
# A1:CH1 で数字の部分がrow_numで関数の引数に設定しているため最終行まで変更されていく。
ranges = start_col + str(row_num) + ":" + goal_col + str(row_num)
# in_listにコピーしたい行を追加していく。
for i in inws[ranges]:
for a in i:
in_list.append(a.value)
# in_listに追加されたデータをコピペしたいシートへ貼り付ける。
outws.append(in_list)
# コピペしたら保存する。
outwb.save(r"C:\Users\oono\Desktop\任意データ.xlsx")
# コピー元のデータが入っている最終行までforで繰り返して、row_numへ数字を渡す。
for i in range(rows):
i+=1
print(i)
input_excel(i)
# ペースト元の一番上の行が空白になるので削除する。
outws.delete_rows(1)
# 保存する。
outwb.save(r"C:\Users\oono\Desktop\任意データ.xlsx")
# 閉じる
inwb.close()
outwb.close()
コピペ元のエクセル、横が86列で、行が500行でやってみたら、完了するばで1~2分かかった。
活用イメージ
会社で数字報告などがある場合、CRMからCSVやエクセルデータを抽出して、あらかじめ数式がはいっているエクセルに貼り付けたら、集計されて、報告書が出来上がる。
みたいな時、seleniumでログインして、データをダウンロードして、それをコピペして貼り付けて、報告書が出来上がる!みたいなイメージ。
1.seleniumでCRMからデータをダウンロードしてくる
2.ファイル操作でファイルを移動させる
3.ファイルを開いて任意の報告書のテンプレートへ貼り付ける←これの記事
4.社内コミュニケーションツールへ提出(API)を使う
5.1~4の流れを毎週金曜日の18:00とかで設定しておいて、自動で実行させると楽。