Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Java чтение таблицы OpenOffice / 23 сообщений из 23, страница 1 из 1
28.08.2015, 15:10
    #39038564
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Не нахожу примеров работы с ОО толком. Где бы нарыть?
...
Рейтинг: 0 / 0
28.08.2015, 15:26
    #39038594
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Скачал OO SDK
Там есть некие примеры, пока курю их, может по пути кто еще чего подкинет.
...
Рейтинг: 0 / 0
28.08.2015, 17:05
    #39038716
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Подключил к проекту библиотеки OpenOffice (juh.jar, jurt.jar, ridl.jar, unoil.jar), как толкуют здесь , пытаюсь достучаться, взяв кусочек кода из SDK:
Код: java
1.
2.
3.
4.
            XComponentContext xRemoteContext = Bootstrap.bootstrap();
            if (xRemoteContext == null) {
                System.err.println("ERROR: Could not bootstrap default Office.");
            }



Ругаецо:
C:\Program Files (x86)\OpenOffice 4\program\jpipe.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
Win x64, NetBeans 8.0.2, а OpenOffice 32-х разрядный походу.
Чодалатьто теперь? )
...
Рейтинг: 0 / 0
28.08.2015, 21:29
    #39038904
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Использовать 32-битный JDK.
...
Рейтинг: 0 / 0
30.08.2015, 15:26
    #39039337
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Хотя посмотрел - появился 64-битный SDK для Libreoffice. Раньше не было. Если в программе используется 64-битный JDK, то надо использовать и 64-битный SDK. 32-битный SDK не будет работать в 64-битном JDK.
...
Рейтинг: 0 / 0
31.08.2015, 13:17
    #39039679
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Partisan M , к сож. для ОО не нашел 64х сдк для Win:
http://openoffice.apache.org/downloads.html
...
Рейтинг: 0 / 0
31.08.2015, 13:21
    #39039682
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Зато действительно поставил х64 LibreOffice, который нормально читает ods (OO).
Нарыть бы теперь инфу по работе с Libre из Java )
...
Рейтинг: 0 / 0
31.08.2015, 13:51
    #39039711
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Если программный интерфейс и отличается, то мало. Поэтому думаю можно использовать документацию от OpenOffice SDK.
...
Рейтинг: 0 / 0
31.08.2015, 16:01
    #39039809
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
...
Рейтинг: 0 / 0
31.08.2015, 17:03
    #39039870
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Да. Прицепил к проекту библиотеку LibreOffice х64 - заработало, документ открывается, все гуд )
...
Рейтинг: 0 / 0
31.08.2015, 18:13
    #39039952
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Не понятно теперь, как закрыть открытый для чтения файл.
В примерах вижу только
Код: java
1.
2.
3.
         finally {
             System.exit(0);
         }


Но 1 - мне ну нужно выходить из программы
2 - при System.exit(0) - OpenOffice остается висеть в памяти )
...
Рейтинг: 0 / 0
31.08.2015, 23:41
    #39040089
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Не помню, что я делал для закрытия (потом посмотрю), но команда закрытия есть:

пример DocumentSaver

там фрагмент:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
com.sun.star.util.XCloseable xCloseable = UnoRuntime.queryInterface(com.sun.star.util.XCloseable.class,
                                      oDocToStore );

            if (xCloseable != null ) {
                xCloseable.close(false);
            } else
            {
                com.sun.star.lang.XComponent xComp = UnoRuntime.queryInterface(
                    com.sun.star.lang.XComponent.class, oDocToStore );
                xComp.dispose();
            }
            System.out.println("document closed!");
            System.exit(0);
...
Рейтинг: 0 / 0
01.09.2015, 08:23
    #39040150
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
JDS2 - при System.exit(0) - OpenOffice остается висеть в памяти )
Библиотека, ссылку на которую я дал выше, позволяет работать с документами ODF без наличия на рабочем месте OpenOffice, LibreOffice и пр. подобных программ. Это наподобие Apache POI для Microsoft Office.
...
Рейтинг: 0 / 0
01.09.2015, 09:16
    #39040185
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
посмотрел в своей программе - у меня так и сделано, как в приведённом примере.
...
Рейтинг: 0 / 0
01.09.2015, 12:02
    #39040395
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Partisan M , спасибо, оно.
GarrickБиблиотека, ссылку на которую я дал выше, позволяет работать с документами ODF без наличия на рабочем месте OpenOffice, LibreOffice и пр. подобных программ. Это наподобие Apache POI для Microsoft Office.
Классная штука, но пока не пойму что не так:
1. взял пример
2. Прицепил к проекту odfdom-0.8.7.jar и simple-odf-0.6.6.jar, указал путь к скачанной xerces-2_11_0 (возможно оттуда надо тоже просто какой-то jar прицепить)
3. Код из примера:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
package javaapplication32;

import java.net.URI;

