やりたくないのですが、やるしか選択肢が無さそうなので取り組んでます。
念の為、"OpenOffice Calc" はExcelな奴です。
新規のドキュメントを作成し、元のドキュメントのシートを丸ごと
新規ドキュメントにコピペしたいだけです・・・。
新規ドキュメントの作成は、マクロの記録を記録してみましたが
謎が多すぎてわからない為、こちらを参考にしました。
StarDesktop - Apache OpenOffice Wiki
サンプルコードはwriter(Wordな奴)なのですが、カンで何とかなりました。
コピー元のドキュメントは "ThisComponent" で取得出来る事は分かっていたのですが
ペースト先のドキュメントの取得が分かりませんでした。
最初はこんな感じで取得出来るだろうと思ってました。
' エントリーポイント sub Main() dim macroDoc macroDoc = ThisComponent.CurrentController.Frame dim newDoc newDoc = initDoc() showMsg(getDocInfo(macroDoc) & Chr(13) & Chr(10) & getDocInfo(newDoc)) end sub ' ドキュメント情報 private function getDocInfo(byval doc) getDocInfo = doc.Title & " : " & doc.ImplementationName end function ' 新規Calcドキュメントの作成 private function initDoc() Dim Dummy() Dim Url As String Dim Doc As Object Url = "private:factory/scalc" initDoc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, Dummy()) end function 'Msgboxの表示 Private Function showMsg(byval msg As String, optional button As Integer = 0) showMsg = Msgbox(msg , button , "") End Function
大文字小文字がかなり混在していますが、気持ちが薄いので勘弁してください。
(言語的には大文字小文字の違いは無視です)
initDoc関数で新規ドキュメントを作成しているんのですが、StarDesktop.load~の
戻り値がてっきりドキュメントだろうと思っていたのですが違いました。
各ドキュメントのタイトルと型を表示させているのですが、型が異なります。
・・・そもそもドキュメント名が取得出来ない為、これがドキュメントなのかも
疑問のままですが、知らなくても生きていけそうなので無視します。
試しているうちに同一の方で取得できる方法を見つけました。
initDoc関数をこの様に修正しました。
private function initDoc() Dim Dummy() Dim Url As String Dim Doc As Object Url = "private:factory/scalc" StarDesktop.loadComponentFromURL(Url, "_blank", 0, Dummy()) initDoc = StarDesktop.ActiveFrame end function
StarDesktopはOpenOfficeの王様の様です。
新規ドキュメントを作成した際、出来上がったドキュメントはアクティブになっているので
そのアクティブなドキュメントを取得すると言う、信じがたい方法ですが
同じ型のものが取得出来ました。
さっさと終わらせて、忘れたい技術。