openoffice ole自动化

Posted

技术标签:

【中文标题】openoffice ole自动化【英文标题】:openoffice ole automation 【发布时间】:2014-01-04 18:08:13 【问题描述】:

我正在尝试通过来自 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# & OLE 的文档还不够丰富。所有文档都用 Java 编写,我不得不将 Java 与一些可用的 ole 示例进行比较,以找到有关对象模型的薄弱线索。

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

【问题讨论】:

与论坛网站不同,我们不使用“谢谢”、“任何帮助表示赞赏”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?. 好吧,像我这种很少发帖的人,可能会在一段时间后忘记这个行为代码,因为它和平时的礼仪不太一样,我会尽量记住的。 我希望有人能在这里提供帮助。如果我直接请回答过类似问题的人看一下我的问题,是否可以接受? 不,这是不可接受的。你应该假设那些人已经看到了你的问题,并决定不回答它。一个原因可能是您没有向我们提供完整的例外情况。请将其添加到您的问题中。 【参考方案1】:

我使用 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

【讨论】:

链接已失效,正如所料。现在很高兴看到几行示例代码..

以上是关于openoffice ole自动化的主要内容,如果未能解决你的问题,请参考以下文章

openoffice excel word 转换pdf

Centos6.9下安装OpenOffice 4.1.4

使用 OLE,从 OpenOffice/LibreOffice Calc 文档中删除除第一个以外的所有工作表,而不使用工作表名称

通过 OpenOffice/LibreOffice 在 .NET WPF 应用程序中预览 MSOffice 文件

Openoffice 中是不是可以实现单词自动化

OpenOffice 自动化 delphi