import org.odftoolkit.simple.TextDocument;
import org.odftoolkit.simple.table.Cell;
import org.odftoolkit.simple.table.Table;
import org.odftoolkit.simple.text.list.List;

public class JavaApplication32 {
    public static void main(String[] args) throws Exception {
        TextDocument outputOdt;
        try {
            outputOdt = TextDocument.newTextDocument();

            // add image
            outputOdt.newImage(new URI("odf-logo.png"));

            // add paragraph
            outputOdt.addParagraph("Hello World, Hello Simple ODF!");

            // add list
            outputOdt.addParagraph("The following is a list.");
            List list = outputOdt.addList();
            String[] items = {"item1", "item2", "item3"};
            list.addItems(items);

            // add table
            Table table = outputOdt.addTable(2, 2);
            Cell cell = table.getCellByPosition(0, 0);
            cell.setStringValue("Hello World!");

            outputOdt.save("HelloWorld.odt");
        } catch (Exception e) {
            System.err.println("ERROR: unable to create output file.");
        }
    }    
}


Ошибка:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xerces/dom/DocumentImpl
...
Рейтинг: 0 / 0
01.09.2015, 12:47
    #39040458
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Partisan M , попробовал закрыть, файл закрывается, а LibreOffice все равно остается висеть в диспетчере в фоновых процессах, но при этом, если открывать еще документы, то кол-во не увеличивается, при этом, если открыть и закрыть документ руками, LOffice в памяти не висит после этого.
...
Рейтинг: 0 / 0
01.09.2015, 14:31
    #39040584
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
JDSОшибка:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xerces/dom/DocumentImpl
In this tutorial, you can build and run the application from the command line or IDE, such as Eclipse. Anyway, you need to download the following three jars, store them in the "lib" directory and add them into the classpatch.

Simple ODF 0.6.6.
ODFDOM 0.8.7.
The Apache Xerces 2.9.1 or higher version (download from Apache Xerces web site).

Building and Running

If you use Eclipse, you can just run this class as a Java Application. If you use command line, please complie code and run it with the following commands:

javac -cp lib/odfdom-java-0.8.7.jar:lib/simple-odf-0.6.6.jar HelloWorld.java
java -cp lib/odfdom-java-0.8.7.jar;lib/simple-odf-0.6.6.jar;lib/xercesImpl.jar;. HelloWorld
...
Рейтинг: 0 / 0
01.09.2015, 14:33
    #39040591
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
JDS2. Прицепил к проекту odfdom-0.8.7.jar и simple-odf-0.6.6.jar, указал путь к скачанной xerces-2_11_0 (возможно оттуда надо тоже просто какой-то jar прицепить)

Конечно нужно - xercesImpl.jar. А "путь к скачанной xerces..." не надо.
...
Рейтинг: 0 / 0
01.09.2015, 15:33
    #39040673
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Garrick , спасибо работает! )
...
Рейтинг: 0 / 0
07.09.2015, 16:03
    #39045086
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
Garrick , такой момент: Simple Java API for ODF довольно медленно читает файл.
Т.е. например апач POI читает, загружает файл 10тыс строк за 7 секунд - отличная скорость.
А Simple Java API for ODF те же 10тыс строк грузит 10 минут :( почти в 100 раз медленнее.
Жить можно, но разница ощутимая и хотелось бы быстрее конечно.
Обращаюсь поячеечно (как и в POI), позже попробую через cellRange.
...
Рейтинг: 0 / 0
07.09.2015, 18:26
    #39045253
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
CellRange тоже утомительно долго достает просто жуть как долго.
...
Рейтинг: 0 / 0
08.09.2015, 10:57
    #39045569
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
JDS,

POI умеет обрабатывать файлы в потоке, как SAX, а тут, как я понимаю, только DOM. Т.е. оно сначала всё грузит в память, а потом начинает с этим работать. Увеличить память для приложения пробовали (-Xms)?
...
Рейтинг: 0 / 0
08.09.2015, 11:39
    #39045616
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java чтение таблицы OpenOffice
GarrickPOI умеет обрабатывать файлы в потоке, как SAX, а тут, как я понимаю, только DOM. Т.е. оно сначала всё грузит в память, а потом начинает с этим работать. Увеличить память для приложения пробовали (-Xms)?
В том и дело, что грузит в память как-то сильно коряво (не оптимально), т.к. например читаем в CellRange по 1000 строк и потом читаем этот CellRange:
Строки Время загрузки в CellRange (сек) Время чтения из CellRange (сек) 0 — 1000 58 471001 — 2000 106 482001 — 3000 157 49
Т.е. время чтения каждой следующей порции в CellRange растет так, как если бы мы каждый раз читали файл с самого начала.
Да и чтение из памяти тоже на чтение 1000 строк в памяти тратить 50! секунд... Ну фиг знает...
Насчет увеличения памяти - итак пол гига вроде как процесс жрет (
В общем может что-то не так делаю, но работает как-то очень не оптимально имхо.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Java чтение таблицы OpenOffice / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]