AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.07.2007, 10:39   #1  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
Как открыть шаблон в 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  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
попробуйте Types::String вместо types::Class
и без использования дополнительных опций

Последний раз редактировалось Eldar9x; 17.07.2007 в 11:21.
Старый 17.07.2007, 11:15   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Ничего не знаю про OpenOffice, но насколько могу понять из кода, речь неявно идёт и о файле Excel. Так вот, чтобы создать новый файл xls на основе шаблона нужно вначале специальным образом этот шаблон подготовить в Excel и сохранить как файл c расширением xlt (eXceL Template). После этого обычное открытие файла, например, Претензии.xlt будет приводить к автоматическому созданию нового файла Претензии1.xls.
Старый 17.07.2007, 11:29   #4  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
Ой да, действительно, в примере написала xls, вместо xlt, уже исправила. В любой случае это просто опечатка, открывается сам шаблон полюбому..

тип массива string нельзя указать - будет несовместимость типов..
здесь есть рабочий пример http://community.i-rs.ru/index.php/topic,3277.0.html, но у меня не получается корректно переделать его для аксапты
Старый 17.07.2007, 11:35   #5  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
ну по крайней мере это же не тип class, надо бы перебрать наиболее вероятные, enum, int... лучше бы все, конечно. И еще передача строк, лучше бы везде исправить на двойные кавычки, хотя, это уже шаманство

Последний раз редактировалось Eldar9x; 17.07.2007 в 11:37.
Старый 17.07.2007, 11:43   #6  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Попробуйте так, т.е. передавайте не 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);
Необъявленные переменные имеют тип COM
Старый 17.07.2007, 11:48   #7  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
все таки COMVariant:
http://www.axforum.info/forums/printthread.php?t=16898
Старый 17.07.2007, 11:48   #8  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
этот код просто открывает файл , а мне надо именно в вариантный массив (varArr ) передать параметры, что бы файл открылся на основе шаблона..
Старый 17.07.2007, 12:02   #9  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
обратите внимание:
http://www.delphimaster.ru/articles/openoffice/
цитата
Цитата:
{Метод CreateDocument создает новый текстовый документ. Как видите Сервис
Менеджер, который доступен через переменную StarOffice, создает и возвращет
экземпляр DeskTop. Рассмотрим пристальнее метод LoadComponentFromURL. Первым
параметром передается имя файла, в виде URL. На самом деле строка
'private:factory/swriter' действительно указывает на существующий файл. Это файл
шаблона, по которому создается пустой текстовый документ.
Следующий параметр ('_blank') указывает на то, что
документ должен открыться в новом окне.
Третьим параметром идут флаги вызова, пока что всегда
равны нулю. И последним параметром, идут опции открытия документов. На самом деле,
это массив пар название опции - значение опции. В данном случае, дополнительных
опций мы не используем, поэтому передаем пустой массив. Передачу опций более
детально рассмотрим ниже. }
то есть как будто получается, что параметров не надо передавать, хотя в этом случае не calc рассматривается, но м/б и здесь так...
Старый 17.07.2007, 12:15   #10  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
если не передавать параметры, то файл просто откроется по умолчанию...
вот параметры:

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 код:
loadComponentFromURL supports the following options:
    *      
AsTemplate (Boolean) – if trueloads a new, untitled document from the given URL. If is falsetemplate files are loaded for editing.
    *      
CharacterSet (String) – defines which set of characters a document is based on.
    *      
FilterName (String) – specifies a special filter for the loadComponentFromURL function. The filter names available are defined in the \share\config\registry\instance\org\openoffice\office\TypeDetection.xml file.
    *      
FilterOptions (String) – defines additional options for filters.
    *      
JumpMark (String) – once a document has been openedjumps to the position defined in JumpMark.
    *      
Password (String) – transfers a password for protected file.
    *      
ReadOnly (Boolean) – loads a read-only document
http://docs.sun.com/app/docs/doc/819...02?l=ru&a=view

и мне их надо передать через Массив последним параметром, вот только как???

Последний раз редактировалось PT; 17.07.2007 в 12:17.
Старый 01.10.2007, 13:18   #11  
kBace4ka is offline
kBace4ka
Участник
 
8 / 10 (1) +
Регистрация: 16.07.2007
Адрес: Челябинск
Столкнулся с такой же проблемой.
Заполняем
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  
c_makarov is offline
c_makarov
Участник
 
2 / 15 (1) ++
Регистрация: 14.03.2007
Это делается так:


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  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Тема старая но всё же тут попробую задать уточняющий вопрос.
В каком формате нужно указывать путь до файла?
Цитата:
filepath = "file://///Axapta-aos/Шаблоны/Претензии.xlt";
пытаюсь посредством этой строки открыть фаилик который лежит в папочке на диске с
Но у меня ругается не открывает. Как праильно написать путь к файлу C:\TEMP\Exampl.xlt ?
Старый 15.12.2010, 13:24   #14  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Попробуйте "удвоить" слэши. И сделать так:
X++:
filepath = "file:////Axapta-aos//Шаблоны//Претензии.xlt";
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 15.12.2010 в 13:31.
Старый 15.12.2010, 13:33   #15  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
ещё можно попробывать так:
X++:
filepath = @"C:\TEMP\Exampl.xlt";
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 15.12.2010, 13:33   #16  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Цитата:
Сообщение от samolalex Посмотреть сообщение
Попробуйте "удвоить" слэши. И сделать так:
X++:
filepath = "file:////Axapta-aos//Шаблоны//Претензии.xlt";
Несовсем понял как указать диск C: и папочку TEMP? file:////Axapta-aos// это где?
Старый 15.12.2010, 13:35   #17  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от raniel Посмотреть сообщение
Несовсем понял как указать диск C: и папочку TEMP? file:////Axapta-aos// это где?
так указывается сетевой путь к компьютеру
в частности Axapta-aos - это сервер у топик стартера.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 15.12.2010, 13:36   #18  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Сообщение от raniel Посмотреть сообщение
Несовсем понял как указать диск C: и папочку TEMP? file:////Axapta-aos// это где?
Извините, взял не тот пример.
Вот так:
X++:
filepath = "C:\\TEMP\\Exampl.xlt"
или как указал lev
__________________
С уважением, Александр.
Старый 15.12.2010, 13:43   #19  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
ну про 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  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
используйте именно обратные слэши в данном случае:
X++:
filepath = "C:\\TEMP\\Exampl.xlt"
а не
X++:
filepath = "C://Temp//Exampl.xlt";
__________________
С уважением, Александр.
Теги
документация

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DeniZone: OpenOffice and Dynamics ax Blog bot DAX Blogs 0 12.12.2008 13:05
OpenOffice форматирование PT DAX: Программирование 8 13.12.2007 15:54
Axapta+OpenOffice mmm DAX: Программирование 3 20.02.2007 16:50
Какие порты мне необходимо открыть на циске для axapta, для тонкого клиента. Maksim13 DAX: Администрирование 6 06.03.2006 12:54
Как открыть готовый шаблон Excel в ActiveX Microsoft Office Spreadsheet 10.0? chi DAX: Программирование 0 16.11.2004 15:33
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:32.