事務作業で退屈している皆さん!
同じことの繰り返し、この退屈な作業嫌だなーと思ったことはありませんか?
それ、Pythonにやらせてみません?
ルーチンワーク化しているExcel作業自動化してみたいという方向けに書いています。
目次
Excelのなにを自動化できるのか?
事務系OL
こうせ
事務系OL
こうせ
Pythonからコピペ作業などするためのExcel操作を自動化していきましょう。
自動化するためには「openpyxl」というライブラリを使用します。
この「openpyxl」の使い方を本記事では解説していきます。
Pythonとは? 環境構築をしよう
Windows版の環境構築は以下の記事を参考にしてみてください
Python環境構築-VScode-win10Colaboratoryを使ってめんどくさい環境構築をしない方法もあります。
しかし、デメリットもあります。
それはChromeでやるため1回1回ファイルをアップロードしないといけないことです。
Colaboratoryで行いたいならスプレッドシートを使うという
以下の記事を参考にしてみてください
環境構築がいらない!?Colaboratoryを使ってPython動かしてみた 【Python】仕事を効率よくしませんか? Colaboratoryで「スプレッドシート操作」を自動化Excelを操作しよう
Pythonの環境構築ができたら早速Excelを動かしていきましょう。
っとその前に「openpyxl」をインストールしよう!
openpyxlのインストール
「pip」というものを使ってインストールします。
コマンドラインツール(Windowsはコマンドプロンプト、Macはターミナル)を開いて、下記コマンドを実行するとインストールできます。
pip install openpyxl
インストールできたら「openpyxl」というライブラリが使えるようになりました。
では「main.py」というファイルを作成しコードを記述していきましょう。
まず冒頭に以下の文を書きましょう。
import openpyxl
# 以下でExcel操作を自動化する処理を書いていく
この文を書くことでライブラリを読み込めます。
忘れないようにしてください。
Excelファイルを読み込む
今回使うExcelは「main」という名前で保存してます。
「load_workbook」というメソッドの引数にExcelファイルのパスを指定するとそのファイルを操作できるようになります。
パスとは、そのファイルの場所を示すものです。
(以下では「auto_excel」というフォルダの中の「main.xlsx」を指定しています。)
「sheetnames」というプロパティを使うとワークシート名がリスト形式で取得できます。
wb = openpyxl.load_workbook('auto_excel\main.xlsx')
print(wb.sheetnames)
#実行結果
['Sheet1', 'Sheet2', 'Sheet3']
これから操作の仕方を紹介していきますね
ワークシートの操作
ワークシートの名前変更
wb = openpyxl.load_workbook('auto_excel\main.xlsx')
#シートを指定
ws = wb['Sheet1']
#シートの名前を変更
ws.title = 'newSheet'
シート名を変更は「Worksheet」オブジェクトの「title」プロパティでできます。
ワークシートを追加する
wb = openpyxl.load_workbook('auto_excel\main.xlsx')
#シートの追加(シートの名前,挿入する位置)
ws1 = wb.create_sheet('NewSheet', 0)
シートの追加は「Workbook」オブジェクトの「create_sheet」メソッドで追加できます。
一つ目の引数にシート名、二つ目の引数に挿入する位置を指定できます。
引数の指定はどちらも任意なので指定しなくても大丈夫です。
ワークシートのコピー
wb = openpyxl.load_workbook('auto_excel\main.xlsx')
#シートのコピー
ws2 = wb['Sheet1']
ws3 = wb.copy_worksheet(ws2)
シートのコピーは「Workbook」オブジェクトの「copy_worksheet」メソッドでコピーできます。
コピーしたい「Worksheet」オブジェクトを引数に指定するだけです。
ワークシートの削除
wb = openpyxl.load_workbook('auto_excel\main.xlsx')
#シートの削除
ws4 = wb['Sheet3']
wb.remove(ws4)
シート削除は「Workbook」オブジェクトの「remove」メソッドでできます。
削除したい「Worksheet」オブジェクトを引数に指定するだけです。
セルの操作
1つのセルの操作
wb = openpyxl.load_workbook('auto_excel\main.xlsx')
#指定方法1
ws = wb['Sheet1']
cell1 = ws['A1']
cell1.value = '123'
#指定方法2
cell2 = ws.cell(row=1, column=1, value='123')
セルの指定方法は2つあります。
上記は両方とも「Sheet1」の「A1」というセルに「123」という値を入れています。
2の方法は「while文」などに便利です。
「row」は行「column」は列を指定できます。
複数のセルの操作
wb = openpyxl.load_workbook('auto_excel\main.xlsx')
ws = wb['Sheet1']
cell1 = ws['A1':'C3']
# 行単位で指定
row = ws[5]
rows = ws[5:10]
# 列単位で指定
col = ws['A']
cols = ws['A':'C']
複数のセルを指定しましたが、このままでは操作できないので
「for文」を使って操作します。
wb = openpyxl.load_workbook('auto_excel\main.xlsx')
ws = wb['Sheet1']
rows = ws['A1':'C3']
for row in rows:
for cell in row:
print(cell.value)
これでセルの値を取得できます。
Excelファイルの保存
wb = openpyxl.load_workbook('auto_excel\main.xlsx')
#新規ファイル
wb.save('auto_excel\main2.xlsx')
#上書き保存
wb.save('auto_excel\main.xlsx')
「Workbook」オブジェクトの「save」メソッドに保存先パスを指ましょう。
上書き保存の際は同じパスを指定しましょう。
ちょっとした参考コード
import openpyxl
list = [1,2,3,4,5,6,7,8,9]
wb = openpyxl.load_workbook('auto_excel\main.xlsx')
ws = wb['Sheet1']
num = 0
while num < len(list):
ws.cell(row=num+1, column=1).value = list[num]
num += 1
wb.save('auto_excel\main.xlsx')
先ほどチラッといった「while文」を使って操作しました。
listという配列の中をA1~A9までに順番に入れるという簡単なコードです。
次はlistの中を書き込むのではなくlistの中にExcelの値を入れ込んでみたり、ワークシートのコピーを大量に作ってみたり
色々遊んでみてください。
listの中身をほかのファイルからとってくるなどかなり幅は広げれますよー
さいごに
Excelの値を取り出し、Pythonで値を編集してほかのファイルに張り付けたり
PythonでWebスクレイピングなどしてその値をExcelに入力したりと
できることはたくさんあります!
もっと詳しく勉強していけばより高度なこともできるでしょう。
詳しくは以下の書籍など参考にしてみてください。