仕事に使えるPython①:Excelデータの読み込み

当ページのリンクには広告が含まれています。

Hello World!

仕事でのExcel作業に「転記」をしていませんか?

今回は、Pythonを使ってExcelデータの読み込みについて解説します。Pythonを使うことで、繰り返し作業などの単純作業を自動化することが出来ます。一度コードを書いてしまえば、次回からは実行するだけになるので、かなりの時間短縮になります。

私も転記作業をたくさんしておりました。。。値をExcel→Excelへの転記も多く、ウィンドウを切り替えながらチマチマと作業しておりました。

この手間でしかない作業をPythonを使うと自動化できます!

転記作業を分解すると、①転記するデータがあるファイルを開く → ② 転記するデータをコピーする → ③転記先のファイルを開く → ④転記先にデータを貼り付けるとなります。

この記事では、ExcelからExcelの転記について、①〜②までの作業をPythonでの実行について解説します。

この記事は? 次の様な方の役に立ちます。
  • Pythonで何が出来るか知りたい
  • プログラミングを使って日常業務の自動化に興味がある
ふくゆー

PythonでのExcel操作はもっと速く知りたかったです。特に転記作業のような単純作業をプログラムで自動化すると、高速かつ正確に処理ができて便利です。

目次

Pythonで処理・自動化する内容

はじめに作業を分解し、各作業項目について実際に人間が作業する場合どのように作業するかを書き出します。Pythonのコードを書く場合は、この人間がする作業をそのままの順番でコードを書いていきます。

STEP
転記するデータがあるExcelファイルを開く
  1. 転記するデータが記載されているExcelファイルが保存されているフォルダ(ディレクトリ)を開く
  2. 転記するデータが保存されているExcelファイルを開く
STEP
転記するデータをコピーする
  1. 開いたExcelファイルにおいて、転記したい値が記載されているシートを選択する。
  2. 開いたExcelファイルにおいて、転記したい値が記載されているセル/行を選択する。
  3. 値をコピーする。
STEP
転記先のファイルを開く

この作業は、①と同じ作業です。

  1. 転記するデータが記載されているExcelファイルが保存されているフォルダ(ディレクトリ)を開く
  2. 転記するデータが保存されているExcelファイルを開く
STEP
転記先にデータを貼り付ける

この作業は、ほぼ②と同じです。

  1. 開いたExcelファイルにおいて、転記したい値が記載されているシートを選択する。
  2. 開いたExcelファイルにおいて、転記したい値が記載されているセルを選択する。
  3. 値をコピーする。

*当記事では、特定セル指定の場合とExcelファイルの指定シート全体をコピーするプログラムについて解説します。

ふくゆー

このように作業内容を書き出すことは大切だと思います。いきなりコードを書いてしまいがちですが、何をパソコンに処理させるかを書き出してコード書き始めたほうが効率が良いです。

使用するライブラリ・モジュール

ライブラリ・モジュールとは?

モジュールは、Pythonコードをまとめたファイルに過ぎない。

入門Python3
・著:Bill Lubannovic ・監訳: 鈴木駿 ・訳:長尾高弘 ・出版:オライリージャパン・ 発売:オーム社

すべてのPythonコードがほかのコードからモジュールとして使えるようになっている。

入門Python3
・著:Bill Lubannovic ・監訳: 鈴木駿 ・訳:長尾高弘 ・出版:オライリージャパン・ 発売:オーム社

ライブラリ、モジュールには明確な区別はないようです。いずれもPythonコードのまとまりです。

必要なモジュールをインストール、必要に応じ呼び出す(インポートする)ことができます。作成されたコードを利用出来るため、0から自分でコードを書かずともプログラムを作成することが可能です。

ふくゆー

モジュールは、Pythonの道具のようなものと捉えてます。必要な道具を、道具箱に入れる(インストール)して、使うときに装備(インポート)して使用します。

使用するライブラリ

  • Openpyxl

openpyxl – A Python library to read/write Excel 2010 xlsx/xlsm files
訳:openpyxl – Excel 2010 の xlsx/xlsm ファイルを読み書きするための Python ライブラリ

Openpyxl HP

拡張子.xlsx, .xlsmエクセルファイルを扱うためのライブラリです。この記事で解説するPythonプログラムはこちらのライブラリのみで実行可能です。

インストールがまだの方は、次のコードを実行してインストールすることでこの記事のコードが実行できるようになります。

  • Windows: コマンドプロンプトで次のコードを入力実行してください。
py -m pip install openpyxl
  • Mac: コマンドプロンプトで次のコードを入力実行してください。
pip3 install openpyxl

Pythonプログラム:Excelファイルから値の読み込み

Excelファイル

今回は、Excelで作成した請求書(ファイル名:sample_invoice.xlsx)を使います。

sample_invoice.xlsx(式の場合は値として表示)
sample_invoice.xlsx(式の場合は式として表示)

