Я пытаюсь автоматизировать расчет openoffice с помощью автоматизации ole из приложения С#. Я открываю документ и снова сохраняю его. Код в основном загружается с веб-сайта Apache с небольшими изменениями.
private void OpenSave(string FileAddress)//format: "file:///C:/Untitled1.ods"
{
Type t_OOo= Type.GetTypeFromProgID("com.sun.star.ServiceManager");
Object objServiceManager= System.Activator.CreateInstance(t_OOo);
// arguments for IDispatch-call
Object[] parameters = new Object[1];
parameters[0] = "com.sun.star.frame.Desktop";
// arguments for document
Object[] args = new Object[4];
//args[0] = "private:factory/scalc";
args[0] = FileAddress;
args[1] = "_blank";
args[2] = 0;
args[3] = new Object[] { };
Object desktop;
Object doc;
try
{
desktop = (Object)t_OOo.InvokeMember("createInstance",BindingFlags.InvokeMethod, null,objServiceManager, parameters);
doc = desktop.GetType().InvokeMember("loadComponentFromUrl",BindingFlags.InvokeMethod, null, desktop, args);
if (doc == null)
{/*Error*/ }
object[] O = new object[3];
O[0] = FileAddress;
O[1] = new PropertyValue();
((PropertyValue)O[1]).Name = "";
((PropertyValue)O[1]).Value = true;
O[2] = new Object[] { };
desktop.GetType().InvokeMember("storeAsURL", BindingFlags.InvokeMethod, null, desktop,O);
}
catch (Exception e1)
{
Console.WriteLine(e1);
}
Последняя строка кода (saveTOURL) всегда вызывает исключение "Неизвестное имя" (точное исключение: [System.Runtime.InteropServices.COMException] = {"Неизвестное имя. (Исключение из HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))"}). Может ли кто-нибудь помочь? Учтите, что в основном я открываю xls-файлы с помощью этой программы.
На самом деле документация по С# и OLE недостаточно богата. Вся документация находится на Java, и мне пришлось сравнить Java с несколькими доступными образцами ole, чтобы найти слабую подсказку об объектной модели.
Я хочу иметь возможность изменить значение ячейки перед сохранением, я был бы признателен, если бы вы могли помочь мне и в этом.