◆ Edge のエンジン使ったら ActiveXObject がなかった
◆ デフォルトの ES5 すら動かないのは使う気しないのでなかったことにする 

JavaScript というか JScript
ブラウザや Node.js ではなく Windows で実行できる JavaScript です
昔ながらのですが 何も入って無い PC でもちょっとしたスクリプトを慣れた言語で書けるというのはメリットなのでたまに使います


今回はたまたまエクセル操作してるページを見かけたのでちょっと使ってみました

とりあえずこんなコードを書くと
// enums
var XlFixedFormatType = {
    xlTypePDF: 0,
    xlTypeXPS: 1
}

var excel = new ActiveXObject("Excel.Application")
excel.Visible = true
excel.DisplayAlerts = false
var book = excel.Workbooks.Open("C:\\tmp0\\base.xlsx")
var sheets = book.Worksheets
var sheet = sheets(1)
sheet.Range("A1").Value = new Date().toString()
sheet.ExportAsFixedFormat(XlFixedFormatType.xlTypeXPS, "C:\\tmp0\\output.xps")
book.Close()
excel.Quit()
cscript excel-test.js

エクセルが立ち上がって A1 セルに今の時刻を書き込んで XPS ファイル出力して 終了します

なんか使いみちありそう!ですよね

ActiveXObject なんて不穏なものも見えますけど
ローカルだしまあいっか


エクセル操作とかは プログラムでやること先に書いてしまうより 現状のものをみながら操作できたほうが楽なので REPL が欲しいです

JScript にはそんな機能なさそうなので 自作しました
コード貼ると長くなりそうなので別記事に


見ての通りですが さすがに古い ES5 さえ動かない JavaScript は辛いので Edge のエンジンを使って ES2015 で書いてます
そのため この REPL は Windows10 専用



さて 準備も整ったので さっそく動かそうとしたら……


ReferenceError: 'ActiveXObject' is undefined


Edge に ActiveXObject はなかった!!!!


ActiveXObject をみたときの嫌な予感はこれだったのか……

さすがに Edge のエンジン無しで JScript は書きたくないのでエクセルについては見なかったことにします
JavaScript は拡張しやすい言語なので ES5 や ES2015 の polyfill 作る手もありますが↓がエラーになるレベルで構文が古いのはムリです
var a = {
x:1,
y:2,
}

「y:2」 のあとのカンマでエラーになっています
最初原因がわからなすぎてバグにしか思えなかったです



なんか REPL の作り損だったなあ
しかも 2 つもあるし