以下の内容はhttps://let.blog.jp/tag/Excelより取得しました。


Excel で Python が使えるようになるらしい
数年前にもそんな話題があったものの結局実現せず xlwings を使って外から操作できるくらいでした
ですが 今回は完全にエクセルの内部の機能として Python が統合されるようです

まだ一般には公開されてないみたいで Insider 登録してる人に順次公開らしいです
期待してさっそく OneDrive のエクセルオンラインで試したのに動かなったです

VBA 的な立ち位置かなと思ったのですが 数式として記述できるようです
便利そうだけど不安もあります
数式に複雑なものが書かれることが増えそうですし 他人の作ったエクセルのメンテ不可度がかなり上がりそうです
VBA マクロだとまだハードルがあるので 詳しくない人は触れない領域でしたが 数式だと気軽に使えすぎですよね

オフィスの中に Python の実行環境が含まれるのかなと思いましたが 実行はクラウドでやるそうです
ユーザー的にはインストール不要で楽そうですけど エクセル使うのにインターネット環境が必須になるというのも不便そうに思います
Microsoft が Python 推しみたいですし もういっそ Windows の標準機能として統合してもいいんじゃないかと思います
VBScript とか JScript みたいなレガシー機能は捨てて 代わりに Python を使えるようにしてくれたほうがうれしいです

今回のエクセルで使える Python は Python だけじゃなくて pandas や scikit-learn 等のライブラリも含まれていて 機械学習機能やグラフの作成などもできるようです
こういった機能まで入れるとなると ローカルで実行よりはクラウドのほうがいいのかもですね

また 実行がクラウドなら他言語の追加も容易そうに思いますが JavaScript も追加されたりしないのでしょうか?
一応アドオンという形でエクセル内部で JavaScript を動かすことはできるのですが アドインである以上 開くエクセル側にアドインが入ってないといけないです
自分だけならともかく .xlsx ファイルとして共有して他の人がその機能を使うことはできないです

ただそれを考えると今回の Python の機能ですら怪しそうです
最新のバージョンが要求される上に Microsoft のクラウドにアクセスする必要があります
オフィスって未だに 2007 みたいなサポート切れてるのを使う人を結構見かけます
企業だとアクセスできるサービスを制限していてクラウド実行ができないというのもありそうです
他人との共有で当たり前のように使っていけるのはまだ何年も先になりそうな気がしますね
LET や LAMBDA 関数ですら使わないようしてるくらいですし
SheetJS が npm から独自 CDN に移行するみたい
https://www.bleepingcomputer.com/news/software/npm-package-with-14m-weekly-downloads-ditches-npmjscom-for-own-cdn/

おすすめにこんなページが出てきました
タイトルを見てまた npm で何かあったのかと思ったら SheetJS が npm での公開をやめるみたい
理由は Github で 2 段階認証が強制されたことや別の問題もあるみたい
npm と SheetJS 間で訴訟があったみたいだけどここでは説明しないって書かれてるので詳しくはわからない
Github に issue ができてピン止めされてた
https://github.com/SheetJS/sheetjs/issues/2667

2 段階認証は自分も嫌いで強制されるのは嫌なのでわからなくもない

SheetJS って名前には聞き覚えあるし JavaScript で Excel 操作するライブラリは過去に何かで使ってたから今後対応必要になるのかもと思って調べたらこのサイトみたい
https://sheetjs.com/

たしかここって有料(?)の Pro プランがあるところで 機能は揃ってるけどスタイルかなにかを変更する機能を使うには Pro 版が必要になって無料版だとちょっとしたことをするのにも使えなかったやつだったような……
ググって出てきたそれっぽい QA
https://stackoverflow.com/questions/50110595/how-to-add-cell-border-to-sheetjs-xlsx-generated-file

