Создайте текстовый источник данных 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-программа сохранила хранилище данных со следующими настройками
Теперь я мог бы установить 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 имеет правильные настройки, и я могу выполнить слияние.