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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.03.2007, 08:53   #1  
Yuri2 is offline
Yuri2
Участник
 
3 / 10 (1) +
Регистрация: 22.03.2007
Добрый день.
При использовании table 370 (Excel buffer) не могу почему - то сделать выгрузку с несколькими листами.
Команда
ExcelBuf.CreateSheet('report 1','Description',COMPANYNAME,USERID);
создает лист, но если потом использовать
ExcelBuf.CreateSheet('report 2','Description',COMPANYNAME,USERID);
то первый лист исчезает.
Это наверно ограничения OLE в Excel.
Если причина в другом, подскажите.
Старый 23.03.2007, 10:10   #2  
satir is offline
satir
Участник
Аватар для satir
 
77 / 10 (1) +
Регистрация: 09.06.2006
Посмитрите здесь http://forum.mazzy.ru/index.php?act=findpost&pid=20089, если не ошибаюсь там есть ответ и на этот вопрос.
Старый 23.03.2007, 10:34   #3  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
А он не расчитан на выгрузку на несколько листов. Хотя бы потому что ключом является координата ячейки без привязки к листу. Всетаки стандартный ExcelBuffer слабоват. Мы тут с Randrews'ом дорабатывали его по мелочам, в частности и этот момент тоже В принципе, если очистить от всяких ненужностей, то можно и сюда выложить
Старый 23.03.2007, 11:28   #4  
Yuri2 is offline
Yuri2
Участник
 
3 / 10 (1) +
Регистрация: 22.03.2007
ОК
Старый 23.03.2007, 15:44   #5  
balashov is offline
balashov
Участник
Аватар для balashov
 
78 / 10 (1) +
Регистрация: 01.09.2005
Цитата:
Сообщение от Yuri2 Посмотреть сообщение
Добрый день.
При использовании table 370 (Excel buffer) не могу почему - то сделать выгрузку с несколькими листами.
Команда
ExcelBuf.CreateSheet('report 1','Description',COMPANYNAME,USERID);
создает лист, но если потом использовать
ExcelBuf.CreateSheet('report 2','Description',COMPANYNAME,USERID);
то первый лист исчезает.
Это наверно ограничения OLE в Excel.
Если причина в другом, подскажите.
новый лист должен добовляться по принципу

Код:
xlsWorksheet := xlsWorkbook.Worksheets.Add;		  
xlsWorksheet.Name := 'Имя Нового листа';
xlsWorksheet.PageSetup.Orientation := 2;
xlsWorksheet.Activate;	  //обязательный атрибут перехода, без него не покатит
Старый 23.03.2007, 17:45   #6  
randrews is offline
randrews
Участник
Аватар для randrews
 
312 / 10 (1) +
Регистрация: 06.12.2004
To Fordewind - мы долго могем все это в порядок приводить

Если есть шаблон, то примерно так:

Добавьте в 370 таблицу
Поле "Worksheet Name"
Ключ "Worksheet Name","Row No.","Column No."
В SaveCellsToExcelInWshs() в самом начале отсортируйте таблицу по этому ключу
В цикле
Код:
	IF CurrWsh <> "Worksheet Name" THEN BEGIN
	  CurrWsh := "Worksheet Name";
	  SelectSheet(CurrWsh);
	END;
Не забудьте CurrWsh инициировать на первом шаге цикла.

Ф-я SelectSheet:
Код:
XlWorkSheet := XlWorkBook.Worksheets.Item(Caption);
XlWorkSheet.Activate;
Если листы заново создаются, то можно поправить код, согласно совету balashov.
Старый 26.03.2007, 06:50   #7  
Yuri2 is offline
Yuri2
Участник
 
3 / 10 (1) +
Регистрация: 22.03.2007
Спасибо
Создал в 370 функцию по принципу
Цитата:
Сообщение от balashov Посмотреть сообщение
новый лист должен добовляться по принципу

Код:
xlsWorksheet := xlsWorkbook.Worksheets.Add;		  
xlsWorksheet.Name := 'Имя Нового листа';
xlsWorksheet.PageSetup.Orientation := 2;
xlsWorksheet.Activate;	  //обязательный атрибут перехода, без него не покатит
и все работает
Старый 26.03.2007, 13:27   #8  
randrews is offline
randrews
Участник
Аватар для randrews
 
312 / 10 (1) +
Регистрация: 06.12.2004
Хоть это уже не актуально, но может в будущем кто будет читать тему

Главное забыл сказать в вышеописанном алгоритме

Worksheet Name - в конец первичного ключа еще добавить надо
Старый 24.05.2007, 21:46   #9  
Padre is offline
Padre
Участник
 
28 / 12 (1) ++
Регистрация: 14.05.2007
Адрес: Санкт - Петербург
Можноперед созданием новой странницы старые данные из буфера выгружать, а потом его заполнять заново для новой страницы?
Старый 25.05.2007, 12:15   #10  
Forward is offline
Forward
Участник
 
101 / 10 (1) +
Регистрация: 21.05.2007
Как мне кажется, проще сразу писать в excel, без Excel buffer,
так как возможности у Excel buffer довольно слабенькие, и для
создания отчетов со сложным форматированием не очень подходит.
Или потом приходится форматировать заново,
а если напрямую в Excel, то вас ничего не держит, хотите шейпы туда вставляйте,
хотите еще чего....

