コード一覧

【Python】エクセルシートをコピーして別のシートに貼り付ける方法

エクセルのコピペ シートまるまるコピー

エクセルを開いて、全選択してコピーして、別のエクセルを開いて、貼り付ける。
という作業を自動化したイメージ。

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とかで設定しておいて、自動で実行させると楽。