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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.08.2011, 17:15   #1  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Доброго времени суток, товарищи!
Есть требование, что бы некий отчёт формировался в Эксель. Экспорт в Excel я делаю не через таблицу Excel Buffer (370), а через Automation, так больше возможностей по работе с Экселем. И всё бы ничего, если бы в этот Эксель не нужно было ещё и картинки выгружать из Нава. Так вот, не подскажет ли кто, как выгрузить картинку из Нава в Эксель?
Или может кто может подсказать, где взять хороший хелп по Automation, а то я как-то искал, но ничего толкового так и не нашёл
Спасибо за внимание!
Старый 28.08.2011, 07:02   #2  
Thrice is offline
Thrice
Участник
Аватар для Thrice
 
46 / 10 (1) +
Регистрация: 09.07.2008
была подобная задачка для формирования Прайс Листа, сделал так:

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  
GRIZZLY_imported is offline
GRIZZLY_imported
Участник
 
39 / 10 (1) +
Регистрация: 18.05.2007
Цитата:
Сообщение от Predatore Посмотреть сообщение
Или может кто может подсказать, где взять хороший хелп по Automation, а то я как-то искал, но ничего толкового так и не нашёл Спасибо за внимание!
Ничего лучше встроенного по VBA не встречал
Старый 29.08.2011, 12:54   #4  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Отлично!!! Спасибо огромное!
Вот только никак не разберусь, что делать если мне не нужно масштабировать картинки? Мне нужно выгружать их в реальном размере, которого у меня никак не получается узнать
Старый 29.08.2011, 14:45   #5  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Цитата:
Сообщение от Predatore Посмотреть сообщение
Вот только никак не разберусь, что делать если мне не нужно масштабировать картинки? Мне нужно выгружать их в реальном размере, которого у меня никак не получается узнать
Ковыряние в VBA привело вот к такой строчке ActiveSheet.Pictures.Insert (PicturePath), которая замечательно работает в Эксесле, но в Наве ругается на то, что не знает, что такое Insert (Не знаю, принципиально ли то, что вместо 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
Только в этом случае, я не могу найти Picture в Наве. Нашёл другой объект, называется Graphic, но когда я пытаюсь скомпилить в Наве
Код:
Graphic :=  XlRange.Parent.Pictures.Insert(PicturePath);
Он опять же ругается на то, что не знает что такое Insert
Старый 29.08.2011, 14:54   #6  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Predatore Посмотреть сообщение
Он опять же ругается на то, что не знает что такое Insert
Попробуйте описать ряд промежуточных объектов в коде, чтобы получилось ОБЪЕКТ.Insert(). Нав иногда не воспринимает ОБЪЕКТ.ОБЪЕКТ.Метод
Старый 29.08.2011, 17:02   #7  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Цитата:
Сообщение от romeo Посмотреть сообщение
Попробуйте описать ряд промежуточных объектов в коде, чтобы получилось ОБЪЕКТ.Insert(). Нав иногда не воспринимает ОБЪЕКТ.ОБЪЕКТ.Метод
Я тут MSDN покапал, проблема в том, что Pictures является скрытым Методом, т.е. к нему невозможно обратиться вне VBA. Что есть очень печально.
Сейчас пока вижу только один выход: выгружать картинку из Нава в файл, в Эксель писать в ячейку какой-нибудь флаг и уже из самого экселя реагировать на этот флаг и самостоятельно загружать картинку через Pictures. Метод этот мне совершенно не нравится, поэтому если у кого есть какие соображения, как можно узнать размер картинки в Наве или как вставить в Эксель картинку оригинального размера, я бы с удовольствием их выслушал.
Старый 29.08.2011, 17:13   #8  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
У нас работает вот это
xlShape := xlWorkSheet.Shapes.AddPicture(FileName, 1, 1, Left, Top, Width, Height);
не помню, что это за 1, 1, но остальные аргументы - отступ слева, справа, ширина, высота. Не знаю, что будет если поиграться с аргументами ширина, высота или вообще не указывать их.
Старый 29.08.2011, 17:42   #9  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Цитата:
Сообщение от romeo Посмотреть сообщение
У нас работает вот это
xlShape := xlWorkSheet.Shapes.AddPicture(FileName, 1, 1, Left, Top, Width, Height);
не помню, что это за 1, 1, но остальные аргументы - отступ слева, справа, ширина, высота. Не знаю, что будет если поиграться с аргументами ширина, высота или вообще не указывать их.
Это у меня тоже работает. Первая 1 я не совсем понял что значит, вторая это "не сохранять" картинку при сохранении файла. Что бы сохранять, должно быть -1.
Проблема только в том, что мне не известны оригинальные значения Width и Height картинки. И картинки у меня идут с различными соотношением высоты и ширины. А так бы отмасштабировал бы их в один размер и делов то.
Старый 07.09.2011, 20:52   #10  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
У меня вопрос, который уже не касается картинок, но новую тему решил не создавать, т.к. вопрос опять же по Экселю.
И так, есть шаблон, в который выгружаются строки. Проблема в том, что строки эти группируются в отдельные блоки. У каждого такого блока есть хедер и футер. Т.е. сначала идёт строка с хедером, потом строки заказа, потом футер, потом снова хедер, другие строки заказа и т.д. Всё это красиво оформляется, разными цветами, границами...
В чём собственно проблема. Проблема в том, что у меня 3 шаблона строки. А я не могу копировать строки в Экселе из Навижена Т.е. пока я рисую строки заказа, всё хорошо, при вставке новой строки, она копирует форматирование из предыдущей (первый хедер - он же шаблон, уже нарисован). Потом дело доходит до футера (он тоже уже есть т.к. является шаблоном). А вот потом мне нужно вставить хедер для другой пачки строк. Я хочу скопировать строку с моим шаблонным хедером, и вставить её, но у меня это не получается!
Я делаю так:
Код:
xlRange := xlWorkSheet.Range ('A1');  
 xlRange.EntireRow.Copy;

xlRange := xlWorkSheet.Range ('A10')
 xlRange.EntireRow.Insert;
Строки у меня исправно вставляются, но нифига не копируются
Старый 08.09.2011, 11:06   #11  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
Попробуйте вместо xlRange.EntireRow.Insert написать xlWorkSheet.Paste
Старый 08.09.2011, 12:43   #12  
.Quattro. is offline
.Quattro.
Участник
Лучший по профессии 2009
 
194 / 22 (1) +++
Регистрация: 22.05.2006
Я таким образом копирую строки:
Код:
XlSelection := xlSheet.Range(STRSUBSTNO('%1:%1',RowNo));
XlSelection.Copy;
xlRange := xlSheet.Range(STRSUBSTNO('%1:%1',RowNo + 1));
xlRange.Insert;
xlApp.CutCopyMode(0);
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:38.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.