powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java чтение таблицы OpenOffice
23 сообщений из 23, страница 1 из 1
Java чтение таблицы OpenOffice
    #39038564
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нахожу примеров работы с ОО толком. Где бы нарыть?
...
Рейтинг: 0 / 0
Java чтение таблицы OpenOffice
    #39038594
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скачал OO SDK
Там есть некие примеры, пока курю их, может по пути кто еще чего подкинет.
...
Рейтинг: 0 / 0
Java чтение таблицы OpenOffice
    #39038716
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подключил к проекту библиотеки 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
Java чтение таблицы OpenOffice
    #39038904
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использовать 32-битный JDK.
...
Рейтинг: 0 / 0
Java чтение таблицы OpenOffice
    #39039337
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя посмотрел - появился 64-битный SDK для Libreoffice. Раньше не было. Если в программе используется 64-битный JDK, то надо использовать и 64-битный SDK. 32-битный SDK не будет работать в 64-битном JDK.
...
Рейтинг: 0 / 0
Java чтение таблицы OpenOffice
    #39039679
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan M , к сож. для ОО не нашел 64х сдк для Win:
http://openoffice.apache.org/downloads.html
...
Рейтинг: 0 / 0
Java чтение таблицы OpenOffice
    #39039682
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зато действительно поставил х64 LibreOffice, который нормально читает ods (OO).
Нарыть бы теперь инфу по работе с Libre из Java )
...
Рейтинг: 0 / 0
Java чтение таблицы OpenOffice
    #39039711
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если программный интерфейс и отличается, то мало. Поэтому думаю можно использовать документацию от OpenOffice SDK.
...
Рейтинг: 0 / 0
Java чтение таблицы OpenOffice
    #39039809
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Java чтение таблицы OpenOffice
    #39039870
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Прицепил к проекту библиотеку LibreOffice х64 - заработало, документ открывается, все гуд )
...
Рейтинг: 0 / 0
Java чтение таблицы OpenOffice
    #39039952
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понятно теперь, как закрыть открытый для чтения файл.
В примерах вижу только
Код: java
1.
2.
3.
         finally {
             System.exit(0);
         }


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

пример 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
Java чтение таблицы OpenOffice
    #39040150
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS2 - при System.exit(0) - OpenOffice остается висеть в памяти )
Библиотека, ссылку на которую я дал выше, позволяет работать с документами ODF без наличия на рабочем месте OpenOffice, LibreOffice и пр. подобных программ. Это наподобие Apache POI для Microsoft Office.
...
Рейтинг: 0 / 0
Java чтение таблицы OpenOffice
    #39040185
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрел в своей программе - у меня так и сделано, как в приведённом примере.
...
Рейтинг: 0 / 0
Java чтение таблицы OpenOffice
    #39040395
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Java чтение таблицы OpenOffice
    #39040458
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan M , попробовал закрыть, файл закрывается, а LibreOffice все равно остается висеть в диспетчере в фоновых процессах, но при этом, если открывать еще документы, то кол-во не увеличивается, при этом, если открыть и закрыть документ руками, LOffice в памяти не висит после этого.
...
Рейтинг: 0 / 0
Java чтение таблицы OpenOffice
    #39040584
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Java чтение таблицы OpenOffice
    #39040591
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS2. Прицепил к проекту odfdom-0.8.7.jar и simple-odf-0.6.6.jar, указал путь к скачанной xerces-2_11_0 (возможно оттуда надо тоже просто какой-то jar прицепить)

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

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


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