|  26.08.2011, 17:15 | #1 | 
| Участник | 
			
			Доброго времени суток, товарищи! Есть требование, что бы некий отчёт формировался в Эксель. Экспорт в Excel я делаю не через таблицу Excel Buffer (370), а через Automation, так больше возможностей по работе с Экселем. И всё бы ничего, если бы в этот Эксель не нужно было ещё и картинки выгружать из Нава. Так вот, не подскажет ли кто, как выгрузить картинку из Нава в Эксель? Или может кто может подсказать, где взять хороший хелп по Automation, а то я как-то искал, но ничего толкового так и не нашёл  Спасибо за внимание! | 
|  | 
|  28.08.2011, 07:02 | #2 | 
| Участник | 
			
			была подобная задачка для формирования Прайс Листа, сделал так: Name DataType Subtype Length vr Boolean PicInt Integer PicTop Decimal PictureFile File PicLeft Integer PicLeft:=580; vr:=EVALUATE(PicInt,Cnt); PicTop:=XlWrkSht.Range('H1:H'+FORMAT(PicInt-1)).Height; PictureFile.CREATETEMPFILE; PicturePath:=PictureFile.NAME; PictureFile.CLOSE; "Picture/Text".EXPORT(PicturePath,FALSE); XlWrkSht.Range('c' + Cnt+':h' + Cnt).RowHeight:=40; XlWrkSht.Shapes.AddPicture(PicturePath, 1, 1, PicLeft, PicTop-40,40,40); выгружаемые рисунки маштабирую до размеров 40*40 Cnt - счетчик строк P.S.: при небольших объемах данных (до 800 строк), все хорошо выгружается во всех версия офиса (2003-2010), но если объем превышает указанное кол-во строк, то на 2003 офисе все идет через Ж..., зато 2007 и 2010 отрабатывают на ура! и еще, если все же надумаете чистить за собой хвосты, в виде временных файлов, то делайте это на OnPostReport() | 
|  | 
|  28.08.2011, 12:14 | #3 | 
| Участник | |
|  | 
|  29.08.2011, 12:54 | #4 | 
| Участник | 
			
			Отлично!!! Спасибо огромное! Вот только никак не разберусь, что делать если мне не нужно масштабировать картинки? Мне нужно выгружать их в реальном размере, которого у меня никак не получается узнать   | 
|  | 
|  29.08.2011, 14:45 | #5 | 
| Участник | Цитата:  (Не знаю, принципиально ли то, что вместо ActiveSheet, в Наве я использую WorkSheet, как мне кажется, по сути это одно и то же) Так же, облазив инет, наткнулся и на такую штуку, отлично работающую в самом Экселе, огромным приемуществом оной является то, что через Picture, картинкой можно вертеть как угодно. Код: Dim PicRange As Range: Set PicRange = Range("A1:B2")
Dim ph As Picture: Set ph = PicRange.Parent.Pictures.Insert(PicturePath)
ph.Top = PicRange.Top: ph.Left = PicRange.LeftКод: Graphic := XlRange.Parent.Pictures.Insert(PicturePath);   | 
|  | 
|  29.08.2011, 14:54 | #6 | 
| Участник | |
|  | 
|  29.08.2011, 17:02 | #7 | 
| Участник | Цитата: Сейчас пока вижу только один выход: выгружать картинку из Нава в файл, в Эксель писать в ячейку какой-нибудь флаг и уже из самого экселя реагировать на этот флаг и самостоятельно загружать картинку через Pictures. Метод этот мне совершенно не нравится, поэтому если у кого есть какие соображения, как можно узнать размер картинки в Наве или как вставить в Эксель картинку оригинального размера, я бы с удовольствием их выслушал. | 
|  | 
|  29.08.2011, 17:13 | #8 | 
| Участник | 
			
			У нас работает вот это xlShape := xlWorkSheet.Shapes.AddPicture(FileName, 1, 1, Left, Top, Width, Height); не помню, что это за 1, 1, но остальные аргументы - отступ слева, справа, ширина, высота. Не знаю, что будет если поиграться с аргументами ширина, высота или вообще не указывать их. | 
|  | 
|  29.08.2011, 17:42 | #9 | 
| Участник | Цитата: 
		
			Сообщение от romeo
			   У нас работает вот это xlShape := xlWorkSheet.Shapes.AddPicture(FileName, 1, 1, Left, Top, Width, Height); не помню, что это за 1, 1, но остальные аргументы - отступ слева, справа, ширина, высота. Не знаю, что будет если поиграться с аргументами ширина, высота или вообще не указывать их. Проблема только в том, что мне не известны оригинальные значения Width и Height картинки. И картинки у меня идут с различными соотношением высоты и ширины. А так бы отмасштабировал бы их в один размер и делов то. | 
|  | 
|  07.09.2011, 20:52 | #10 | 
| Участник | 
			
			У меня вопрос, который уже не касается картинок, но новую тему решил не создавать, т.к. вопрос опять же по Экселю. И так, есть шаблон, в который выгружаются строки. Проблема в том, что строки эти группируются в отдельные блоки. У каждого такого блока есть хедер и футер. Т.е. сначала идёт строка с хедером, потом строки заказа, потом футер, потом снова хедер, другие строки заказа и т.д. Всё это красиво оформляется, разными цветами, границами... В чём собственно проблема. Проблема в том, что у меня 3 шаблона строки. А я не могу копировать строки в Экселе из Навижена  Т.е. пока я рисую строки заказа, всё хорошо, при вставке новой строки, она копирует форматирование из предыдущей (первый хедер - он же шаблон, уже нарисован). Потом дело доходит до футера (он тоже уже есть т.к. является шаблоном). А вот потом мне нужно вставить хедер для другой пачки строк. Я хочу скопировать строку с моим шаблонным хедером, и вставить её, но у меня это не получается! Я делаю так: Код: xlRange := xlWorkSheet.Range ('A1');  
 xlRange.EntireRow.Copy;
xlRange := xlWorkSheet.Range ('A10')
 xlRange.EntireRow.Insert;  | 
|  | 
|  08.09.2011, 11:06 | #11 | 
| Участник | 
			
			Попробуйте вместо xlRange.EntireRow.Insert написать xlWorkSheet.Paste
		 | 
|  | 
|  08.09.2011, 12:43 | #12 | 
| Участник | 
			
			Я таким образом копирую строки: Код: XlSelection := xlSheet.Range(STRSUBSTNO('%1:%1',RowNo));
XlSelection.Copy;
xlRange := xlSheet.Range(STRSUBSTNO('%1:%1',RowNo + 1));
xlRange.Insert;
xlApp.CutCopyMode(0); | 
|  |