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 |
Участник
|
Цитата:
Так же, облазив инет, наткнулся и на такую штуку, отлично работающую в самом Экселе, огромным приемуществом оной является то, что через 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); |
|