Создайте текстовый источник данных libreoffice и настройте параметры с помощью Java

Мне нужно создать LibreOffice Text-based-Datasource в Java. Мне нужно предоставить пользователю файл.csv со строкой заголовка и n-многими значениями. Этот 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();

После выполнения этого кода у меня есть файл с именем 1.odb в C:/tmp/

Теперь есть также источник данных "NewDataSourceName", зарегистрированный в LibreOffice. Это недавно созданный источник данных

Проблема в том, что этот источник данных не использует файл.csv, который также находится в C:/tmp/.

Это происходит потому, что моя Java-программа сохранила хранилище данных со следующими настройками Настройки созданного файла 1.odb

Теперь я мог бы установить 2-й флажок (значение с разделением запятыми-Dateien (*.csv) и изменить значение поля delimiter с "," на ";", и 1.odb будет правильно настроен.

Я много гуглил и нашел некоторые не 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?

Sincerly.

1 ответ

Решение

Так что после многократного чтения API LibreOffice я нашел правильный способ сделать это.

Это так просто, что я до сих пор не могу поверить, что это сработало для меня. Это соответствующие строки

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 имеет правильные настройки, и я могу выполнить слияние.

Другие вопросы по тегам