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自动化的主要内容,如果未能解决你的问题,请参考以下文章
使用 OLE,从 OpenOffice/LibreOffice Calc 文档中删除除第一个以外的所有工作表,而不使用工作表名称