PS Доработкой Excel buffer занимались, как я знаю, не один и не два человека среда знакомых навизионеров,
потом надоело, стали выгружать в Excel напрямую.
Старый 25.05.2007, 13:28   #11  
Padre is offline
Padre
Участник
 
28 / 12 (1) ++
Регистрация: 14.05.2007
Адрес: Санкт - Петербург
Цитата:
Сообщение от Forward Посмотреть сообщение
Как мне кажется, проще сразу писать в excel, без Excel buffer,
так как возможности у Excel buffer довольно слабенькие, и для
создания отчетов со сложным форматированием не очень подходит.
Или потом приходится форматировать заново,
а если напрямую в Excel, то вас ничего не держит, хотите шейпы туда вставляйте,
хотите еще чего....

PS Доработкой Excel buffer занимались, как я знаю, не один и не два человека среда знакомых навизионеров,
потом надоело, стали выгружать в Excel напрямую.
Да согласен, сам с этим согласен.
Ну вот насущный вопрос, как можно выгружать картинки в excel, bили второй вариант - хранить в базе поля с именем файла, а в эксель подставлять уже эти файлы?
Старый 25.05.2007, 14:06   #12  
Forward is offline
Forward
Участник
 
101 / 10 (1) +
Регистрация: 21.05.2007
Ну если навскидку, то вот пример

Код:
  CREATE(xlApp);
  xlBook := xlApp.Workbooks.Add;
  xlSheet := xlBook.Worksheets.Item(1);
  xlSheet.Name := 'test';
recCompanyInf.FINDFIRST;
recCompanyInf.CALCFIELDS(Picture);
recCompanyInf.Picture.EXPORT('c:\temp.bmp');

xlSheet.Shapes.AddPicture('c:\temp.bmp', 1, 1, 100 ,100, 100, 100);

Хотя в принципе это больше к программированию Excel вопрос =).
Там добавить можно 3мя различными способами, не уверен, все ли работают в Nаv, но думаю что все.
Смотрите object browser в excel, там всего много.

PS Не смог вообразить для какой задачи это нужно?
Расскажите, если не секрет конечно?
Старый 25.05.2007, 15:02   #13  
Forward is offline
Forward
Участник
 
101 / 10 (1) +
Регистрация: 21.05.2007
Так будет правильно:

Код:
Name	DataType	Subtype	Length
recCompanyInf	Record	Company Information	
xlApp	Automation	'Microsoft Excel 11.0 Object Library'.Application	
xlSheet	Automation	'Microsoft Excel 11.0 Object Library'.Worksheet	
xlBook	Automation	'Microsoft Excel 11.0 Object Library'.Workbook	

CREATE(xlApp);
xlBook := xlApp.Workbooks.Add;
xlSheet := xlBook.Worksheets.Item(1);
xlSheet.Name := 'test';
recCompanyInf.FINDFIRST;
recCompanyInf.CALCFIELDS(Picture);
recCompanyInf.Picture.EXPORT('c:\temp.bmp');

xlSheet.Shapes.AddPicture('c:\temp.bmp', 1, 1, 0 ,0, 0, 0);
xlSheet.Shapes.Item(1).ScaleHeight(1, 1);  //"Реанимируем" оригинальный размер картинки
xlSheet.Shapes.Item(1).ScaleWidth(1, 1);


Report - OnPostReport()
xlApp.Visible(TRUE);
xlApp.UserControl(TRUE);
Старый 25.05.2007, 15:53   #14  
Padre is offline
Padre
Участник
 
28 / 12 (1) ++
Регистрация: 14.05.2007
Адрес: Санкт - Петербург
Спасибо большое, как будет время обязательно попробую
Старый 24.06.2007, 17:49   #15  
Evgenia26 is offline
Evgenia26
Участник
 
14 / 10 (1) +
Регистрация: 15.04.2007
Цитата:
Сообщение от randrews Посмотреть сообщение
To Fordewind - мы долго могем все это в порядок приводить

Если есть шаблон, то примерно так:

Добавьте в 370 таблицу
Поле "Worksheet Name"
Ключ "Worksheet Name","Row No.","Column No."
В SaveCellsToExcelInWshs() в самом начале отсортируйте таблицу по этому ключу
В цикле
Код:
	IF CurrWsh <> "Worksheet Name" THEN BEGIN
	  CurrWsh := "Worksheet Name";
	  SelectSheet(CurrWsh);
	END;
Не забудьте CurrWsh инициировать на первом шаге цикла.

Ф-я SelectSheet:
Код:
XlWorkSheet := XlWorkBook.Worksheets.Item(Caption);
XlWorkSheet.Activate;
Если листы заново создаются, то можно поправить код, согласно совету balashov.
Подскажите, пожалуйста, в я пыпаюсь отсортировать таблицу excel buffer по ключу "Worksheet Name","Row No.","Column No."

TempExcelBuffer.SETCURRENTKEY("Worksheet Name","Row No.","Column No.");

но по-прежнему ключ в таблице остался "Row No.","Column No.". Что делать, почему так происходит?
 


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

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

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