Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
krv
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 328
#1

OpenOffice чтение документа xls - C++ Builder

01.12.2014, 11:48. Просмотров 1045. Ответов 5
Метки нет (Все метки)

В данной теме мне помогли с файлом DOC(X)
http://www.cyberforum.ru/cpp-builder/thread1265514.html
Там спасибо

Не по теме:

Кстати, если можно - переименуйте ту тему с заглавием типа "Считать текст doc(x) используя OpenOffice"

А как прочитать .xls файл используя OpenOffice?
А конкретно интересует метод чтения данных из ячейки
То есть открыть документ, прочитать ячейку, закрыть документ..
На текущем этапе код
C++
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
39
String LoadOpenOffice(String nf)
{
  Variant App;
  Variant Desktop;
  String s;
  try {
    try {
      App = Variant::CreateObject("com.sun.star.ServiceManager");
      Desktop = App.OleFunction("createInstance", WideString("com.sun.star.frame.Desktop"));
    } catch (...) {
      return "";
    }
    int Bounds[2] = {0, 0};
    Variant OpenParams = VarArrayCreate(Bounds, 1, varVariant);
    Variant MyStruct = App.OleFunction("Bridge_GetStruct",WideString("com.sun.star.beans.PropertyValue"));
    MyStruct.OlePropertySet("name", WideString("Hidden")); // Устанавливаем атрибут "Скрытый"
    MyStruct.OlePropertySet("value", true);
 
    OpenParams.PutElement(MyStruct, 0);
    // Открытие файла
    Variant ODocument = Desktop.OleFunction("LoadComponentFromURL",
        WideString("file://localhost/"+nf), WideString("_blank"), 0,OpenParams); // И открываем документ с этим атрибутом
 
    // Делаем все, что нужно
//?
    // Закрываем документ
    ODocument.OleFunction("close", true);
    ODocument = Unassigned();
 
    // И завершаем Десктоп
    Desktop.OleFunction("terminate");
    Desktop = Unassigned();
  } catch (...) {
    Desktop.OleFunction("terminate");
    Desktop = Unassigned();
    return "";
  }
    return s;
}
Вызывает except на этапе открытия....
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2014, 11:48
Я подобрал для вас темы с готовыми решениями и ответами на вопрос OpenOffice чтение документа xls (C++ Builder):

Чтение xls/xml.
У меня есть файл xls 30000 записей. Читаю литературу везде написано, что...

Чтение и сохранение информации из .xls (Excel)
Всем еще раз привет) у кого есть какие идеи, как при помощи OLE открыть файлик,...

Чтение форматированного текста из документа MS Word
Читаю текст из файла *.doc. Текст внутри файла имеет форматирование (шрифты,...

Автоматизация OpenOffice 3.2
Доброго времени суток. Необходимо прикрутить OpenOffice 3.2 API к VS 2008 или...

Builder и OpenOffice
Добрый день.Нужно в ячейку таблицы вставить несколько рисунков из буфера обмена...

OpenOffice использование шаблонов
Доброго времени суток господа знатоки, подскажите пожалуйста, как отправить...

5
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25622 / 17175 / 6830
Регистрация: 22.10.2011
Сообщений: 30,369
Записей в блоге: 6
01.12.2014, 12:10 #2
Цитата Сообщение от krv Посмотреть сообщение
Вызывает except на этапе открытия....
Вот ты будешь смеяться, но никакого except-а нет, xls-файл прекрасно открывается. Передавай правильный (и полный) путь к xls-файлу...
1
krv
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 328
01.12.2014, 12:43  [ТС] #3
Виноват.
Действительно туплю. Оказалось Calc банально не установлен.. Writer ставил, а Calc почему-то пропустил...

Остался вопрос - какая ф-ция дает доступ к ячейке?...
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25622 / 17175 / 6830
Регистрация: 22.10.2011
Сообщений: 30,369
Записей в блоге: 6
01.12.2014, 12:50 #4
Лучший ответ Сообщение было отмечено krv как решение

Решение

Здесь я показывал: http://www.cyberforum.ru/delphi-begi...ml#post5005098 , на Билдер сам переведи
0
krv
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 328
02.12.2014, 11:44  [ТС] #5
Всё таки не смог подобрать имя для свойства.
А главное - не знаю где смотреть.. Поэтому и спрашиваю...
Вот функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
String __fastcall TForm1::fromOOCell(int Row, int Column)
{
  Variant Sheet;
  Variant Cell;
  Variant Under;
  try{
    Sheet = ODocument.OlePropertyGet("Sheets",0);
    Cell = Sheet.OlePropertyGet("CellByPosition",Row, Column);//(1)
    Cell = Sheet.OlePropertyGet("Cells",Row, Column);//(2)
    String s = Cell;
    Under = Cell.OlePropertyGet("Font").OlePropertyGet("Underline");//(3)
    int UnderRes = Under;
    return s;
  } catch(...) {
    Application->MessageBox(L"Ошибка чтения ячейки OpenOffice Calc!",L"Ошибка",MB_OK+MB_ICONERROR);
  }
  return "";
}
Аналогично Делфи-строки такие:
Delphi
1
2
  Sheet := Document.getSheets.getByIndex(0);
  Cell := Sheet.getCellByPosition(5, 2); // 5 столбец 2 строка --- вот это перевести
Что написать вместо (1) или (2) - эти варианты не срабатывают
И будет ли правильной строка (3) ? А то я к ней дойти не могу...
В общем случае интересует строковое значение ячейки и подчеркнут ли текст в ней каким либо образом.
Константы подчеркивания разберу потом на примерах, просто знаю что 0 - никак не подчеркнуто
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25622 / 17175 / 6830
Регистрация: 22.10.2011
Сообщений: 30,369
Записей в блоге: 6
02.12.2014, 12:07 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// ...
        Variant ODocument = Desktop.OleFunction("LoadComponentFromURL",
            WideString("file://localhost/" + nf), WideString("_blank"), 0,
            OpenParams); // И открываем документ с этим атрибутом
 
        Variant OTables = ODocument.OleFunction("getSheets");
        Variant OTable = OTables.OleFunction("getByIndex", 0);
 
        Variant oCell = OTable.OleFunction("getCellByPosition", 1, 0); // 0 строка, 1 столбец
        Variant oCellCursor = oCell.OleFunction("getText").OleFunction("createTextCursor");
        WideString txt = oCell.OleFunction("getText").OleFunction("getString");
 
        ShowMessage(txt); // Вывод
 
        // Закрываем документ
// ...
1
02.12.2014, 12:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2014, 12:07
Привет! Вот еще темы с решениями:

Создать предзагрузчик OpenOffice
Ситуация: юзер жалуется, что у него не открывается документ. В диспетчере...

Рисунок в OpenOffice Writer
Добрый вечер, форумчане. Нужно вставить изображение в OpenOffice Writer, задать...

Builder и таблица OpenOffice
Всем привет. Нужно установить ширину столбца таблицы Writer. На VBA код такой:...

Трудности с работой openoffice/
Привет Всем.В чера произошла одна проблема. У меня есть код, который заполняет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru