创建一个 libreoffice text-based 数据源并使用 java 设置设置
Create a libreoffice text-based datasource and set settings with java
我需要在 Java 中创建一个 LibreOffice Text-based-Datasource。我的需求是向用户提供一个包含 header 行和 n-many 值行的 .csv 文件。此 csv 文件是执行邮件合并作业的数据源。如果我使用用于创建新数据库的 LibreOffice 向导手动创建数据源,则邮件合并作业的执行已经完美无缺。
在我的环境中,我无法为每个使用该应用程序的用户创建一个数据库。
我已经能够创建新数据源并将其注册到以下代码示例
XSingleServiceFactory service = UnoRuntime.queryInterface(XSingleServiceFactory.class,
msf.createInstance("com.sun.star.sdb.DatabaseContext"));
Object datasourceObject = service.createInstance();
XNamingService namingService = UnoRuntime.queryInterface(XNamingService.class, service);
XDocumentDataSource datasource = UnoRuntime.queryInterface(XDocumentDataSource.class, datasourceObject);
XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, datasource.getDatabaseDocument());
XModel model = UnoRuntime.queryInterface(XModel.class, datasource.getDatabaseDocument());
store.storeAsURL("file:///C:/tmp/1.odb", model.getArgs());
namingService.registerObject("NewDataSourceName", datasource);
XPropertySet datasourceProperties = UnoRuntime.queryInterface(XPropertySet.class, datasource);
csvPath = "C:/tmp/";
datasourceProperties.setPropertyValue("URL", "sdbc:flat:" + csvPath);
store.store();
执行此代码后,我在 C:/tmp/ [=16] 中有一个名为 1.odb 的文件=]
现在 LibreOffice 中也注册了一个 "NewDataSourceName" 数据源。
问题是此数据源不使用同样位于 C:/tmp/ 的 .csv 文件。
发生这种情况是因为我的 java 程序使用以下设置保存了数据源
现在我可以 select 第二个复选框(逗号分隔 value-Dateien (*.csv) 并将字段分隔符从“,”更改为“;" 和 1.odb 将被正确配置。
我在谷歌上搜索了很多,找到了一些 non-java 解决方案来在创建数据源时设置设置,例如
::odbSource:Settings:setPropertyValue("Extension" , "csv")
::odbSource:Settings:setPropertyValue("HeaderLine" , TRUE)
::odbSource:Settings:setPropertyValue("FieldDelimiter" , ";")
::odbSource:Settings:setPropertyValue("StringDelimiter" , '"')
::odbSource:Settings:setPropertyValue("DecimalDelimiter" , ".")
::odbSource:Settings:setPropertyValue("ThousandDelimiter", "")
有人知道我如何在 java 内设置此设置吗?
此致
所以在多次阅读 LibreOffice 之后 API 我找到了正确的方法。
它是如此简单,我仍然不敢相信这对我有用。
这是相关的行
XSingleServiceFactory service = UnoRuntime.queryInterface(XSingleServiceFactory.class,
msf.createInstance("com.sun.star.sdb.DatabaseContext"));
Object datasourceObject = service.createInstance();
XDocumentDataSource datasourceDocument =
UnoRuntime.queryInterface(XDocumentDataSource.class, datasourceObject);
XPropertySet datasourceProperties =
UnoRuntime.queryInterface(XPropertySet.class, datasourceObject);
XPropertySet datasourceSettings =
UnoRuntime.queryInterface(XPropertySet.class,
datasourceProperties.getPropertyValue("Settings"));
datasourceSettings.setPropertyValue("Extension", "csv");
datasourceSettings.setPropertyValue("FieldDelimiter", ";");
现在我的 .odb 文件具有正确的设置,我可以进行邮件合并。
我需要在 Java 中创建一个 LibreOffice Text-based-Datasource。我的需求是向用户提供一个包含 header 行和 n-many 值行的 .csv 文件。此 csv 文件是执行邮件合并作业的数据源。如果我使用用于创建新数据库的 LibreOffice 向导手动创建数据源,则邮件合并作业的执行已经完美无缺。
在我的环境中,我无法为每个使用该应用程序的用户创建一个数据库。
我已经能够创建新数据源并将其注册到以下代码示例
XSingleServiceFactory service = UnoRuntime.queryInterface(XSingleServiceFactory.class,
msf.createInstance("com.sun.star.sdb.DatabaseContext"));
Object datasourceObject = service.createInstance();
XNamingService namingService = UnoRuntime.queryInterface(XNamingService.class, service);
XDocumentDataSource datasource = UnoRuntime.queryInterface(XDocumentDataSource.class, datasourceObject);
XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, datasource.getDatabaseDocument());
XModel model = UnoRuntime.queryInterface(XModel.class, datasource.getDatabaseDocument());
store.storeAsURL("file:///C:/tmp/1.odb", model.getArgs());
namingService.registerObject("NewDataSourceName", datasource);
XPropertySet datasourceProperties = UnoRuntime.queryInterface(XPropertySet.class, datasource);
csvPath = "C:/tmp/";
datasourceProperties.setPropertyValue("URL", "sdbc:flat:" + csvPath);
store.store();
执行此代码后,我在 C:/tmp/ [=16] 中有一个名为 1.odb 的文件=]
现在 LibreOffice 中也注册了一个 "NewDataSourceName" 数据源。
问题是此数据源不使用同样位于 C:/tmp/ 的 .csv 文件。
发生这种情况是因为我的 java 程序使用以下设置保存了数据源
现在我可以 select 第二个复选框(逗号分隔 value-Dateien (*.csv) 并将字段分隔符从“,”更改为“;" 和 1.odb 将被正确配置。
我在谷歌上搜索了很多,找到了一些 non-java 解决方案来在创建数据源时设置设置,例如
::odbSource:Settings:setPropertyValue("Extension" , "csv")
::odbSource:Settings:setPropertyValue("HeaderLine" , TRUE)
::odbSource:Settings:setPropertyValue("FieldDelimiter" , ";")
::odbSource:Settings:setPropertyValue("StringDelimiter" , '"')
::odbSource:Settings:setPropertyValue("DecimalDelimiter" , ".")
::odbSource:Settings:setPropertyValue("ThousandDelimiter", "")
有人知道我如何在 java 内设置此设置吗?
此致
所以在多次阅读 LibreOffice 之后 API 我找到了正确的方法。
它是如此简单,我仍然不敢相信这对我有用。 这是相关的行
XSingleServiceFactory service = UnoRuntime.queryInterface(XSingleServiceFactory.class,
msf.createInstance("com.sun.star.sdb.DatabaseContext"));
Object datasourceObject = service.createInstance();
XDocumentDataSource datasourceDocument =
UnoRuntime.queryInterface(XDocumentDataSource.class, datasourceObject);
XPropertySet datasourceProperties =
UnoRuntime.queryInterface(XPropertySet.class, datasourceObject);
XPropertySet datasourceSettings =
UnoRuntime.queryInterface(XPropertySet.class,
datasourceProperties.getPropertyValue("Settings"));
datasourceSettings.setPropertyValue("Extension", "csv");
datasourceSettings.setPropertyValue("FieldDelimiter", ";");
现在我的 .odb 文件具有正确的设置,我可以进行邮件合并。