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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.11.2008, 15:04   #1  
Zoe is offline
Zoe
Участник
 
14 / 10 (1) +
Регистрация: 23.03.2008
Адрес: Санкт-Петербург
Копирование листов в Excel с шаблоном
Добрый день всем!
Подскажите, пожалуйста, как возможно в Axapta 3.0 при формировании Печатной формы множить листы рабочей книги в Excel'е? Причем заранее неизвестно, сколько именно листов будет в конечном итоге. Другими словами, в зависимости от выполненных условий, заполняются листы, начиная с первого, при этом все последующие листы (если нужно) должны вставляться Axapta и должен копироваться шаблон с первого листа. И, соответственно, заполняться. Заполняться-то он заполняется, но вот ни формат ячеек, ни фиксированные значения полей, не говоря уже о рамочках, - одним словом, шаблон - не копируется... Пыталась разобраться самостоятельно, но - увы! - ничего не получается... Если можно, помогите, пожалуйста! Спасибо всем заранее!!!
Старый 20.11.2008, 15:11   #2  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Range("A1").Select
Sheets("Лист1").Select
Selection.Copy
Sheets("Лист2").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Это в Екселе так. Ключевое слово - Специальная Вставка...

Ну, а раз в Екселе можно, то и из Аксапты (в Екселе же ) - тоже можно...
__________________
Best Regards,
Roman
Старый 20.11.2008, 15:19   #3  
Zoe is offline
Zoe
Участник
 
14 / 10 (1) +
Регистрация: 23.03.2008
Адрес: Санкт-Петербург
Роман, спасибо!
НО весь вопрос в том и заключается, как это можно сделать в Аксапте... Идея мне кажется ясной, но вот пример синтаксиса, да еще такого, чтоб работал, я найти не могу... Если же делать через Макрос в Excel'е, то непонятно, как записывать именно столько листов, сколько раз выполняется условие. И именно через один (т. е. 1, 3, 5, ...). Поскольку я в макрос залезла третий раз в жизни, то у меня была надежда, что это все можно проще провернуть через Axapta...
Старый 20.11.2008, 15:29   #4  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
А просто запускайте сам макрос Excel+Com+Macros

Последний раз редактировалось Eldar9x; 20.11.2008 в 16:02.
Старый 20.11.2008, 15:33   #5  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Посмотрите оставшийся в живых в трешке класс ComExcelDocument_RU, там что ни метод то портация из VB в X++
__________________
Axapta book for developer
Старый 20.11.2008, 15:39   #6  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Копирование в Excel

"Все уже украдено до нас..."

А в данном случае - придумано
__________________
Best Regards,
Roman
Старый 20.11.2008, 15:40   #7  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Кстати можно проще:
Sheets("Лист1").Select
Sheets("Лист1").Copy After:=Sheets(2)
Старый 20.11.2008, 15:42   #8  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Да простит меня автор кода, я честно проверил его работоспособность
X++:
void copyWorkSheet(anyType _sheetToCopyID, anyType _sheetAfterID)
{
    COM     sheetToCopy;
    COM     sheetAfter;
    ;
    sheetToCopy = this.getWorkSheet(_sheetToCopyID);
    if (_sheetAfterID)
        sheetAfter  = this.getWorkSheet(_sheetAfterID);

    if (sheetToCopy && sheetAfter)
    {
        sheetToCopy.copy(sheetAfter);
    }
}
Добавте этот метод в класс ComExcelDocument_RU, токо что проверил, вроде работает, пример вызова:

X++:
static void Job41(Args _args)
{
    ComExcelDocument_RU     excel = new ComExcelDocument_RU();
    ;
    excel.newFile("C:\\test.xlsx");
    excel.visible(true);

    excel.copyWorkSheet(1, 2);

}
За это сообщение автора поблагодарили: Zoe (1), decoder (1).
Старый 20.11.2008, 15:50   #9  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Вот еще темка до кучи: Копирование листов в Excel

Кстати, она болтается в "Похожих темах" к этой. Так что не пренебрегаем смотреть в низ страницы, не пренебрегаем!

P.S.
Цитата:
Сообщение от Lemming Посмотреть сообщение
Добавте этот метод в класс ComExcelDocument_RU
Цитата:
Сообщение от Gustav Посмотреть сообщение
В классе ComExcelDocument_RU есть метод insertSheet. Он включает и копирование тоже.
Диалог цитат Метод insertSheet есть в слое dis, так что, наверное, должен быть у всех. У меня дата изменений класса на слое dis - 15.02.2005 (DAX 3.0, SP4).
За это сообщение автора поблагодарили: Lemming (1).
Теги
excel

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Копирование в Excel Михаил Петрович DAX: Программирование 4 15.02.2008 15:35
Копирование листов в Excel Андрей К. DAX: База знаний и проекты 12 30.08.2007 08:44
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Копирование из Грида в Excel ArturK DAX: Программирование 5 09.03.2004 19:55

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

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

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