openpyxlの使い方 Excelの差し込みがワンクリックで

    目次

    pandasとopenpyxlの違い

    pandasは、Excelファイルの読み書きもできますが、本来の⽤途はPythonの中で表データを編集することです。Excelへの書き出しはオマケ的な機能なので、列幅やフォントなどの書式は設定できません。そのため、pandasで作成したExcelファイルはデータが列幅からはみ出してしまい、あとで調整が必要になってしまいます

    Excelファイルを扱う専⽤のパッケージに、openpyxlがあります。これを利⽤すると、セルへの書式設定やワークシートの追加といったVBAのような操作ができます。書式設定済みのExcelファイルを開いて、書式を崩さずにデータを追記することも可能です。

    今回はCSVなどから変換したような表からデータを抜き出し、書式のみが設定された表に差し込むプログラムを作成します。

    Excelのサンプルファイルは下のボタンからダウンロードしていただけます。

    サンプルコード

    pyxl.py

    import pandas as pd
    
    import openpyxl
    
    import datetime
    
    df= pd.read_excel("旅行スケジュール.xlsx")
    
    workbook=openpyxl.load_workbook("旅行スケジュール(原本).xlsx")
    
    sheet=workbook.active
    
    sheet["C1"]=datetime.date.today()
    
    row_index=3
    
    for index,rows in df.iterrows():
    
        col_index=1
    
        for data in rows:
    
            sheet.cell(row=row_index,column=col_index,value=data)
    
            col_index=col_index+1
    
        row_index=row_index+1
    
    workbook.save(“旅行スケジュール(完成版).xlsx")

    解説

    openpyxlの使い⽅はpandasとはかなり異なっていて、どちらかといえばExcel VBA(Excel内蔵のマクロ⾔語)に似ています。

    ワークブック(ファイル)を開いてワークシートを選び、セル番地を指定してセルを編集します。ですのでExcel VBAの経験がある⼈なら馴染みやすいです。

    openpyxlはExcelを使わずに直接Excelファイルを操作するので、VBAより実⾏速度が速いです。また、複数のExcelファイルの操作もやりやすいですよ。

    書式未設定の元データが⼊った「旅⾏スケジュール.xlsx」は、これまで同様 pandasで取り い ます。 read_excel 関 数 で 読 み 込 み 、DataFrameオブジェクトの形で変数dfに⼊れておきます。

    書式が設定された「旅⾏スケジュール(原本).xlsx」はopenpyxlのload_workbook関数で読み込みます。そして、取得したWorkbookオブジェクトのactive属性で、ファイル内で選択中のワークシートを取得します。

    セルC1に今⽇の⽇付を⼊⼒しています。その前までの処理で変数sheetにWorksheetオブジェクトが⼊っているので、「sheet[“C1”]」で⽬的のセルを参照できます。datetime.date.today()はPythonで今⽇の⽇付を取得する記述なので、それを代⼊するとセルC1に今⽇の⽇付が⼊ります。

    for index,rows in df.iterrows():

    はデータを転記する2重ループです。今回は追加先がopenpyxlで操作しているExcelファイルとなります。

    WorkSheetオブジェクトのcellメソッドでExcelファイルに追加しています

    cellメソッドでは引数row、引数columnでセルの位置を指定し、引数valueに設定したい値を指定します。⽇付の⼊⼒に使った「sheet[“C1”]」という書き⽅に⽐べると、⾏と列を数値で指定するので、繰り返し処理に向いています。

    他のPythonでExcelを自動化するテクニック

    複数のファイルの文字をまとめて置き換えする

    tabulaのconvert_into関数でPDFファイルをExcelに変換

    これは便利!Pythonのconcat関数で追記するプログラムをつくる

    【Python】項目がバラバラなExcelファイルを一つにまとめる

    【Python】globモジュールの便利な使い方

    iterrowsメソッドで複数のファイルを1つにまとめる

    【Python】to_excelメソッドでCSVファイルをExcel形式に変換

    Pythonの開発環境をAnacondaで整える~プログラム実行まで~

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