openoffice ole自动化

时间:2014-01-04 18:08:13

标签: c# automation ole openoffice-calc

我正在尝试从c#应用程序中通过ole自动化自动化openoffice calc。我正在打开文档并再次保存。代码主要是从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文件。

事实上关于c#& amp; OLE不够丰富。所有文档都是用Java编写的,我不得不将Java与几个可用的样本进行比较,以找到关于对象模型的弱线索。

我希望能够在保存之前修改单元格的值,如果您能指导我这个,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我使用c#SDK而不是OLE解决了我的问题,所以这不是关于OLE问题的完全答案。

我建议使用SDK,因为您可以从官方API的预定义对象模型中受益,而在com interop中没有这样的指南。

您必须在系统上安装Openoffice SDK,然后在您的c#项目中添加对此目录中所有dll的引用:

... \ OpenOffice 4 \ sdk \ cli \ cli_basetypes.dll

这些页面包含使用c#:

API的实际示例

http://suite101.com/a/creating-an-openoffice-calc-document-with-c-a124112(404) http://www.oooforum.org/forum/viewtopic.phtml?t=107055