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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.11.2004, 08:37   #1  
chi is offline
chi
Участник
 
80 / 13 (1) ++
Регистрация: 21.01.2004
Интегрирование листа Excel в форму
Здравствуйте.

Скажите, а как-нибудь можно интегрировать лист Excel в форму Axapta.
Вариант ActiveX.MS Spreadsheet не подходит.

Спасибо.
Старый 25.11.2004, 09:10   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Если не ActiveX.MS Spreadsheet, то как вы бы сделали это в любой другой программе?


Анекдот:
Мужик приходит в роддом. Спрашивает:
- У моей мальчик родился?
- Нет.
- А кто?
Старый 25.11.2004, 09:40   #3  
chi is offline
chi
Участник
 
80 / 13 (1) ++
Регистрация: 21.01.2004
Мне нужно в этом листе готовый шаблон открыть. Как это сделать?
Также, как делаю в Excel - не получается (объект немного другой).
И еще не выходит сделать группировку строк, а очень хотелось бы.
Старый 25.11.2004, 10:44   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Можно я попрошу вас задачу полностью повторить?

Я понял следующее. Вам надо:
= интегрировать лист Excel в форму Axapta
= в этом листе готовый шаблон открыть
= сделать группировку строк

Я не понимаю как эти три пункта связаны в одну задачу и как они связаны с ограничением на неиспользование ActiveX.MS Spreadsheet.
Старый 25.11.2004, 11:40   #5  
chi is offline
chi
Участник
 
80 / 13 (1) ++
Регистрация: 21.01.2004
Все верно.
Проблема в том, что не получается:
ни открыть шаблон,
ни сгруппировать строки.

А насчет spreadsheet... Тут, наверное, я зря грешу. Самое главное - сделать два вышеописанных действия...
Старый 25.11.2004, 13:05   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
а что говорит справка в MS Excel по этому поводу?
Старый 25.11.2004, 13:19   #7  
chi is offline
chi
Участник
 
80 / 13 (1) ++
Регистрация: 21.01.2004
Дело в том, что когда я делаю группировку из Аксапты непосредственно в Excel - все проходит на "Ура". А когда то же самое првожу для Spreadsheet - выдается сообщение типа "COM объект не имеет данного метода". То же самое и с открытием шаблона.
Старый 25.11.2004, 13:32   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Странно. Но это надо проверять.
Можете проект сюда выложить?
Какая версия Офиса?
Старый 25.11.2004, 13:43   #9  
chi is offline
chi
Участник
 
80 / 13 (1) ++
Регистрация: 21.01.2004
Office XP / Microsoft Office Spreadsheet 10.0

Проект выложить не могу.

Вот метод, который делает группировку для Spreadsheet:

X++:
void groupRows(int   _fromRow, int   _toRow)
{
    COM         range;
    ;
    range = comObject.Range(strFmt("%1:%2", _fromRow, _toRow));
    range.select();
    range.group();
}
Здесь, comObject = ActiveX.Application();


А вот тот же метод, но для Excel (работает в классе COMExcelDocument_RU):

X++:
void groupRows(int _fromRow, int _toRow, int _WorkSheet = 1)
{
    COM         comRows;
    ;
    if (! m_comDocument)
        throw error(strFmt("@DIS6401", this.getApplicationName()));

    comRow = this.findRange(strFmt("%1:%2", _fromRow, _toRow), _WorkSheet);
    comRow.select();
    comRow.group();
}
Причем первый вариант также робит, если ему Excel вместо Spreadsheet'а скормить.

ЗЫ: Как оформлять код на форуме - не знаю. Поэтому запихнул as is.
Старый 05.11.2005, 09:45   #10  
Jox is offline
Jox
Developer
Аватар для Jox
 
112 / 24 (1) +++
Регистрация: 26.07.2005
Адрес: Питер
Тема ОЧЕНЬ интересная.
Пожалуйста, у кого есть это решение, огромная просьба, выложить в форум...
Я определенно точно знаю, что она у кого-нибудь точно есть, но что-то всем жалко!
Старый 05.11.2005, 15:24   #11  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Похоже там надо достучаться сначала до коллекции "Commands" а потом до конкретной комманды через метод Item(i)? тока вот не получается что-то.
Вместо объекта OCCommands возвращается объект ISpreadsheet и как его побороть не знаю
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 05.11.2005, 21:54   #12  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Шаблон можно загрузить. Просто предварительно его нужно сохранить в формате XML (в Excel), а Spreadsheet у дать команду XMLURL примерно так:
X++:
spreadSheet.xmlURL('c:\\КаталогШаблона\\МойШаблон.xml');
Здесь spreadSheet - ActiveX-ный контрол на форме

А вот с группировками надо посмотреть - вполне возможно что это одно из ограничений SpreadSheet
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: Oz (1).
Старый 07.11.2005, 11:30   #13  
Jox is offline
Jox
Developer
Аватар для Jox
 
