|
![]() |
#1 |
MCTS
|
Цитата:
Метод "PasteSpecial" в COM-объекте класса "_Worksheet" возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: Метод PasteSpecial из класса Worksheet завершен неверно.
Цитата:
Прозрачность можно придать в самом Excel'е. Надо только знать RGB цвета, который делать прозрачным. Следующий VBA-код делает прозрачным белый цвет - RGB(255,255,255):
X++: image.transparency(true, ) |
|
![]() |
#2 |
Moderator
|
Ну, в общем, у меня манипуляциями в 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)); } |
|
![]() |
#3 |
Участник
|
Custav по вашему примеру работает, но
делаю вместо image.captureScreen() - image.loadFile("C:\\png.png"); фон серый и непрозрачный, хотя в самом рисунке прозрачный, может - Image.loadFile() - такую фигню делает? да,уж .. при сохранении файла в *.jpg - все работает... Последний раз редактировалось PPL; 19.05.2009 в 07:18. |
|
![]() |
#4 |
Moderator
|
Мда, интересное поведение у этой прозрачности... Похоже, действительно что-то где-то глючит...
Заимствовал PNG-файл Ивана Кашперука из этого сообщения Поздравления (Репутация и Количество сообщений): Положил его в корень диска 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); } 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); } |
|