それならこのパッケージは使ってなかった気がするし npm やめても別に困らないかな
Excel 関数で結合セルを判定できないのが本当に不便
結合されたセルの中のどれかを参照すると 一番左上のセルだけに値が入っていて 残りは空となるエクセルの仕様 本当に使いづらくてやっかい
結合してるんだから全部のセルで同じ値を参照できてほしい
指定のセルが結合セルなら空にせず値を取得する関数があれば問題ないのにそういう関数もない
そもそも結合されてるセルかの判断すらできない
LET とか LAMBDA みたいな新規関数追加するならこういう基本的なエクセル機能を扱う関数を用意してほしい
VBA マクロなら結合セルを取得できるけど そのためなんかに VBA を使いたくない

セル結合を使うなと言ってる人は見かけるけど エクセルは機械的に扱うデータのためだけのツールじゃない
人が見る 見た目優先のものを作るのにも使われる
エクセルがセル結合をサポートしてるんだからそれを使うなというのがおかしい
データとして再利用するとかなく見た目上のもので楽につくるために数式を使うだけなのにデータシートを分けるなんてやったら無駄に時間がかかるだけ

変にエクセル内の式でセル参照なんかせず Python などで全部のセルのデータを値として埋め込んでエクセルファイルを生成する方が楽な気がしてきた
ExcelJS もだめだった
に openpyxl を試したときは罫線が壊れて使えませんでした
あれこれ探してみてもいい感じでエクセルファイルをいじれるフリーのライブラリってあまりなくて比較的良さそうな exceljs を試してみました

openpyxl みたいにマージしたセルの罫線が壊れることはなかったのですが
書き込んだセルの下罫線が消えたり アラインが変わったり 自動で計算されないなど やっぱり実用は無理でした

アラインはマージしたセルのどこに値を設定するかで左揃えが中央揃えに変わったりのように見えます
自動計算は大変そうですし 内部でエクセルを使わないタイプのライブラリだと対応してるのがあまりなさそうです
でもそれだと事前にエクセルファイルに式をいっぱい作っておいて 元データ用のセルを書き換えたら それを元に色々計算されたデータを見れるということができません
毎回作ったファイルをエクセルで開いてセルの再計算を押さないとダメって不便すぎです

やっぱり 内部でエクセル使うツールしかないのかなぁ
続く
openpyxl は罫線消えるのがけっこう致命的
Excel を自動で操作したくて C# より Python のほうが楽でいいかなと Python のツールを探して見るとフリーだと xlwings か openpyxl が人気みたい
xlwings は C# の標準の Excel 操作みたいに Excel が必要でマクロ風に Excel 自体を操作できるものらしい
openpyxl のほうはバイナリファイル(といっても xml)を処理するもので Excel 不要

Linux のサーバで動かす予定なので openpyxl を選んで使ってみたらけっこう使いやすくていい感じ
Excel 直接操作にありそうな範囲全体のコピペができないのは不便だけど for でループしてセルごとに処理しても対して遅くない

だけど保存してみたら 罫線が壊れてた
けっこう有名な既知の問題らしくて何年も議論されてるのに直ってない

対処法に openpyxl で全部の罫線を引き直すというのがあるみたいだけど 例を見るとコード中に太さや色等を指定してる
これを見る限りは正しい罫線情報を openpyxl 中で取得もできなそう
ただデータを出力するだけのものならともかく見た目を調整して罫線もいっぱいあるものだと全部手動でやるなんてやってられないので結局使えなかった

openpyxl 中で引いた罫線は残るなら テンプレートを使わず 1 から openpyxl でフォーマット作ればできそうだけどそれはそれで大変すぎるし
罫線使わずただデータを出力するだけなら問題なさそうだけどそれなら pandas とかでもできそうだし あえてこれ使う必要もなさそう
Python in Excel に期待
Excel で Python 使えるようになるかもってニュースをみかけた
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1097447.html

この Excel への要望のトピックで投票数がすごい高いとか
https://excel.uservoice.com/forums/304921-excel-for-windows-desktop-application/suggestions/10549005-python-as-an-excel-scripting-language

VBA のおきかえだけじゃなくてセルの関数 (=SUM(A1:A2)) の置き換えにもなる って書いてるので色々便利そう

アンケートに参加して みたいなのがあったのでとりあえずやってみた




以上の内容はhttps://let.blog.jp/tag/Excelより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14