Форум: "Начинающим";
Текущий архив: 2015.10.25;
Скачать: [xml.tar.bz2];
ВнизИмпорт таблицы OpenOffice в StringGrid Найти похожие ветки
← →
Кирилов М.Л. (2014-05-27 12:15) [0]Здравствуйте! Гуглю, гуглю все бестолку.. Не могу найти нигде простого примера кода по сабжу. Помогите пожалуйста...
← →
junglecat (2014-05-27 12:25) [1]http://yuri.elmeh.ru/
← →
MBo © (2014-05-27 12:26) [2]Подозреваю, что OpenOffice предоставляет средства автоматизации. Вот их и надо использовать.
← →
sniknik © (2014-05-27 12:32) [3]> Подозреваю, что OpenOffice предоставляет средства автоматизации.
блин а я в этом просто уверен... ;)
+
в OO есть такая же запись макросов как в ms office, а вот в libre office не нашел... не удобен для работы.
← →
Кирилов М.Л. (2014-05-27 12:32) [4]Модуль скачал. А где можно посмотреть примеры работы с ним?
← →
sniknik © (2014-05-27 14:37) [5]> Модуль скачал. А где можно посмотреть примеры работы с ним?
запусти.
← →
Кирилов М.Л. (2014-05-27 15:18) [6]Запустил,посмотрел,импорта там нет :(
← →
sniknik © (2014-05-27 15:34) [7]чем чтение отличается от записи?
← →
Кирилов М.Л. (2014-05-28 18:34) [8]Пробую импортировать так:
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
В чем может быть проблема?
← →
junglecat (2014-05-28 18:55) [9]в том, что какая-то из вариантных переменных не является ссылкой на объект.
В отладчике надо смотреть
← →
Кирилов М.Л. (2014-05-28 19:01) [10]Нет ни у кого рабочего примера чтения данных из таблицы Calc? Погуглив как ни странно не нашел :(
← →
junglecat (2014-05-28 19:03) [11]> [10] Кирилов М.Л. (28.05.14 19:01)
сделай доброе дело, преврати свой пример в рабочий и выложи, чтобы можно было нагуглить. Кто-то ведь должен быть первым
← →
Кирилов М.Л. (2014-05-28 19:34) [12]Смешно... :)
← →
sniknik © (2014-05-29 11:03) [13]> В чем может быть проблема?
подозреваю в чем то тайном... например в MakePropertyValue.
← →
junglecat (2014-05-29 11:21) [14]а также в том, что vArr создается из двух элементов, а устанавливается только 1-й
← →
sniknik © (2014-05-29 11:28) [15]http://openoffice.org.sourcearchive.com/documentation/1.1.3/classole__adapter_1_1UnoConversionUtilities_b0f0e1bd259fb6c44fa9c032880d53ed.htm l
if (pVar->vt != VT_UNKNOWN && pVar->vt != VT_DISPATCH)
throw IllegalArgumentException(
OUSTR("[automation bridge]UnoConversionUtilities<T>::createOleObjectWrapper \n"
"The VARIANT does not contain an object type! "), 0, -1);
...
ты явно запихал в параметры что-то "левое". хотя, кстати параметры там не обязательны... можно было бы, для начала, не пихать ничего, просто пустой массив.
← →
sniknik © (2014-05-29 11:30) [16]> что vArr создается из двух элементов, а устанавливается только 1-й
пофиг, имхо, "пустышка" будет - UNKNOWN. пропустит.
← →
sniknik © (2014-05-29 12:39) [17]+
сайт таки продолжает "рвать" длинные ссылки. в данной мной ([15]) буковка l расширения .html оторвалась.
← →
Кирилов М.Л. (2014-05-29 15:47) [18]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 16:20) [19][8] + [18] работает, ошибок типа вышеуказанной нет (есть с тем, что вместо строк 0 читает).
у тебя вообще OO установлен? полностью/частично?
проверяй возвращаемые объекты на null/unknown, т.к. "добиться" такой же ошибки я например могу "исковеркав" например Desktop:= OO.createInstance("com.sun.star.frame.D1e1s1k1t1op"); запрашиваемый инстанс... но раз у тебя он/другое из запрашиваемых написаны верно, значит не установлены (или установлен "форк" не имеющий таких имен).
← →
sniknik © (2014-05-29 16:39) [20]> т.к. "добиться" такой же ошибки
добился еще одним способом... до этого открывал Excel-евские файлы, а попробовал создать "чистый" опенофисный ".ods" и при его открытии и получил... именно на параметрах, хотя -
> можно было бы, для начала, не пихать ничего, просто пустой массив.
убери вот эту строчку нафиг
vArr[0] := MakePropertyValue("FilterName", "MS Excel 97");
закоментарь, удали, как хочешь, не поддерживается в OO формате екселевские фильтры похоже.
← →
Кирилов М.Л. (2014-05-30 18:40) [21]Скрин меню "Пуск": http://i62.fastpic.ru/big/2014/0530/e7/d135f4c70864ffd8dc407361e13075e7.jpg
Убрал vArr[0] :=.... ошибка та же :(
← →
Кирилов М.Л. (2014-05-30 18:41) [22]>sniknik © "Форк" это что...?
← →
Кирилов М.Л. (2014-05-30 18:44) [23]Экспорт пашет без проблем с таким заголовком(всю процедуру не привожу):
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));
Импорт нивкакую... :(
← →
sniknik © (2014-05-30 21:54) [24]> Скрин меню "Пуск":
программа состоит из кучи объектов, то что есть заголовок не означает что при установке не сняли галочку с чего то нужного.
> "Форк" это что...?
не важно. термин линукс.
> Импорт нивкакую... :(
> проверяй возвращаемые объекты на null/unknown
> всю процедуру не привожу
и все таки приведи всю, с указанием на какой строке ошибка, и зхорошо бы значения(прям как в отладчике адрес показывает/пишет) возвращенное функциями до этого. с термином "трассировка" знаком?
← →
Кирилов М.Л. (2014-05-30 23:09) [25]Процедура экспорта рабочая, потому и приводить полностью нет смысла. Пробовал подменить заголовок на рабочий, ошибка пропадает но в гриде цифровой бред(в основном ноли) и опен офис открывается с тем же :( если можно, подробней чего где проверять? Спасибо! Неужели нет линков с примерами как данные с Calc прочесть?
← →
sniknik © (2014-05-31 17:20) [26]эээ
> и все таки приведи всю, с указанием на какой строке ошибка
кто просил рабочую?
> Пробовал подменить заголовок на рабочий
какой заголовок? ты вообще о чем?
> цифровой бред(в основном ноли)
[19]
> [8] + [18] работает, ошибок типа вышеуказанной нет (есть с тем, что вместо строк 0 читает).
похеже на проблему вариантов, вернее типов которые в них возвращает объект не поддерживаются старыми(?) дельфями.
> и опен офис открывается с тем же :(
???
раз ОО открывает с нолями, значит они там и есть. поменяй файл.
> Неужели нет линков с примерами как данные с Calc прочесть?
ну как же нет, есть дока (ссылка в [15]), есть примеры становящиеся с пакетом разработчика, есть гугл в конце концов.
← →
Кирилов М.Л. (2014-05-31 18:18) [27]Довел до рабочего состояния:
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 колонок}
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2015.10.25;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.003 c