Excel 2016 for MacのVBAからInDesignのJavaScriptを実行する(3)

Excel VBA側でのコードは次の流れになります。先にテキストファイルを作成し、その後にAppleScriptを実行しています(Close #fnまでがテキスト作成

 ' 書き込むファイルのファイル名
t = Date
pafile = Year(t) & Format(Month(t), "00") & Format(Day(t), "00") & "_" & _
    Format(Hour(t), "00") & Format(Minute(t), "00") & Format(Second(t), "00")
pafile = ThisWorkbook.Path & "/pa" & pafile & ".txt"
' 書き込むファイルを開く
fn = FreeFile
Open pafile For Output As #fn
' InDesignテンプレート情報の書き込み
Print #fn, "var indt = '" & ThisWorkbook.Sheets("sys").Cells(7, 2).Text & "';"
' シート内容の書き込み
Print #fn, "var data = [];"
For i = 開始行 To 終了行
    Print #fn, "data[" & i & "] = '" & Cells(i, 1).Text & "';"
Next i
' 書き込むファイルを閉じる
Close #fn
' 実行するjsxファイル
jsfile = ThisWorkbook.Sheets("sys").Text
' AppleScriptファイル名
asname = "exeInDesignCC2018.applescript"
' AppleScript実行
res = AppleScriptTask(asname, "sh", jsfile & "||" & pafile) 

そして、jsx側で必要なのはこれだけ。

//ファイルの読み込み
$.evalFile(arguments[0]);

これで引数に指定されたファイルを読み込んで解釈してくれるという優れもの。しかも、文字コードを自動判別してくれるのでシフトJISだろうがUTF-8だろうが問題ないのです。

で問題は、VBAのPrintステートメントを含むテキストファイルの処理がシフトJISしか扱えない、ということ(WindowsとMacで共通に使える範囲内での)シフトJISの範囲であれば問題はないのですが、もうそんな時代ではないんですよね。VBAの最大の問題点は仕様が古すぎるということ。安定しているという言い方もできるけれども。

ここが一番面倒なところで、別途シフトJISにない文字を独自に変換するプログラムを書いているんですが、汎用性がないのと酷いコードなので公開は控えます。そこは皆さん頑張ってください。もしくはシフトJIS限定にするとか。

まあ、そんなこんなで、この連載は終わりです。役に立つかは別として、こんな方法もあるよということで参考になったかしら。