C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

OpenOffice Calcの新規ドキュメントの作成と取得

やりたくないのですが、やるしか選択肢が無さそうなので取り組んでます。
念の為、"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~の
戻り値がてっきりドキュメントだろうと思っていたのですが違いました。
f:id:kandennti:20211209125022p:plain
各ドキュメントのタイトルと型を表示させているのですが、型が異なります。
・・・そもそもドキュメント名が取得出来ない為、これがドキュメントなのかも
疑問のままですが、知らなくても生きていけそうなので無視します。


試しているうちに同一の方で取得できる方法を見つけました。
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の王様の様です。
新規ドキュメントを作成した際、出来上がったドキュメントはアクティブになっているので
そのアクティブなドキュメントを取得すると言う、信じがたい方法ですが
同じ型のものが取得出来ました。
f:id:kandennti:20211209125740p:plain

さっさと終わらせて、忘れたい技術。