初めてのPythonでExcelを操作する

初めてのPythonでExcelを操作する

はじめてのPython2回目。Excelを動かしてみます。1回目はこちら


openpyxlのインストール

PytionでExcelを操作するためには、openpyxlというライブラリが必要だそう。そのライブラリを導入するために、Pythonのパッケージ管理システムである、pipを利用するとのこと。ふむふむ。

pipはPythonと共にインストールされているとのことなので、確認してみる。Win+R → cmd でコマンドプロンプトを起動。

このコマンドでインストール済パッケージと、バージョンが確認できる。

pip list

このコマンドでopenpyxlをインストールして、

pip install openpyxl

もう一度インストール済パッケージと、バージョンの確認をすると、インストールしたパッケージが増えている。

pip list

ちなみに、pipやopenpyxlのアップデートは以下のコマンド。

pip install --upgrade pip
pip install --upgrade openpyxl

コメントアウトの書き方

コードを書く前に、コメントアウトのお作法について調べておく。推奨されるコーディング規約があるなら従っておくほうが吉!

  • コメントアウトは#(Ctrl+/で挿入)
  • インラインコメントの#の前には少なくとも2つのスペースを置く
  • インラインコメントは#とスペースひとつから始める

Excelの操作

VSCodeで新しいワークスペースと.pyファイルを作って、コードを書くぞ!

ファイルの読み込み

まず、PythonからのExcelファイルを読み込んで終了してみよう。データ型は動的型付けなのね。とりあえず以下のように書いたらめっちゃエラー吐いた

import openpyxl  # openpyxlライブラリのインポート

fileName = 'C:\Sample\test.xlsx'  # 対象ブックのパス
wb = openpyxl.load_workbook(fileName)  # ブックの読み込み
ws = wb['stname']  # シート名の指定

v1 = ws['A1'].value  # A1セルの値を取得
print(v1)  # コンソール出力

wb.close()  # 終了

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position x: truncated \UXXXXXXXX escapeとのこと。ごめんなさい。どうやらWinのフォルダ区切り記号の\(バックスラッシュ)は使えなくて、/に置換しなきゃいけないみたい。\を使いたい場合は\\とエスケープすればOKと。

なので、以下のように/にしたら動いた。

import openpyxl  # openpyxlライブラリのインポート

fileName = 'C:/Sample/test.xlsx'  # 対象ブックのパス
wb = openpyxl.load_workbook(fileName)  # ブックの読み込み
ws = wb['stname']  # シート名の指定

v1 = ws['A1'].value  # A1セルの値を取得
print(v1)  # コンソール出力

wb.close()  # 終了

……のだけど! パスはコピペで使いたいし、階層が多かったら全部手で直すのは嫌だ……! ということで、文字列の前にrをつけるとraw文字列として認識してくれるので、それを置換したほうが楽なんじゃないかなと。これで動きました。

import openpyxl  # openpyxlライブラリのインポート

fileName = r'C:\Sample\test.xlsx'  # 対象ブックのパスをraw文字列で指定
fileName = fileName.replace('\\', '/')  # \\→/へ置換
wb = openpyxl.load_workbook(fileName)  # ブックの読み込み
ws = wb['stname']  # シート名の指定

v1 = ws['A1'].value  # A1セルの値を取得
print(v1)  # コンソール出力

wb.close()  # 終了

セルの指定

ブックとシートを変数に入れたら、セルは以下のように指定できる。

wb = openpyxl.load_workbook(fileName)  # ブックの読み込み
ws = wb['stname']  # シート名の指定

v1 = ws['A2'].value  # A2セルの値を取得
v2 = ws.cell(row = 2, column = 1).value  # パラメータ名有りの位置指定でセルの値を取得
v3 = ws.cell(2, 1).value  # パラメータ名無しの位置指定でセルの値を取得

VBAをゴリゴリ使う私にも超馴染みやすい~~!! 全然違和感ない。

セルへの書き込みはこう。

ws['A2'].value = 'aaa'

ブックの保存

保存するには、保存先も一緒に指定するみたいなので、別名保存なら新しいパス、上書き保存なら読み込みの時に作った変数を使えばOK。対象ブックは閉じていること。

import openpyxl  # openpyxlライブラリのインポート

fileName = r'C:\Sample\test.xlsx'  # 対象ブックのパスをraw文字列で指定
fileName = fileName.replace('\\', '/')  # \\→/へ置換
wb = openpyxl.load_workbook(fileName)  # ブックの読み込み
ws = wb['stname']  # シート名の指定

ws['A1'].value = 'aaa'  # 書き込み

wb.save(fileName)  # 保存
wb.close()  # 終了

とりあえず、最低限はこんなところかな。

所感

実際に書いてみて納得。なるほど、これはかんたん。ものすごくかんたんだ。ExcelをGUIとして使うのが楽なんだ。今更ながらスプレッドシートって本当に優秀なんだなと思っちゃった。

Excelで自動化作業したいけど成果物がマクロを含まないxlsxにしておきたい場合なんかは超良さそう。データ解析ライブラリで有名なPandasとも組み合わせられるみたいだし、楽しそう。

言語的にも、最近は型付けがシビアな言語をよくさわっていたので、動的型付けってラクだな~~。条件分岐や繰り返し文法も少ない記述でスッキリ書ける感じ。もうちょっとなにか作ってみようと思います!

公開日:2024/03/26

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)

YouTubeでQ&Aコンテンツを企画しています

運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。