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

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

MENU

PythonでExcel読み込みや編集を行う

先日PythonExcelシートを作成の上、グラフを作成・出力する方法をまとめました。
elsammit-beginnerblg.hatenablog.com

今回は書き込みとは新規作成とは逆にExcelファイルの読み込みに関してまとめていきたいと思います。
さらに、読み込んでいるファイルに対する追記もまとめます。



■環境構築

今回も前回と同様に、openpyxlを用います。
openpyxlに関しては前回まとめましたので割愛。
インストール下記コマンドでOK。

pip install openpyxl

今回の実行環境ですが、
OS:Windows 10
Pythonバージョン:Python 3.7.4

Excelファイル読み込み

では早速Excelファイルからデータを読み込んでみたいと思います!!
Excelファイル名ですが、test.xlsxとし、ファイル内には、
f:id:Elsammit:20210926170726p:plain
が書き込まれているものとします。

コードはこちら。

import openpyxl

FILENAME = "test.xlsx"

def ReadExcel():
    wb = openpyxl.load_workbook(FILENAME)
    sheet = wb['Sheet1']
    
    count = 1
    while True:  
        cell = sheet["A"+str(count)]
        print(cell.value)
        count+=1
        if cell.value == None:
            print("finish")
            return
        execlist = cell.value.split("\n")
        #return

ReadExcel()

Excelファイルを読み込むコードは、

wb = openpyxl.load_workbook(FILENAME)

になります。
その後、シートを

sheet = wb['Sheet1']

にて指定します。
"Sheet1"はExcelのシート名になります。

シート内の値は、

cell = sheet[セル値]
value = cell.value

で取得できるので、"セル値"に読み出したい値を指定すればOKです。
今回はA列を読み出したいので、

    count = 1
    while True:  
        cell = sheet["A"+str(count)]
        print(cell.value)
        count+=1
        if cell.value == None:
            print("finish")
            return
        execlist = cell.value.split("\n")

といったコードとしました。
本コードでは、
A1、A2、A3、、、
に書き込まれている値を読み出しています。
A**が空欄であった場合、Noneになるので、
空欄であったらwhile文を抜けるようにしました。

最後に、
cell.value
にて取得した値は文字列で取得できるので、
セル内が複数行文字が下記まれていた場合には、
split("\n")で改行毎に分割が行えます。

こちらのコードを実行すると、

Hello
World
AAA
BBB
CCC
None
finish

といった結果が得られるかと思います。

Excelファイルへの追記

次にすでに存在するExcelファイルへ追記する方法です。
Excelファイルは先ほどのtext.xlsxを用います。
実施することは、
 ・A列にoが含まれている場合にはYes、含まれていない場合にはNoをB列に書き込み
を行う。とします。

コードはこちら。

import openpyxl

FILENAME = "test.xlsx"

def ReadAndWrite():
    wb = openpyxl.load_workbook(FILENAME)
    sheet = wb['Sheet1']
    
    count = 1
    while True:  
        cell = sheet["A"+str(count)]
        print(cell.value)
        if cell.value == None:
            print("finish")
            wb.save(FILENAME)
            return
            
        writeResult = "OK"
        if "o" in cell.value:
            writeResult = "NG"
        sheet['B' + str(count)] = writeResult
        count+=1
        
ReadAndWrite()

先ほどと同様に、

wb = openpyxl.load_workbook(FILENAME)
sheet = wb['Sheet1']

Excelファイル内シートを選択し、

cell = sheet["A"+str(count)]

でセルを読み出します。

そして、

        writeResult = "OK"
        if "o" in cell.value:
            writeResult = "NG"
        sheet['B' + str(count)] = writeResult
        count+=1

でセル内の値に"o"が含まれている場合にはYesそれ以外はNoを書き込みます。
書き込んでいるコードは、

sheet['B' + str(count)] = writeResult

です。
書き込む際は.valueを付ける必要はないです。

whileループでA列が空欄(None)になるまで続け、
空欄を検知したら、

wb.save(FILENAME)

で追記した結果を保存して終了させています。

本コードを実行すると、
f:id:Elsammit:20210926173433p:plain
といった結果が得られ、想定通りB列にOK/NGが書き込まれているかと思います。

■最後に

今回はExcelファイルの読み出しと追記に関してまとめてみました。
読み出し・追記もopenpyxlを使用すれば簡単でした。

これで大体のエクセル操作は出来るようになったかな?
他に使いたい機能とか出てきたら調べた上でブログにまとめたいと思います。