|
23.03.2007, 08:53 | #1 |
Участник
|
Добрый день.
При использовании 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 |
Участник
|
Посмитрите здесь http://forum.mazzy.ru/index.php?act=findpost&pid=20089, если не ошибаюсь там есть ответ и на этот вопрос.
|
|
23.03.2007, 10:34 | #3 |
Участник
|
А он не расчитан на выгрузку на несколько листов. Хотя бы потому что ключом является координата ячейки без привязки к листу. Всетаки стандартный ExcelBuffer слабоват. Мы тут с Randrews'ом дорабатывали его по мелочам, в частности и этот момент тоже В принципе, если очистить от всяких ненужностей, то можно и сюда выложить
|
|
23.03.2007, 11:28 | #4 |
Участник
|
ОК
|
|
23.03.2007, 15:44 | #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; //обязательный атрибут перехода, без него не покатит |
|
26.03.2007, 06:50 | #6 |
Участник
|
Спасибо
Создал в 370 функцию по принципу и все работает |
|
23.03.2007, 17:45 | #7 |
Участник
|
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; |
|
24.06.2007, 17:49 | #8 |
Участник
|
Цитата:
Сообщение от 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.". Что делать, почему так происходит? |
|
26.03.2007, 13:27 | #9 |
Участник
|
Хоть это уже не актуально, но может в будущем кто будет читать тему
Главное забыл сказать в вышеописанном алгоритме Worksheet Name - в конец первичного ключа еще добавить надо |
|
24.05.2007, 21:46 | #10 |
Участник
|
Можноперед созданием новой странницы старые данные из буфера выгружать, а потом его заполнять заново для новой страницы?
|
|
25.05.2007, 12:15 | #11 |
Участник
|
Как мне кажется, проще сразу писать в excel, без Excel buffer,
так как возможности у Excel buffer довольно слабенькие, и для создания отчетов со сложным форматированием не очень подходит. Или потом приходится форматировать заново, а если напрямую в Excel, то вас ничего не держит, хотите шейпы туда вставляйте, хотите еще чего.... PS Доработкой Excel buffer занимались, как я знаю, не один и не два человека среда знакомых навизионеров, потом надоело, стали выгружать в Excel напрямую. |
|
25.05.2007, 13:28 | #12 |
Участник
|
Цитата:
Сообщение от Forward
Как мне кажется, проще сразу писать в excel, без Excel buffer,
так как возможности у Excel buffer довольно слабенькие, и для создания отчетов со сложным форматированием не очень подходит. Или потом приходится форматировать заново, а если напрямую в Excel, то вас ничего не держит, хотите шейпы туда вставляйте, хотите еще чего.... PS Доработкой Excel buffer занимались, как я знаю, не один и не два человека среда знакомых навизионеров, потом надоело, стали выгружать в Excel напрямую. Ну вот насущный вопрос, как можно выгружать картинки в excel, bили второй вариант - хранить в базе поля с именем файла, а в эксель подставлять уже эти файлы? |
|
25.05.2007, 14:06 | #13 |
Участник
|
Ну если навскидку, то вот пример
Код: 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 | #14 |
Участник
|
Так будет правильно:
Код: 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 | #15 |
Участник
|
Спасибо большое, как будет время обязательно попробую
|
|