![]() |
#1 |
Участник
|
Добрый день.
При использовании table 370 (Excel buffer) не могу почему - то сделать выгрузку с несколькими листами. Команда ExcelBuf.CreateSheet('report 1','Description',COMPANYNAME,USERID); создает лист, но если потом использовать ExcelBuf.CreateSheet('report 2','Description',COMPANYNAME,USERID); то первый лист исчезает. Это наверно ограничения OLE в Excel. Если причина в другом, подскажите. |
|
![]() |
#2 |
Участник
|
Посмитрите здесь http://forum.mazzy.ru/index.php?act=findpost&pid=20089, если не ошибаюсь там есть ответ и на этот вопрос.
|
|
![]() |
#3 |
Участник
|
А он не расчитан на выгрузку на несколько листов. Хотя бы потому что ключом является координата ячейки без привязки к листу. Всетаки стандартный ExcelBuffer слабоват. Мы тут с Randrews'ом дорабатывали его по мелочам, в частности и этот момент тоже
![]() ![]() |
|
![]() |
#4 |
Участник
|
ОК
|
|
![]() |
#5 |
Участник
|
Цитата:
Сообщение от 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; //обязательный атрибут перехода, без него не покатит |
|
![]() |
#6 |
Участник
|
To Fordewind - мы долго могем все это в порядок приводить
![]() Если есть шаблон, то примерно так: Добавьте в 370 таблицу Поле "Worksheet Name" Ключ "Worksheet Name","Row No.","Column No." В SaveCellsToExcelInWshs() в самом начале отсортируйте таблицу по этому ключу В цикле Код: IF CurrWsh <> "Worksheet Name" THEN BEGIN CurrWsh := "Worksheet Name"; SelectSheet(CurrWsh); END; Ф-я SelectSheet: Код: XlWorkSheet := XlWorkBook.Worksheets.Item(Caption); XlWorkSheet.Activate; |
|
![]() |
#7 |
Участник
|
Спасибо
Создал в 370 функцию по принципу и все работает |
|
![]() |
#8 |
Участник
|
Хоть это уже не актуально, но может в будущем кто будет читать тему
![]() Главное забыл сказать в вышеописанном алгоритме ![]() Worksheet Name - в конец первичного ключа еще добавить надо ![]() |
|
![]() |
#9 |
Участник
|
Можноперед созданием новой странницы старые данные из буфера выгружать, а потом его заполнять заново для новой страницы?
|
|
![]() |
#10 |
Участник
|
Как мне кажется, проще сразу писать в excel, без Excel buffer,
так как возможности у Excel buffer довольно слабенькие, и для создания отчетов со сложным форматированием не очень подходит. Или потом приходится форматировать заново, а если напрямую в Excel, то вас ничего не держит, хотите шейпы туда вставляйте, хотите еще чего.... PS Доработкой Excel buffer занимались, как я знаю, не один и не два человека среда знакомых навизионеров, потом надоело, стали выгружать в Excel напрямую. |
|
![]() |
#11 |
Участник
|
Цитата:
Сообщение от Forward
![]() Как мне кажется, проще сразу писать в excel, без Excel buffer,
так как возможности у Excel buffer довольно слабенькие, и для создания отчетов со сложным форматированием не очень подходит. Или потом приходится форматировать заново, а если напрямую в Excel, то вас ничего не держит, хотите шейпы туда вставляйте, хотите еще чего.... PS Доработкой Excel buffer занимались, как я знаю, не один и не два человека среда знакомых навизионеров, потом надоело, стали выгружать в Excel напрямую. Ну вот насущный вопрос, как можно выгружать картинки в excel, bили второй вариант - хранить в базе поля с именем файла, а в эксель подставлять уже эти файлы? |
|
![]() |
#12 |
Участник
|
Ну если навскидку, то вот пример
Код: 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 Не смог вообразить для какой задачи это нужно? Расскажите, если не секрет конечно? |
|
![]() |
#13 |
Участник
|
Так будет правильно:
Код: 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); |
|
![]() |
#14 |
Участник
|
Спасибо большое, как будет время обязательно попробую
|
|
![]() |
#15 |
Участник
|
Цитата:
Сообщение от 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; Ф-я SelectSheet: Код: XlWorkSheet := XlWorkBook.Worksheets.Item(Caption); XlWorkSheet.Activate; TempExcelBuffer.SETCURRENTKEY("Worksheet Name","Row No.","Column No."); но по-прежнему ключ в таблице остался "Row No.","Column No.". Что делать, почему так происходит? |
|