17.07.2007, 10:39 | #1 |
Участник
|
Как открыть шаблон в OpenOffice?
Хочу создать документ на основе шаблона в OpenOffice
Перечитала кучу форумов, пересмотрела примеры, но все равно никак не получается создать новый документ на основе шаблона, открывается сам шаблон для редактирования.. Подскажите.. X++: static void oo_4(Args _args) { COM OpenOffice; COM scr; COM DeskTop; COM Document; COMVariant ; str filepath; COM propertyValue; array arr; ; arr = new Array(types::Class); //Создание экземпляра OpenOffice.org OpenOffice = new Com("com.sun.star.ServiceManager"); DeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop"); propertyValue = OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue'); propertyValue.Name('AsTemplate'); propertyValue.Value(true); arr.value(1,propertyValue); = comVariant::createFromArray(arr); info(.toString()); filepath = "file://///Axapta-aos/Шаблоны/Претензии.xlt"; //Открытие документа Document = DeskTop.LoadComponentFromURL(filepath, "_blank", 0, ); } Последний раз редактировалось PT; 17.07.2007 в 11:25. |
|
17.07.2007, 11:12 | #2 |
MCTS
|
попробуйте Types::String вместо types::Class
и без использования дополнительных опций Последний раз редактировалось Eldar9x; 17.07.2007 в 11:21. |
|
17.07.2007, 11:15 | #3 |
Moderator
|
Ничего не знаю про OpenOffice, но насколько могу понять из кода, речь неявно идёт и о файле Excel. Так вот, чтобы создать новый файл xls на основе шаблона нужно вначале специальным образом этот шаблон подготовить в Excel и сохранить как файл c расширением xlt (eXceL Template). После этого обычное открытие файла, например, Претензии.xlt будет приводить к автоматическому созданию нового файла Претензии1.xls.
|
|
17.07.2007, 11:29 | #4 |
Участник
|
Ой да, действительно, в примере написала xls, вместо xlt, уже исправила. В любой случае это просто опечатка, открывается сам шаблон полюбому..
тип массива string нельзя указать - будет несовместимость типов.. здесь есть рабочий пример http://community.i-rs.ru/index.php/topic,3277.0.html, но у меня не получается корректно переделать его для аксапты |
|
17.07.2007, 11:35 | #5 |
MCTS
|
ну по крайней мере это же не тип class, надо бы перебрать наиболее вероятные, enum, int... лучше бы все, конечно. И еще передача строк, лучше бы везде исправить на двойные кавычки, хотя, это уже шаманство
Последний раз редактировалось Eldar9x; 17.07.2007 в 11:37. |
|
17.07.2007, 11:43 | #6 |
Участник
|
Попробуйте так, т.е. передавайте не Array, а COMVariant:
X++: ComVariant varArr; Array arr; ; arr = new Array(Types::String); varArr = ComVariant::createFromArray(arr); OO = new Com('com.sun.star.ServiceManager'); OD = OO.CreateInstance('com.sun.star.frame.Desktop'); Doc = OD.LoadComponentFromURL(TemplateName, '_blank', 0, varArr); |
|
17.07.2007, 11:48 | #7 |
MCTS
|
все таки COMVariant:
http://www.axforum.info/forums/printthread.php?t=16898 |
|
17.07.2007, 11:48 | #8 |
Участник
|
этот код просто открывает файл , а мне надо именно в вариантный массив (varArr ) передать параметры, что бы файл открылся на основе шаблона..
|
|
17.07.2007, 12:02 | #9 |
MCTS
|
обратите внимание:
http://www.delphimaster.ru/articles/openoffice/ цитата Цитата:
{Метод CreateDocument создает новый текстовый документ. Как видите Сервис
Менеджер, который доступен через переменную StarOffice, создает и возвращет экземпляр DeskTop. Рассмотрим пристальнее метод LoadComponentFromURL. Первым параметром передается имя файла, в виде URL. На самом деле строка 'private:factory/swriter' действительно указывает на существующий файл. Это файл шаблона, по которому создается пустой текстовый документ. Следующий параметр ('_blank') указывает на то, что документ должен открыться в новом окне. Третьим параметром идут флаги вызова, пока что всегда равны нулю. И последним параметром, идут опции открытия документов. На самом деле, это массив пар название опции - значение опции. В данном случае, дополнительных опций мы не используем, поэтому передаем пустой массив. Передачу опций более детально рассмотрим ниже. } |
|
17.07.2007, 12:15 | #10 |
Участник
|
если не передавать параметры, то файл просто откроется по умолчанию...
вот параметры: loadComponentFromURL Method Options The fourth parameter of the loadComponentFromURL function is a PropertyValue data field. which provides StarOffice with various options for opening and creating documents. The data field must provide a PropertyValue structure for each option in which the name of the option is saved as a string as well as the associated value. PHP код:
и мне их надо передать через Массив последним параметром, вот только как??? Последний раз редактировалось PT; 17.07.2007 в 12:17. |
|
01.10.2007, 13:18 | #11 |
Участник
|
Столкнулся с такой же проблемой.
Заполняем propertyValue = OpenOffice.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); propertyValue.Name('AsTemplate'); propertyValue.Value(true); а как теперь передать ? Doc = OD.LoadComponentFromURL(TemplateName, '_blank', 0, varArr); |
|
06.11.2007, 15:30 | #12 |
Участник
|
Это делается так:
X++: static void oo_4(Args _args) { COM OpenOffice; COM DeskTop; COM Document; COM MyStruct; str filepath; // аргумент для вызова методов через диспатч COMVariant varArg1 = new COMVariant(); // аргумент для массива свойств COMVariant var = new COMVariant(); // Это для того, чтобы вызывать диспатчевые методы // а конкретно - аксапта часто не умеет ставить значения пропертям // и приходится вот так. ComDispFunction Func; // аргумент для всяких методов COMVariant arg; // иногда нужен массив свойств Array arr = new Array(Types::Class); // Создание экземпляра OpenOffice.org OpenOffice = new Com("com.sun.star.ServiceManager"); DeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop"); // получаем объект, в котором хранится свойство (для передачи в функцию) MyStruct = OpenOffice.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); Func = new COMDispFunction(MyStruct, "Name", COMDispContext::PropertyPut); varArg1.bStr("AsTemplate"); Func.call(varArg1); Func = new COMDispFunction(MyStruct, "Value", COMDispContext::PropertyPut); varArg1.boolean(true); Func.call(varArg1); var = COMVariant::createFromCOM(MyStruct); arr.value(1,var); // Создание документа // create and initialize a COMVariant object arg = COMVariant::createFromArray(arr); filepath = "file://///Axapta-aos/Шаблоны/Претензии.xlt"; Document = DeskTop.LoadComponentFromURL(filepath, "_blank", 0, arg); } |
|
|
За это сообщение автора поблагодарили: NeveB (1), Lucky13 (2). |
15.12.2010, 13:21 | #13 |
Участник
|
Тема старая но всё же тут попробую задать уточняющий вопрос.
В каком формате нужно указывать путь до файла? Цитата:
filepath = "file://///Axapta-aos/Шаблоны/Претензии.xlt";
Но у меня ругается не открывает. Как праильно написать путь к файлу C:\TEMP\Exampl.xlt ? |
|
15.12.2010, 13:24 | #14 |
Участник
|
Попробуйте "удвоить" слэши. И сделать так:
X++: filepath = "file:////Axapta-aos//Шаблоны//Претензии.xlt";
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 15.12.2010 в 13:31. |
|
15.12.2010, 13:33 | #15 |
Ищущий знания...
|
ещё можно попробывать так:
X++: filepath = @"C:\TEMP\Exampl.xlt";
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
15.12.2010, 13:33 | #16 |
Участник
|
|
|
15.12.2010, 13:35 | #17 |
Ищущий знания...
|
Цитата:
в частности Axapta-aos - это сервер у топик стартера.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
15.12.2010, 13:36 | #18 |
Участник
|
Цитата:
Вот так: X++: filepath = "C:\\TEMP\\Exampl.xlt"
__________________
С уважением, Александр. |
|
15.12.2010, 13:43 | #19 |
Участник
|
ну про file://// я догадывался, просто уточнил.
Цитата:
filepath = "C://Temp//Exampl.xlt";
Document = DeskTop.LoadComponentFromURL(filepath, '_blank', 0, arg); и так Цитата:
filepath = "C:\\Temp\\Exampl.xlt";
Document = DeskTop.LoadComponentFromURL(filepath, '_blank', 0, arg); и так тоже не идёт Цитата:
filepath = @"C:\TEMP\Exampl.xlt";
Document = DeskTop.LoadComponentFromURL(filepath, '_blank', 0, arg); Цитата:
Метод "LoadComponentFromURL" в COM-объекте класса "<неизвестно>" возвратил код ошибки 0x80020009 (DISP_E_EXCEPTION), который означает: com.sun.star.lang.IllegalArgumentException: URL seems to be an unsupported one.
Последний раз редактировалось raniel; 15.12.2010 в 13:50. |
|
15.12.2010, 13:49 | #20 |
Участник
|
используйте именно обратные слэши в данном случае:
X++: filepath = "C:\\TEMP\\Exampl.xlt" X++: filepath = "C://Temp//Exampl.xlt";
__________________
С уважением, Александр. |
|