はじめに
を参考にさせて頂きました。圧倒的感謝……!
環境
- Windows 10 Home (64bit)
- Visual Studio Community 2019
サンプルソース
JScript
libreoffice.js
{varfactory=WScript.CreateObject("com.sun.star.ServiceManager");varloader=factory.createInstance("com.sun.star.frame.Desktop");vardoc=loader.loadComponentFromURL("file:///C:/data/test.ods","_blank",0,[]);varsheets=doc.getSheets();varsheet=sheets.getByName("Sheet1");varcell=sheet.getCellByPosition(0,0);cell.setFormula("hello, world");}
VB.NET
Module1.vb
Module Module1
Sub Main()
Dim factory, loader, doc As Object
Dim d(0) As Object
factory = CreateObject("com.sun.star.ServiceManager")
loader = factory.createInstance("com.sun.star.frame.Desktop")
doc = loader.loadComponentFromURL("private:factory/scalc", "_blank", 0, d)
Dim sheets, sheet, cell As Object
sheets = doc.getSheets()
sheet = sheets.getByName("Sheet1")
cell = sheet.getCellByPosition(1, 1)
cell.setFormula("hello, world")
End Sub
End Module
C#
LibreOffice SDKを使う方法もあるが、使わない方法もある。
Program.cs
usingSystem;usingSystem.Reflection;usingSystem.Runtime.InteropServices;namespaceConsoleApp1{classProgram{staticvoidMain(string[]args){vart=Type.GetTypeFromProgID("com.sun.star.ServiceManager");varfactory=Activator.CreateInstance(t);object[]a={"com.sun.star.frame.Desktop"};varloader=factory.GetType().InvokeMember("createInstance",BindingFlags.InvokeMethod,null,factory,a);object[]b={};object[]c={"private:factory/scalc","_blank",0,b};vardoc=loader.GetType().InvokeMember("loadComponentFromURL",BindingFlags.InvokeMethod,null,loader,c);Marshal.ReleaseComObject(factory);}}}