Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Импорт таблицы OpenOffice в StringGrid


Страницы:   1 2

Кирилов М.Л. ©   (2014-05-27 12:15:00) 

Здравствуйте! Гуглю, гуглю все бестолку.. Не могу найти нигде простого примера кода по сабжу. Помогите пожалуйста...


Кирилов М.Л.   (2014-05-31 18:18:00) [1]

Довел до рабочего состояния:

function ooCreateValue(p : variant; ooName: string; ooData: variant): variant;
 var
   ooReflection: variant;
 begin
   ooReflection:= p.createInstance('com.sun.star.reflection.CoreReflection');
   ooReflection.forName('com.sun.star.beans.PropertyValue').createObject(result);
   result.Name := ooName;
   result.Value:= ooData;
 end;

procedure OdsToStringGrid;
var
 Document : Variant;
 oo,Desktop: Variant;
 Sheet,ooParams, Cell: Variant;
 a,i:Longint;
 label 1;
begin
 oo := CreateOleObject('com.sun.star.ServiceManager');
   ooParams:= VarArrayCreate([0, 0], varVariant);
   ooParams[0]:= ooCreateValue(oo, 'Hidden', true);
   desktop := oo.createInstance('com.sun.star.frame.Desktop');
   document := desktop.LoadComponentFromURL('file:///' + Form1.OpenDialog1.FileName, '_blank', 0, ooParams);
Sheet := Document.getSheets.GetByIndex(0);
for i:=0 to Form1.StringGrid1.RowCount do
  begin
  for a:=0 to 17 do
      begin
      Cell := Sheet.getCellByPosition(a, i);
      Form1.StringGrid1.Cells[a,i]:=Cell.String;
      if (a=0) and (Form1.StringGrid1.Cells[a,i]='') then Goto 1;
      end;
  end;
1:OO := Unassigned;
end;
{В таблице Calc 18 колонок}


sniknik   (2014-05-31 17:20:00) [2]

эээ
> и все таки приведи всю, с указанием на какой строке ошибка
кто просил рабочую?

> Пробовал подменить заголовок на рабочий
какой заголовок? ты вообще о чем?

> цифровой бред(в основном ноли)
[19]
> [8] + [18] работает, ошибок типа вышеуказанной нет (есть с тем, что вместо строк 0 читает).
похеже на проблему вариантов, вернее типов которые в них возвращает объект не поддерживаются старыми(?) дельфями.

