初めての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とも組み合わせられるみたいだし、楽しそう。
言語的にも、最近は型付けがシビアな言語をよくさわっていたので、動的型付けってラクだな~~。条件分岐や繰り返し文法も少ない記述でスッキリ書ける感じ。もうちょっとなにか作ってみようと思います!
2件のコメント
お世話になってます、業務上VBAを使うことになりそうなので参考にさせていただいております。
まだ産毛だらけ(しかも殻付き)のプログラマなのですが、動的言語はお一人で書く分には超楽です!
ただ、複数人で触るプロジェクトだと「この箱…何が入っているんや…」みたいな闇鍋感がすごくて絶対に嫌ですw
(ふる~い段ボール、触りたくないけど業務上開けねばならんし目的のものはあるんか…?というあの感じに近いです)
型宣言は面倒ですが、事務のラベリング作業と酷似しています。
後で助かる先人の知恵!って感じです。
あと、他のもの入れんなよっていう威嚇(笑)
なので動的の良さ、静的の良さは記憶力と管理能力、そして規模に依存すると思いました。
(動的言語の現場では、構文を見やすく書くという鉄の掟を守らないと死ぬのでw)
以上、横やりでした。
引続き勉強させてもらいますm(__)m
こんにちは、コメントありがとうございます!
今まで動的型付の言語ってガッツリやってこなかったので、たしかに書く時はラク~!って思えても、気を付けて設計しておかないと後で読み解くときに大変なことになりそうですね…! ありがとうございます、こちらこそ参考になります~!
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。