首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >openoffice自动化

openoffice自动化
EN

Stack Overflow用户
提问于 2014-01-04 18:08:13
回答 1查看 1.9K关注 0票数 0

我试图通过来自c#应用程序的ole自动化来自动化openoffice。我要打开一份文件再保存一次。代码大部分是从Apache网站下载的,修改很少。

代码语言:javascript
复制
    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示例进行比较,以找到关于对象模型的薄弱线索。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-12 13:10:35

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

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

必须在系统上安装Openoffice,然后在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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20924695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档