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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.05.2009, 18:13   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Метод "PasteSpecial" в COM-объекте класса "_Worksheet" возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: Метод PasteSpecial из класса Worksheet завершен неверно.
скорее всего буфер пуст. Я делал так: открыл картинку в paint, скопировал рисунок., потом вызвал вышеуказанный код.
Цитата:
Прозрачность можно придать в самом Excel'е. Надо только знать RGB цвета, который делать прозрачным. Следующий VBA-код делает прозрачным белый цвет - RGB(255,255,255):
Можно еще так:
X++:
image.transparency(true, )
Старый 18.05.2009, 19:25   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Ну, в общем, у меня манипуляциями в Excel прозрачность получилась. Взял свой пример отсюда Быстрый способ вывода данных в Excel с картинками и добавил фрагмент сегодняшнего дня. Через области белого цвета будет видна сетка таблицы.
X++:
static void Job98_Transparent(Args _args)
{
    ComExcelDocument_RU doc = new ComExcelDocument_RU();
    Image   image = new Image();

    COM     xlApp;
    COM     wbook;
    COM     activeSheet;
    COM     range;
    int     i, timeStart;

    COM     shape;
    COM     pf;
    ;

    timeStart = timenow();

    doc.NewFile('',false);
    wbook = doc.getComDocument();

    xlApp = wbook.Parent();
    activeSheet = xlApp.ActiveSheet();

    range = activeSheet.Range('B1');

    xlApp.ScreenUpdating(false);
    for (i=1;i<=400;i++)
    {
        image.captureScreen(0+(i-1)*2, 0+(i-1)*2, 300+(i-1)*2, 100+(i-1)*2);
        //image.transparent(true, 255, 255, 255);

        image.clipboardCopy();

        range.RowHeight(78);

        range.pasteSpecial(0);

// 18.05.2009 ПРОЗРАЧНОСТЬ -->
        shape = xlApp.Selection();
        shape = shape.ShapeRange();

        pf = shape.PictureFormat();
        pf.TransparentBackground(-1);
        pf.TransparencyColor(WinAPI::RGB2int(255,255,255));
// 18.05.2009 <--

        range = range.Offset(1,0);
    }
    xlApp.ScreenUpdating(true);

    doc.visible(true);

    box::info(strFmt('Всего секунд: %1', timenow()-timeStart));
}
Старый 19.05.2009, 07:05   #3  
PPL is offline
PPL
Участник
 
14 / 12 (1) ++
Регистрация: 21.02.2008
Custav по вашему примеру работает, но
делаю вместо image.captureScreen() - image.loadFile("C:\\png.png");
фон серый и непрозрачный, хотя в самом рисунке прозрачный, может - Image.loadFile() - такую фигню делает?

да,уж .. при сохранении файла в *.jpg - все работает...

Последний раз редактировалось PPL; 19.05.2009 в 07:18.
Старый 19.05.2009, 10:32   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Мда, интересное поведение у этой прозрачности... Похоже, действительно что-то где-то глючит...

Заимствовал PNG-файл Ивана Кашперука из этого сообщения Поздравления (Репутация и Количество сообщений):
Название: Andre_2000.PNG
Просмотров: 2525

Размер: 6.5 Кб

Положил его в корень диска C. Как видно, цвет фона у него голубой (Excel во время записи макроса показал RGB 226, 240, 255 ). Однако, наш код, использующий белый цвет (RGB 255, 255, 255), правильно (почему??) установил прозрачность (у меня, во всяком случае, это так).
X++:
static void Job198_2(Args _args)
{
    ComExcelDocument_RU doc = new ComExcelDocument_RU();
    Image   image = new Image();

    COM     xlApp;
    COM     wbook;
    COM     activeSheet;
    COM     range;

    COM     shape;
    COM     pf;
    ;
    doc.NewFile('',false);
    wbook = doc.getComDocument();

    xlApp = wbook.Parent();
    activeSheet = xlApp.ActiveSheet();

    range = activeSheet.Range('B10');

    //image.captureScreen(0+(i-1)*2, 0+(i-1)*2, 300+(i-1)*2, 100+(i-1)*2);
    image.loadFile(@'C:\Andre_2000.PNG'); //

    image.clipboardCopy();

    range.pasteSpecial(0);

// 18.05.2009 ПРОЗРАЧНОСТЬ -->
    shape = xlApp.Selection();
    shape = shape.ShapeRange();
    pf = shape.PictureFormat();
    pf.TransparentBackground(-1);
    pf.TransparencyColor(WinAPI::RGB2int(255,255,255)); // белый
    //pf.TransparencyColor(WinAPI::RGB2int(226,240,255)); // голубой
// 18.05.2009 <--

    doc.visible(true);
}
А вот использование вышеупомянутого (законного!) голубого окончилось неудачей - фон не стал прозрачным. В то же время, как я уже говорил, можно всё переложить на плечи Excel и при чтении из файла:
X++:
static void Job198_2(Args _args)
{
    ComExcelDocument_RU doc = new ComExcelDocument_RU();
    Image   image = new Image();

    COM     xlApp;
    COM     wbook;
    COM     activeSheet;
    COM     range;

    COM     shape;
    COM     pf;
    ;
    doc.NewFile('',false);
    wbook = doc.getComDocument();

    xlApp = wbook.Parent();
    activeSheet = xlApp.ActiveSheet();

    shape = activeSheet.Pictures();
    shape = shape.Insert(@'C:\Andre_2000.PNG'); //
    shape = shape.ShapeRange();

    range = activeSheet.Range('B10');
    shape.Top(range.Top());
    shape.Left(range.Left());

    pf = shape.PictureFormat();
    pf.TransparentBackground(-1);
    pf.TransparencyColor(WinAPI::RGB2int(226,240,255)); // голубой

    shape.Select();

    doc.visible(true);
}
Теги
excel, рисунок

 

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

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

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

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