Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

PythonでExcel操作 シート追加と削除についてまとめてみる

先日、データをPythonを用いてexcel化する方法をまとめました。
elsammit-beginnerblg.hatenablog.com

こちらの方法でexcel化してデータをグラフ化しているのですが、
ちょっとデータの種類が増えてきたことに伴い、シート1枚では管理が難しくなってきました。。

そこで今回は別シートを作成したり、無駄なシートを削除する方法に関してまとめていきたいと思います。
また、後で何のシートなのかが分かるようにシート名を追加する方法も載せておこうと思います。



■環境構築

前回と同様に、pythonのバージョンは、
Python 3.7.3
です。
前回もお話した通り、Python3.x.xであれば使用出来る手順かと思います。

また、今回も例によって用いるライブラリはopenpyxlです。
openpyxlは下記によりインストール可能です。

pip install openpyxl

Excelシートを追加してみる

ではopenpyxlでExcelシートを追加していきたいと思います。
単純にシートを追加したいだけであれば、

from openpyxl import Workbook

wb = Workbook()
ws = wb.create_sheet()

でOKです。
実際にシートを作成しているコードは、

ws = wb.create_sheet()

になります。
wb変数は、

wb = Workbook()

により生成したExcel作業データになります。
Excelファイルを開いてシートを追加した感じのコードが上記コードですね。

前回のコードを流用すると、データがこちらとして、

dataX1 = ["index",1,2,3,4,5]
dataY1 = [
     ["data1",10,5,30,50,80],
     ["data2",100,5,30,10,100]
    ]

dataX2 = ["index",6,7,8,9,10]
dataY2 = [
     ["data1",20,15,40,60,90],
     ["data2",110,15,40,20,110]
    ]

こちらのようなコードを作成すると、

def DataToXmlFiles(dataX1, dataY1, dataX2, dataY2, outfile):
    wb = Workbook()
    ws = wb.active

    for var in range(len(dataX1)):
        ws.cell(row=var+1,column=1).value = dataX1[var]
        for i in range(2):
            ws.cell(row=var+1, column=i+2).value = float(dataY1[i][var])
    
    ws = wb.create_sheet()

    for var in range(len(dataX2)):
        ws.cell(row=var+1,column=1).value = dataX2[var]
        for i in range(2):
            ws.cell(row=var+1, column=i+2).value = float(dataY2[i][var])
    
    wb.save(outfile)

1枚目のシートにdataX1、dataY1のペアのデータ
2枚目のシートにdataX2、dataY2のペアのデータ
がそれぞれ書き込まれるかと思います。

シートの位置ですが、create_sheet関数の引数にシートのindex番号を渡せばOKです。

ws = wb.create_sheet(index=シート位置を指定する番号)

※左から0、1、2、、、となります。

Excelシートを削除してみる

では次にExcelシートを削除してみます。
といってもこちらもシート追加と同様に数行で済みます。

wb = Workbook()
wb.remove_sheet(wb.get_sheet_by_name('シート名'))

実際にシートの削除処理を行っているのは、

wb.remove_sheet(wb.get_sheet_by_name('シート名'))

です。

Excelに含まれているシート名の一覧を見たい場合には、

wb = Workbook()
wb.sheetnames

でOKです。
sheetnamesによりリスト型でシート名が返ってきますので、
削除したいシート名を検索して、
remove_sheet関数で削除を実行すればOKです。

■シートに名前を付ける

シートの追加と削除が行えるようになりました。
シートを管理するにあたりシート名があった方が管理しやすいかと思います。
シート名を追加するコードはこちらになります。

ws.title = "シート名"

wsは現在使用・選択しているシートになっておりますので、
現在使用しているシートにシート名を付与しています。

使用するシートを切り替える方法は、

ws = wb.worksheets[ シート番号 ]

で切り替えが可能です。
ここでシート番号は左から0、1、2、、、、
となります。
例えば、シートの2番目をhogeという名前にしたい場合には、

ws = wb.worksheets[1]
ws.title = "hoge"

とすればOKです。

■最後に

今回はopenpyxlでシートの管理を行ってみました。
Excel化は結構便利なので、これからも使っていきたいと思います。
また気づいたことなどあったらまとめていきたいと思いますので、よろしくお願いいたします。