でもまあどれもまず間違いなく無理だったのがVBAなんです。
(COMエディタ+言語みたいなものなので、無理なのは当たり前なんですが)
個人的な希望で言えばWin32APIやVarPtr、さらにCOMなんかを全サポートしてくれれば
最高なんですが、それはさすがに高望み。それはWindowsしか出来ないこと。
でもねぇ。
Msgbox "Hello?"
この程度すら、2、3年前のオープンオフィスは出来ませんでした。
LibreかOpenか、どちらかが落ちて、どちらかが関数が存在しませんエラー。
だからもう端から期待してなかったんですが、
LibreOfficeの設定に、「Excelのマクロを実行する」みたいなのがあって。
これ、つまりですね、「俺はそれぐらい動かせる」って自信でしょ?…本気?
で、やってみたら・・・

おお!動いた!
これは…もしかしてやってみる価値はある?
じゃあ次だ。これは出来るかな?
Sub test()
dim wb as workbook
set wb = thisworkbook
msgbox wb.worksheets.count
End Sub
実に簡単ですが、少なくともExcelのCOMはサポートしないと動きません。
さあどうだ?

おお、ちゃんと返した!まさかここまで進化してるとは!
ならWin32API抜きかつCOM抜きのVB6でどうだ?
Sub test2()
' ブートフォルダ直下にある全ファイル検索
dim fnm$,ret$
fnm = dir("/boot/",31)
do
if fnm= "" then exit do
if fnm = "." then goto nd
if fnm = ".." then goto nd
ret = ret & fnm & vbcrlf
nd:
fnm = dir()
loop
msgbox ret
End Sub

うおお!ここまで!ラピュタは本当にあったんだ!
じゃあ本番。適当にLibreOfficeの情報を書き出して保存。
Sub test3()
dim xl as excel.application
dim wb as workbook
dim ws as worksheet
set xl = application
set wb = xl.workbooks.add()
set ws = wb.worksheets(1)
ws.range("A1").value = "情報"
ws.range("A2").value = "ブック数":ws.range("B2").value = xl.workbooks.count
ws.range("A3").value = "シート数":ws.range("B3").value = wb.worksheets.count
ws.range("A4").value = "アプリケーション名":ws.range("B4").value = xl.name
wb.saveas "~/test.xls"
wb.close
End Sub

おおー、でけたでええええ
なるほど、その自信のほどはよく分かった。よく頑張った。
でもアプリケーション名「Microsoft Excel」はワロタ。偽装すんなw
と、それなりに興奮したんですが、案の定制約が結構ある。
APIコール系はアウト。VarPtrも不可。
これは仕方ない。
他COMは呼べない。作れない。
dim xl as New Excel.Application
こんなのも不可。どうも自プロセス限定ぽい。
CreateObjectも当然不可。
インテリセンスが使えない
これが正直一番痛い。サポートしてない関数結構あるっぽいのに
使えるかどうかも分からない。
Debug不可
ブレークポイントは可能。ウォッチも可能。
でもイミディエイトウィンドウが無い。変なの。
結論として、当たり前ですが、COMではなく、
エクセルマクロエミュレーターってのが一番近そう。
でも、「もしかしたら2、3年前に落ちてたのは
Windowsで動かしてたから?」って思うぐらいには良くできてる。
インテリセンス使えるようになったら、
これだけでもLinuxにする価値はあるかもしれません。
(そんな評価するのは私ぐらいでしょうが)
【Linuxの最新記事】