112 / 24 (1) +++
Регистрация: 26.07.2005
Адрес: Питер
-> Работа с интерфейсом SpreadSheed (ActiveX на форме)
В общем, столкнулся я с такой проблемой...
Посадил на форму Spreadsheet (Имя - Report), все просто super

Код:
void clicked()
{
    COM activeSheet;
    COM range;
    COM rangeTo;
    XMLDocument     header;
    XMLDocument     footer;
    ;

    super();

    activeSheet = Report.ActiveSheet();
    //  пишу ему...
    range = activeSheet.range("B2:F2");
    header = range.xmlData();
    range.clear();

    rangeTo = activeSheet.range("B3:F3");
    footer = rangeTo.xmlData();
    rangeTo.clear();

    range.xmlData(footer);
    rangeTo.xmlData(header);
}
в общем то все было бы классно, но не работает

Хотелось бы загрузить XML-шаблон и распарсить его на XML-куски а-ля header, footer и т.д.

важно разодрать xml-ник на куски.
Старый 07.11.2005, 11:53   #14  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А разве у Range есть метод xmlData()?

Кроме того такое присваивание неправильно
X++:
header = range.xmlData();
Сомневаюсь, что Com объект будет возвращать экземпляр класса Axapta'ы
надо так
X++:
header = new XMLDocument();
 header.loadXml(Report.xmlData());
__________________
Axapta v.3.0 sp5 kr2
Старый 07.11.2005, 11:57   #15  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
судя по тому, что написано в XSLT to transform Excel XML spreadsheet to CSV or HTML table - The Code Project - SOAP and XML надо делать так
PHP код:
header=new XMLDocument();
header.loadXML(range.XMLData()); 
Старый 07.11.2005, 15:11   #16  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
OFF: Сообщение модератора
Тема объединена с обсуждением "Работа с интерфейсом SpreadSheed (ActiveX на форме)" по причине их взаимосвязанности.

Приношу извинения, если кому-то доставил этим неудобства.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 21.01.2009, 17:56   #17  
Stainless is offline
Stainless
Участник
MCBMSS
Columbus IT
 
34 / 114 (4) +++++
Регистрация: 26.01.2007
Цитата:
Сообщение от Maxim Gorbunov Посмотреть сообщение
Тема объединена с обсуждением "Работа с интерфейсом SpreadSheed (ActiveX на форме)" по причине их взаимосвязанности.

Приношу извинения, если кому-то доставил этим неудобства.
Не смог на форму найти этой темы. Очень интересует.
Старый 22.01.2009, 09:00   #18  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Stainless Посмотреть сообщение
Не смог на форму найти этой темы.
SpreadSheet - не d, a t на конце. Только что поиск по этому слову вернул мне 40 тем.

По интерфейсу этого COM-объекта:
Цитата:
Сообщение от Gustav Посмотреть сообщение
Поищите у себя на компьютере файлы по маске MSOWC*.*

MSOWCDSS.CHM - это описание пользовательского интерфейса SpreadSheet-а, т.е. что юзер может ручками поделать (причем, описание на русском языке в русской версии).
MSOWCVBA.CHM - VBA-шный справочник по программированию; там есть красивая картинка "Spreadsheet Object Model" (это уже, как обычно, на английском).

Можно поразглядывать также другие найденные файлы.
Старый 17.04.2009, 11:05   #19  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
!
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Шаблон можно загрузить. Просто предварительно его нужно сохранить в формате XML (в Excel), а Spreadsheet у дать команду XMLURL примерно так:
X++:
spreadSheet.xmlURL('c:\\КаталогШаблона\\МойШаблон.xml');
Здесь spreadSheet - ActiveX-ный контрол на форме

А вот с группировками надо посмотреть - вполне возможно что это одно из ограничений SpreadSheet
все это проделал. но проблема в том что у меня в этом файле настроен куб(сводная таблица).
а уже когда в аксапте открываю через activex он просто открывается как табличка, а не сводная таблица.
как можно сделать чтобы сводная тоже сохранилась и открылась?
Старый 17.04.2009, 12:02   #20  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
все это проделал. но проблема в том что у меня в этом файле настроен куб(сводная таблица).
а уже когда в аксапте открываю через activex он просто открывается как табличка, а не сводная таблица.
как можно сделать чтобы сводная тоже сохранилась и открылась?
Обозреватель веб страниц не пробовали использовать (в ActiveX, конечно)?
X++:
  ActiveX.Navigate("C:\\Documents and Settings\\___.xls") ;
За это сообщение автора поблагодарили: propeller (1).
Теги
activex, excel, spreadsheet

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Баг при удалении листа Excel Zabr DAX: Программирование 7 26.03.2009 18:39
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47
Книгу Excel в OLE контейнер на Форму... Jox DAX: Программирование 0 16.09.2005 08:12

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

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

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