◆ C# のエクセル操作を REPL で実行してどう変わるのか簡単に見れる

ファイル整理してると掘り出されたツールがあったので簡単に紹介です

C# で VBA と同じような関数でエクセルを操作することができます
エクセルファイルのバイナリを作るというものじゃなく内部で本当にエクセルが動いてるものです
便利なのですが 開発中にどうなるのか確認しながら動かしたいときにはいろいろ使いづらいところもあります

個人的には REPL 的な物が欲しいのです
ブラウザでコンソールでなにか実行すると DOM が変わって画面が更新されるみたいなものです

そう思ってできたのがこれ

インタラクティブに実行

起動するとウィンドウと一緒にエクセルが起動します

exsharp01

まずはウィンドウのほうですがだいたい REPL です
上に C# コードを書いて左上の ▶ ボタンを押すと

exsharp02

結果が下側にでます


using したり代入したり複数文を書いたりもできます

exsharp03

ログのタブを開くと過去のログが見れます

exsharp04

エクセル

ここからがエクセル部分です

実行ボタンの隣の本みたいなアイコンを押すとよくあるファイル選択ダイアログが出ます

exsharp05

エクセルファイルを開きます
開くと エクセルの方でファイルが開かれます

exsharp06

この状態で

sheets[1].Range["A1"] = "abc"

と実行すると エクセルの A1 セルが "abc" と更新されます

exsharp07

その他どういう書き方で何ができるかは マイクロソフトのドキュメント参照です
全体がまとまってるページが無いのですが ここからたどっていけば一応シートや Range の操作も書いてるはずです

これで実行してみてエクセル側がどう変わるのか簡単に確認できるようになりましたね

スクリプト中で使える変数

sheets など簡単にエクセルにアクセスできるようにいくつか変数を用意しています

  • app
        Excel のインスタンス
  • books
        app.Workbooks と同じ
  • book
        本のアイコンからエクセルファイルを開いた後にその book を参照できる
  • sheets
        book.WorkSheets と同じ

アイコンから開かず自分でスクリプトを実行で開いても問題ありません
開くボタンは自分で毎回書くの面倒だったのでボタン作ったくらいのものです
新規作成とか保存機能は用意してないですが スクリプトでそういうコードを実行すれば動きます

新規ブックつくって保存するのだと

var book1 = books.Add();
book1.SaveAs("filepath.xlsx");

で可能です
ウィンドウを閉じるとエクセルも閉じるので そのとき更新があればエクセルが保存しますか?と聞いてくれるのでそこでも保存できます

ダウンロード

本体はちょっとだけなのにスクリプト実行などの依存パッケージ含めるとファイルサイズ大きくなったのでブログじゃなく外部の Gist においてます
Release.zip をダウンロードして解凍すれば使えます