2024年11月現在の情報です。
最初に断っておきたいのが、それほど深く調べ上げていないので、生暖かく見ていただきたいです。
Excelの表データをJSONに出力するという課題があり、解決のためにPython in Excelを試しました。
今回書いたプログラムは以下のとおりです。
表自体に名前をつけて絶対参照しやすいようにしています。
import json
list = xl("list")
result = []
for i in range(0, len(list)):
prefecture = list[0][i]
city = list[1][i]
if prefecture is None or city is None:
break
result.append({
'prefecture': prefecture,
'city': city
})
json_str = json.dumps(result, indent=2, ensure_ascii=False)
print(json_str)
触ってみた感じ
Pythonは書けるのだけど・・・
実態は=PY()
の関数の引数にプログラムを書いているということらしいです。
数式バーでの編集はおすすめしません。
いろんな意味で使いにくくて、Visual Basicエディタのように常に書き方を矯正してきたり、行番号もなく、Ctrl+Zは1回までとなっています。
致命的なのが、入力中に表示されるフォントが等幅フォントとプロポーショナルフォントが入り交ざることがあり、インデントが重要なPythonのコーディングには向きません。
Excelに内蔵のエディタはそのようなことがないので、そちらを使いましょう。
列→行で見ていく表データの走査
多次元配列の1次元目は列になっています。
Google App ScriptとかだとgetValues()
で取得したデータは行→列の順で2次元配列担っていますが、Python in Excelでは列→行で見ていくっぽい。
これに気づくのにちょっと時間がかかりました。
list[0][0] == '北海道' | list[1][0] == '札幌市'
list[0][1] == '宮城県' | list[1][1] == '仙台市'
list[0][2] == '千葉県' | list[1][2] == '千葉市'
実行タイミングがよくわからない
プログラムを書き換えて、Ctrl+Enterをしても、プログラムが再実行されない。
よくわかっていないのですが、プログラムを書き換えるたびにPythonランタイムを再起動する必要があるみたいです。
「実行時刻のリセット」をすることで再度実行結果が得られます。
今回の「表データからJSONを出力する」という処理の場合、表にデータを追加しても即時反映されるわけではなく、この「実行時刻のリセット」をしなければ動きませんでした。
もちろんボタンを押して実行ということもできなさそうなので、マクロの代替とはならなさそうです。
実行環境が限られすぎている
2024年11月現在、ウェブ版、Mac版のExcelでは動かせません。
https://support.microsoft.com/ja-jp/office/python-in-excel-%E3%81%AE%E6%A6%82%E8%A6%81-55643c2e-ff56-4168-b1ce-9428c8308545
ウェブ版で動かせないならデスクトップアプリを入れていない人はPython in Excelの実行結果を得られない。
組織内でMacを使っている人もデスクトップアプリを入れていてもPython in Excelの実行結果を得られない。
個人用の365プランではプレビュー版になっています。
この時点で選択肢から外れてしまします。
情報が少ない印象
リファレンスがほしい。import excel
で何ができるのかとか。
まとめ
Python自体は仕事でも使うのですが、Python in Excelが役に立つ場面はあるかなぁという感じです。
2024年11月現在では制約が多すぎて使う場面はかなり限られそうというのが印象でした。