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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.05.2006, 09:58   #1  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Параметры pastespecial()
Доброго времени суток!
Экспортирую в Эксель (2003) через copy(), pastespecial().Мне необходимо чтобы вставлялись в Эксель только значения. Задаю параметр pastespecial(-4163) на что Аксапта выдает ошибку :

Метод 'pastespecial' в COM-объекте класса '_Worksheet' возвратил код ошибки 0x80010105 (<неизвестно>), который означает: <неизвестно>.

Создавал в экселе макрос - параметр верен. в чём проблема подскажите пожалуйста.

Заранее благодарен - Sada...
Старый 11.05.2006, 10:36   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,323 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Не вдаваясь в подробности (хорошо было бы посмотреть как все вызывается - строчку кода) - хочу спросить - цифрку -4163 облачаете в ComVariant::createFromInt(-4163) ?
__________________
Возможно сделать все. Вопрос времени
Старый 11.05.2006, 10:56   #3  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
sheet.pastespecial(-4163);
что самое интересное нашол в одном классе тоже самое, там работает а тут нет...
барабашка.
sheet типа COM.
Старый 11.05.2006, 11:23   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
А вот это не поможет? http://www.axforum.info/forums/showt...1761#post51761
там применяется конструкция:
TextBuffer.toClipboard();
worksheet.pastespecial(1);
Старый 11.05.2006, 12:08   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А почему параметр целое?
Метод pastespecial() есть у двух объектов: Range и WorkSheet

Для Range первым параметром передается значение enum'а XlPasteType
Судя по вашему коду это - xlPasteValues = 0xFFFFEFBD (-4163)

Для WorkSheet - строка, указывающая на формат данных в Clipboard'е.
Причем для русской и английской версий Excel она будет различаться.
Для русской будет, например "Текст" или "Текст в кодировке Unicode".
Передавать этот параметр надо ч/з COMVariant::CreateFromString()

Судя по имени sheet COM объект у вас имеет тип WorkSheet и вызвать надо так
X++:
sheet.PasteSpecial(COMVariant::CreateFromString("Текст"));
__________________
Axapta v.3.0 sp5 kr2
Старый 11.05.2006, 13:05   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Нашёл у себя в джобах пример. Когда-то баловался. Однако, работает...
X++:
static void PasteSpecial_DemoJob(Args _args)
{
    TextBuffer txtb = new TextBuffer();
    EmplTable emplTable;
    int row;
    COM xlApp;            // Excel.Application
    COM wbks, wbk;        // Workbooks, Workbook
    COM wkss, wks;        // Worksheets, Worksheet
    COM rng, rngCR, cell; // все Range
    ;
    xlApp = new COM('Excel.Application');
    wbks = xlApp.Workbooks();
    wbk  = wbks.Add();
    wkss = wbk.Worksheets();
    wks  = wkss.Item(1);
    for (row = 1; row <= 5; row += 1) // выводит 5 копий таблицы emplTable
    {
        txtb.setText('');
        while select emplTable order by Name
        {
            txtb.appendText(emplTable.Name         ); txtb.appendText('\t');
            txtb.appendText(emplTable.PhoneLocal   ); txtb.appendText('\t');
            txtb.appendText(emplTable.EmplId       ); txtb.appendText('\t');
            txtb.appendText(emplTable.CellularPhone); txtb.appendText('\t');
            txtb.appendText(emplTable.UserId       ); txtb.appendText('\t');
            txtb.appendText('\r\n');
        }
        txtb.toClipboard();
        rng  = wks.Range('A'+int2str(row*1000)); // каждую копию списка начинаем с очередной 1000-й строки Excel
        rng.PasteSpecial(1);
    }
    xlApp.Visible(true);
}
Старый 11.05.2006, 13:21   #7  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Суть проблемы была в следующем: вывожу в Эксель данные и навожу затем красоту. итоги жирным шрифтом, сетку накладываю и все такое (в общем чтоб глаз и начальство радовало). но copy()/paste() всю эту красоту затирает. Создал макрос в Экселе, посмотрел что будет если использовать PasteSpecial(). Параметр -4163 меня вполне устроил, я даже нашол место где это работает именно с этим параметром. Но вываливалась выше указанная ошибка. После кучи проб и ошибок, поставив PasteSpecial(2), моя красота перестала затираться и нармально рисуется. Как так - Бог его знает, но на данный момент меня это вполне устроило. Всем спасибо за активное усастие
P.S.:Хотя почему ошибка я так и не понял...
Старый 11.05.2006, 14:43   #8  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Стрелять хелпописателей.

Для WorkSheet параметр Format в методе PasteSpecial() может иметь как текстовый, так и целочисленный тип.

Константы, используемые в методе PasteSpecial() объекта WorkSheet
xlAll = 1
xlFormulas = 2
xlValues = 3
xlFormats = 4
xlPasteComments = 5
xlDataValidation = 6
xlAllExceptBorders = 7
xlColumnWidths = 8

При этом надо учитывать, что если использовать эти константы, кроме xlAll, то необходимо, чтобы ячейки были скопированы непосредственно из Excel с помощью Range.Copy
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Logger (1), sashanka (1).
Старый 11.05.2006, 17:15   #9  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от AndyD
Стрелять хелпописателей.
Ну, типа того. А сам PasteSpecial - в музей!

Даешь ADO и CopyFromRecordset !

Sada, Вы вроде собирались заняться (http://www.axforum.info/forums/showthread.php?p=102277#post102277) или мне показалось?
Старый 12.05.2006, 05:21   #10  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
2Gustav: Не показалось, просто надо было кое что добавить в старый и переписывать выгрузку - времени нет, да и лень.... А ADO скоро будет мной побеждено

А про pastespecial() - ну да... в музей... тут в АОТе и не такое увидишь (особенно мне нравится стандарная выгрузка).Еще раз всем спасибо...
С уважением - Sada...
Теги
excel, pastespecial

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Смена компании через Сервис->Параметры Dronas DAX: Программирование 4 06.12.2006 11:15
параметры Производства - статус sev DAX: Функционал 2 03.02.2006 10:36
Query, параметры введенные пользователем kostas DAX: Программирование 8 26.05.2005 16:43
Система не видит новые параметры методов при работе Anais DAX: Программирование 28 20.01.2005 22:38
Расчеты с поставщиками\Параметры George V. Tavrizoff DAX: Функционал 1 28.02.2003 16:13

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

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

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