Microsoft Office(Excel)のライセンスが、ややこしいので、
OpenOffice(Calc)を検討。
※ライセンス問題については、後述
***
安牌を取るなら、既に出来上がっているExcelで良かったんだけど、
テストは?、ということ、これからの部分。
なので、Calcが登場するチャンスはまだあったわけで、
Excelで出来たことを、Calcで
どのように処理するか、を、まとめました。
OLE
Excelは、Delphiにコンポーネントがあるのと、
デモプログラムなんかで、割りとカンタンにOLE制御可。
Calcの唯一の資料は、
http://edn.embarcadero.com/jp/article/40857/images/40857/b5.pdf
Excel OLEでも同じだが、CalcをOLE制御するにあたり、
それ以降は、他の言語の解説を流用して、記述するしかない。
(言語毎の書き方が違うだけで、基本同じ)
非表示(パラメーターを指定して、ファイル読み込む)
vP := VarArrayCreate([0, 0], varVariant); vP[0] := vOpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue'); vP[0].Name := 'Hidden'; // 非表示で起動 vP[0].Value := true; vStarDesktop.loadComponentFromURL('file:///' + xls_path, '_blank', 0, vP);
保存せずに終了(変更していない、ことにする)
vDoc.Modified := False; vStarDesktop.terminate;
とか。
ExcelをCalcに移植
Calcは、
セルの指定が違う(左Excel/右Calc)
_設定!B1 >> _設定.B1
など、
一部変更が必要だったり、対応していない機能があるものの、
xlsのほとんど読み込める。
マクロは、ほとんど書き直す必要があるみたいだけど、
今回、マクロは多用していないが、
困ったことは、
Excelだとテキストボックスに「=B1」などと、
他のセルの値を指定できるのに対し、
Calsは出来ない・・・
テキストボックスをOLEで制御するしかないか?と、
いろいろ探したけど、見つからず。
途中で、テキストボックスの値を別のテキストボックスに書き出すサンプルを発見。
http://oooug.jp/faq/index.php?faq%2F5%2F20
ここに、デモがあったので、
DLして必要箇所を移植してみたけど、どうも動かず、
わかったことは、
フォーム・テキストボックスと
テキストボックスと、2種類ある!
デモでは、前者を使い、
Excelからの移植では、後者を使っていた。
プロパティーでセルの値を指定できたので、まず、1つ解決。
次に、印刷に反映できるか?、
だったけど、これも問題なく、基本的な移植が完了した!
そして残すは、
耐久テストだけ!
***
MsOfficeと、OpenOfficeのライセンス
ライセンス単位で、2つのPCにインストール出来るので、
3万円だとしても、1台あたり、半値で2台使える!
わけではなく、
ライセンス上、二人が使うことは出来ない。
※あくまで、サブ機にも入れていいよ、程度で、
2台に入れるのに、6万円は高いだろうという、配慮
多くの人が、無視して、二人で使っているだろうけど、
流石に、お客さんに推し進めることは出来ないため、
お客さんが、正当にお金を払ってくれればいいのですが、
どうせ、印刷するだけなので、
無駄でもあり、負担にもなります。
ということで、今回、ビジネスでも利用可能な
無料のOpenOfficeに移植した次第です。
参考 > OpenOfficeのライセンスについて
http://forest.watch.impress.co.jp/docs/serial/moritalk/536026.html
今回使ったのは、Apache OpenOfficeなので、Apache Licenseになり、
LibreOfficeは、GNU Lesser General Public Licenseとなり、
※共に、同じOpenOfficeの派生系
開発レベルでいうと、
いろいろと問題があるけど、
個人・団体利用、商用・非商用に関係なく
無償利用が許可されている。
が、寄付をさせて頂く予定。