Pythonプログラム①:指定したセルの値を読み込む

読み込みたい値が格納されているセルを指定して読み込むプログラムです。

def read_cell(target_path, sheet_name, cell_position_list):
		#引数
		# target_path: 読み込みたいExcelファイルのフルパス
		# sheet_name : 読み込みたい値があるシート名
	  # cell_position_list: 読み込みたい値があるセルのリスト

		#1.指定のExcelファイルを開く
    wb = openpyxl.load_workbook(target_path,data_only=True)     
		#data_only=Trueとすることで、値として読み込みます。
		
		#2.コピーしたい値があるシートを指定する。
    ws = wb[sheet_name]

		#3.読んだ値を格納するからのリストを作る。
    read_value_list = []
                          
		#4.値の読み込み。
		# cell_position_listに対してループを作って各指定セルの値を読む
    for cell in cell_position_list:       
        read_value = ws[cell].value         #変数read_valueに読んだ値を格納
        read_value_list.append(read_value)  #read_value_listに格納

		# {キー(指定セル):値(読み込んだ値)}の辞書にする。
    read_value_dic = dict(zip(cell_position_list, read_value_list))
    
		# {キー(指定セル):値(読み込んだ値)}の辞書を結果として返す。
    return read_value_dic

if __name__ == '__main__'
    
    target_path = "/Users/******/Desktop/sample_invoice.xlsx"
    
    sheet_name = "請求書"

    cell_position_list = ["A4", "N3", "D14"]

    result = read_cell(target_path, sheet_name, cell_position_list)

    print(result)

### 実行結果 ###
# {'A4': '株式会社 DFR 商事', 'N3': '2022−07−09', 'D14': 5500}

# data_only=True を削除すると、次の様になります。
# {'A4': '株式会社 DFR 商事', 'N3': '2022−07−09', 'D14': '=L31'}

Pythonプログラム②: 行単位で値を読み込む

読み込みを開始する行を指定して読み込むプログラムです。

def read_xlsx(target_path, sheet_name, start_row):
    #引数
		# target_path: 読み込みたいExcelファイルのフルパス
		# sheet_name : 読み込みたい値があるシート名
    # cell_position_list: 読み込みたい値があるセルのリスト
    
    #1.指定のExcelファイルを開く
    wb = openpyxl.load_workbook(target_path, data_only=True)

    #2.コピーしたい値があるシートを指定する。
    ws = wb[sheet_name]

    #3.読んだ値を格納するからのリストを作る。
    row_list = []

    #4. 値の読み込み                        
    for row in ws.iter_rows(min_row = start_row):            
        #start_rowで指定した行以下で読み込み開始。各行に対して以下の処理を実行
        if row[0].row > start_row and row[0].value is None:   
            #start_row以上の列数および、A列に値がない場合に読み込み停止
            break
        value_list = []                    #読んだ値を格納するための空のリストを作る。
        for c in row:                      #読み込んでいる行の値を全て読み込む  
            value_list.append(c.value)     #読み込んだ行の値を取り出し、value_listに格納する。                     
        row_list.append(value_list)        #読み出した1行分の値のまとまり(リスト)をrow_listに追加
    
    return row_list

if __name__ == '__main__':
    
    target_path = "/Users/*****/Desktop/sample_invoice.xlsx"
    
    sheet_name = "請求書"

    start_row = 17

    result = read_xlsx(target_path, sheet_name, start_row)
    
    for row in result:
        print(row)

### 実行結果 ###
    # ['りんご', None, None, None, None, None, None, None, None, 1, '個', 100, None, None, 100, None, None]
    # ['みかん', None, None, None, None, None, None, None, None, 10, '個', 90, None, None, 900, None, None]
    # ['ぶどう', None, None, None, None, None, None, None, None, 20, '個', 200, None, None, 4000, None, None]

# data_only=True を削除すると、次の様になります。
    # ['りんご', None, None, None, None, None, None, None, None, 1, '個', 100, None, None, '=PRODUCT(J17,L17)', None, None]
    # ['みかん', None, None, None, None, None, None, None, None, 10, '個', 90, None, None, '=PRODUCT(J18,L18)', None, None]
    # ['ぶどう', None, None, None, None, None, None, None, None, 20, '個', 200, None, None, '=PRODUCT(J19,L19)', None, None]

セルに値がない場合は、Noneで格納されます。また、結合セルの場合、最小列の箇所に値が格納されます。

まとめ

今回は、Pythonで値を読み込むプログラムについて書きました。

次回は、読み込んだ値を利用するプログラムについて解説します。Pythonを使って、読み込んだ値を○他のExcelファイルに転記、○メール本文に利用することができます。

Pythonを使ってのExcelファイルの操作は便利です。手作業でチマチマ処理していたことが、一瞬で終わります。当記事がPythonでのExcel操作のはじめの段階になると思います。活用いただけますと幸いです。

最後まで読んでいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次