gpt4 book ai didi

java - 使用 OpenOffice SDK 创建数据源时抛出异常

转载 作者:太空宇宙 更新时间:2023-11-04 11:56:02 25 4
gpt4 key购买 nike

我有一个 C# 应用程序,可以与 MS Office 执行邮件合并(使用 Interop API)。我现在正在尝试让它支持开放式办公室。我想使用 OpenOffice SDK: http://www.openoffice.org/api/docs/common/ref/com/sun/star/text/MailMerge.html#Command

现在对我来说看起来不太清楚......

我设法让邮件合并代码正常工作。问题是我们需要在实际执行 MailMerge 之前创建一个“数据源”,而我在执行此操作时遇到了困难。

我可以在这里获取 Java 示例: https://wiki.openoffice.org/wiki/Documentation/DevGuide/Database/The_DataSource_Service

我需要将其转换为 C#。

我的困难是 Java 使用这个对象来执行它的转换:

XStorable store = ( XStorable)UnoRuntime.queryInterface(XStorable.class, xDs);

C# 中没有等效的东西。

我这样转换代码:

  public static void CreateDataSource(string dataSourceProvidedFilePath, string dataSourceSavedFilePath)
{
XComponentContext oStrap = uno.util.Bootstrap.bootstrap();
XMultiServiceFactory _rMSF = (XMultiServiceFactory)oStrap.getServiceManager();

// the XSingleServiceFactory of the database context creates new generic
// com.sun.star.sdb.DataSources (!)
// retrieve the database context at the global service manager and get its
// XSingleServiceFactory interface
XSingleServiceFactory xFac = (XSingleServiceFactory) _rMSF.createInstance("com.sun.star.sdb.DatabaseContext");
//(XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class, _rMSF.createInstance("com.sun.star.sdb.DatabaseContext"));

// instantiate an empty data source at the XSingleServiceFactory
// interface of the DatabaseContext
Object xDs = xFac.createInstance();

// register it with the database context
XNamingService xServ = (XNamingService)xFac;
//(XNamingService)UnoRuntime.queryInterface(XNamingService.class, xFac);

XStorable store = ( XStorable) xDs;
//( XStorable)UnoRuntime.queryInterface(XStorable.class, xDs);

XModel model =( XModel) xDs;
//( XModel)UnoRuntime.queryInterface(XModel.class, xDs);

//on détermine le fichier ou sera sauvegardée la data source
string dataSourcePathURL = Path.Combine(Path.GetDirectoryName(dataSourceProvidedFilePath), dataSourceSavedFilePath + ".odb").ConvertToOpenOfficeURL();
store.storeAsURL(/*"file:///c:/test.odb"*/dataSourcePathURL,model.getArgs());
xServ.registerObject("NewDataSourceName", xDs);

// setting the necessary data source properties
XPropertySet xDsProps = (XPropertySet)xDs;
//(XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xDs);
// Adabas D URL
xDsProps.setPropertyValue("URL", new uno.Any("sdbc:adabas::MYDB1"));

// force password dialog
//xDsProps.setPropertyValue("IsPasswordRequired", new Boolean(true));

// suggest dsadmin as user name
xDsProps.setPropertyValue("User", new uno.Any("dsadmin"));
store.store();
}

一些 Actor 工作正常:

XNamingService xServ = (XNamingService)xFac;
//(XNamingService)UnoRuntime.queryInterface(XNamingService.class, xFac);

但是其他一些转换会抛出异常:

XStorable 存储 = ( XStorable) xDs; //( XStorable)UnoRuntime.queryInterface(XStorable.class, xDs);

->

Unable to cast transparent proxy to type 'unoidl.com.sun.star.frame.XStorable'.

有没有办法将此代码正确转换为 C#?

否则,您是否知道任何其他资源展示如何在 Java 中创建 Open Office 数据源?

谢谢

最佳答案

首先,我尝试使用 C# 并遇到了与您描述的相同的错误。

然后我使用 Java 尝试了该示例,最终得到 XStorable 的空值。所以我认为您的问题不是由于 C# 造成的,而是因为由于某种原因未正确创建空数据源。

Create a libreoffice text-based datasource and set settings with java ,海报似乎已经成功了,所以我不确定我尝试时出了什么问题。

这段打印数据源的代码对我有用:https://wiki.openoffice.org/wiki/Documentation/DevGuide/Database/Data_Sources_in_OpenOffice.org_API .

关于java - 使用 OpenOffice SDK 创建数据源时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41383380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com