> и опен офис открывается с тем же :(
???
раз ОО открывает с нолями, значит они там и есть. поменяй файл.

> Неужели нет  линков с примерами как данные с Calc прочесть?
ну как же нет, есть дока (ссылка в [15]), есть примеры становящиеся с пакетом разработчика, есть гугл в конце концов.


Кирилов М.Л.   (2014-05-30 23:09:00) [3]

Процедура экспорта рабочая, потому и приводить полностью нет смысла. Пробовал подменить заголовок на рабочий, ошибка пропадает но в гриде цифровой бред(в основном ноли) и опен офис открывается с тем же :( если можно, подробней чего где проверять? Спасибо! Неужели нет  линков с примерами как данные с Calc прочесть?


sniknik   (2014-05-30 21:54:00) [4]

> Скрин меню "Пуск":
программа состоит из кучи объектов, то что есть заголовок не означает что при установке не сняли галочку с чего то нужного.

> "Форк" это что...?
не важно. термин линукс.

> Импорт нивкакую... :(
> проверяй возвращаемые объектына null/unknown

> всю процедуру не привожу
и все таки приведи всю, с указанием на какой строке ошибка, и зхорошо бы значения(прям как в отладчике адрес показывает/пишет) возвращенное функциями до этого. с термином "трассировка" знаком?


Кирилов М.Л.   (2014-05-30 18:44:00) [5]

Экспорт пашет без проблем с таким заголовком(всю процедуру не привожу):
 OO := CreateOleObject('com.sun.star.ServiceManager');
 Desktop := OO.createInstance('com.sun.star.frame.Desktop');
 Doc := Desktop.LoadComponentFromURL('private:factory/scalc', '_blank', 0,VarArrayCreate([0, -1], varVariant));
Импорт нивкакую... :(


Кирилов М.Л.   (2014-05-30 18:41:00) [6]

>sniknik © "Форк" это что...?


Кирилов М.Л.   (2014-05-30 18:40:00) [7]

Скрин меню "Пуск": http://i62.fastpic.ru/big/2014/0530/e7/d135f4c70864ffd8dc407361e13075e7.jpg
Убрал vArr[0] :=.... ошибка та же :(


sniknik   (2014-05-29 16:39:00) [8]

> т.к. "добиться" такой же ошибки
добился еще одним способом... до этого открывал Excel-евские файлы, а попробовал создать "чистый" опенофисный ".ods" и при его открытии и получил... именно на параметрах, хотя -
> можно было бы, для начала, не пихать ничего, просто пустой массив.

убери вот эту строчку нафиг
vArr[0] := MakePropertyValue('FilterName', 'MS Excel 97');
закоментарь, удали, как хочешь, не поддерживается в OO формате екселевские фильтры похоже.


sniknik   (2014-05-29 16:20:00) [9]

[8] + [18] работает, ошибок типа вышеуказанной нет (есть с тем, что вместо строк 0 читает).

у тебя вообще OO установлен? полностью/частично?

проверяй возвращаемые объекты на null/unknown, т.к. "добиться" такой же ошибки я например могу "исковеркав" например Desktop:= OO.createInstance(' com.sun.star.frame.D1e1s1k1t1op'); запрашиваемый инстанс... но раз у тебя он/другое из запрашиваемых написаны верно, значит не установлены (или установлен "форк" не имеющий таких имен).


Кирилов М.Л.   (2014-05-29 15:47:00) [10]

function MakePropertyValue(PropName, PropValue:string):variant;
var Struct: variant;
begin
   Struct := OO.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
   Struct.Name := PropName;
   Struct.Value := PropValue;
   Result := Struct;
end;


sniknik   (2014-05-29 12:39:00) [11]

+
сайт таки продолжает "рвать" длинные ссылки. в данной мной ([15]) буковка l расширения .html оторвалась.


sniknik   (2014-05-29 11:30:00) [12]

> что vArr создается из двух элементов, а устанавливается только 1-й
пофиг, имхо, "пустышка" будет - UNKNOWN. пропустит.


sniknik   (2014-05-29 11:28:00) [13]

http://openoffice.org.sourcearchive.com/documentation/1.1.3/classole__adapter_1_1UnoConversionUtilities_b0f0e1bd259fb6c44fa9c032880d53ed.html

   if (pVar->vt != VT_UNKNOWN && pVar->vt != VT_DISPATCH)
       throw IllegalArgumentException(
           OUSTR("[automation bridge]UnoConversionUtilities::createOleObjectWrapper \n"
                 "The VARIANT does not contain an object type! "), 0, -1);

...
ты явно запихал в параметры что-то "левое". хотя, кстати параметры там не обязательны... можно было бы, для начала, не пихать ничего, просто пустой массив.


junglecat   (2014-05-29 11:21:00) [14]

а также в том, что vArr создается из двух элементов, а устанавливается только 1-й


sniknik   (2014-05-29 11:03:00) [15]

> В чем может быть проблема?
подозреваю в чем то тайном... например в MakePropertyValue.


Кирилов М.Л.   (2014-05-28 19:34:00) [16]

Смешно... :)


junglecat   (2014-05-28 19:03:00) [17]

> [10] Кирилов М.Л.   (28.05.14 19:01)

сделай доброе дело, преврати свой пример в рабочий и выложи, чтобы можно было нагуглить. Кто-то ведь должен быть первым


Кирилов М.Л.   (2014-05-28 19:01:00) [18]

Нет ни у кого рабочего примера чтения данных из таблицы Calc? Погуглив как ни странно не нашел :(


junglecat   (2014-05-28 18:55:00) [19]

в том, что какая-то из вариантных переменных не является ссылкой на объект.
В отладчике надо смотреть


Кирилов М.Л.   (2014-05-28 18:34:00) [20]

Пробую импортировать так:
var
 Doc : Variant;
 Desktop: Variant;
 Sheet, Cell: Variant;
 vArr : Variant;
 FileName : string;
 a,i:Longint;
begin
 OO := CreateOleObject('com.sun.star.ServiceManager');
 Desktop := OO.createInstance('com.sun.star.frame.Desktop');
 vArr := VarArrayCreate([0, 1], varVariant);
 vArr[0] := MakePropertyValue('FilterName', 'MS Excel 97');
 Doc := Desktop.LoadComponentFromURL('file:///' + OpenDialog1.FileName, '_blank', 0, vArr);
 Sheet := Doc.getSheets.GetByIndex(0);
for i:=0 to StringGrid1.RowCount do
  begin
  for a:=0 to 17 do
      begin
      Cell := Sheet.getCellByPosition(a, i);
      StringGrid1.Cells[a,i]:=Cell.Value;
      end;
  end;
end;
Получаю ошибку: http://i62.fastpic.ru/big/2014/0528/b1/c21bf704ea388d2cc457c3af81cdedb1.jpg
В чем может быть проблема?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо