Форум » GUI » Пример экспорта Tsbrowse в разные форматы (Tsb_Export)... » Ответить

Пример экспорта Tsbrowse в разные форматы (Tsb_Export)...

Andrey: Всем привет. Что то у меня цвета с таблицы Tsbrowse не такими экспортируются в XML. Т.е. что-то в библиотеке hbxlsxml цвета по другому получаются... В Tsb2xml.prg цвет задаю так:[pre2] nColor := oBrw:aColumns[nCol]:nClrBack If hb_isBlock( nColor ) nColor := Eval(nColor, oBrw:nAt, nCol, oBrw ) end // в aColors храним массивы ( строка, столбец. стиль ) Aadd( aColors, {nLine, nCol, "S" + hb_ntoc(nColor, 16)} )[/pre2] Может неправильно делаю ?

Ответов - 41, стр: 1 2 3 All

Andrey: Haz пишет: копай лучше ExcelOle , где примерно так uData := Str( uData ) Да, я там уже исправил. Т.е. у себя в модуле. А исходник h_tbrowse.prg - не трогал. Haz пишет: Далеко не уходи в исправлениях т. к. формат ячейки тут не причём. Ну если не задавать формата, то получиться фигня: , т.е. потом самому юзеру придётся формат ставить на колонку. А если задать формат, то всё нормально получается, с разделителем на 2 знака. Я понимаю что может быть другой разделитель, т.е. как в Экселе заданы установки. И сумма колонки теперь считается ! Спасибо за подсказки !

Dima: Andrey пишет: Я понимаю что может быть другой разделитель, т.е. как в Экселе заданы установки. Ну так делай сразу правильно и не через

Haz: Andrey пишет: Ну если не задавать формата Ты с темы не соскакивай вопрос был почему не считает, ответ - потому что строки суммировать эксель не умеет. И формат тут по любому не причём. Как сделать красиво вопроса не было Что касается формата, есть еще разделители групп разрядов и как любят все финансисты - отрицательные числа в скобках и без минуса. Так что и красота у каждого своя


Dima: Подсказка: ищи по форуму GET_SDECIMAL Павел выкладывал а остальные 2 параметра сможешь считать из объекта Excel

Andrey: Спасибо ВАМ !!!

Andrey: Всём привет ! В новой версии МиниГуи 18.07 смотрите пример SAMPLES\Advanced\Tsb_Export В примере: 1) Экспорт Tsbrowse в Word/Excel/OO Calc, форматы файлов: xls/xml/doc/dbf/csv по дефолту - вывод только видимых колонок, но можно задать и свой вывод колонок. 2) Таблица может быть многостроковой (MULTILINE on) и экспорт на лист так же многостроковый. 3) Показ различных видов раскраски таблицы 4) Использование GRADIENTFILL для кнопок на форме 5) Можно загрузить/сохранить Tsbrowse из/в внешнего файла (TSB_NEW_FILE_EXTERN) 6) Величину строк в таблице и кол-во колонок можно задавать в CreateDatos() 7) Время экспорта в тот или иной формат можно посмотреть в _MsgLog.txt Кто сможет сделать для этого примера ещё один экспорт в PDF ? Т.е. нужно на основе Tsb4xlsOle.prg сделать экспорт в PDF. Будет вообще отличный и законченный пример экспорта для МиниГуи.

Andrey: Всем привет. Кто знает, как картинку разместить на листе Экселя ? Какие команды нужно использовать ?

Dima: oRange:=oSheet:Range(osheet:cells(2,1),osheet:cells(2,1)) oExcel:ActiveSheet:Shapes:AddPicture(GetTempFolder()+"\logo.png",.F., .T., oRange:Left, oRange:Top, 78,59)

Andrey: Спасибо Dima !

Andrey: Ну и засада - вывести картинку на лист Экселя. Беру размеры картинки через hb_GetImageSize( cDiskFile ), получаю размеры в пикселах (128х128). Вывожу на лист Экселя - картинка раза в 2 больше оригинала. Беру картинку через буфер обмена и видна БОЛЬШАЯ разница при выводе картинки. Покопал в инете, нашёл интересные данные: Эта хрень, очевидно, меряется в микрософтах. 1000 микрософтов = 1 миллисофт, 1000 миллисофтов = 1 софт. Эталонный экземпляр 1 софта хранится в Парижской Палате Мер и Софтов. В пиксели переводится по формуле 4 пикселя = 3 микрософта. Интересна историческая подоплека появления такой единицы. Когда выбирался размер пикселя, ответственный за это Уильям Ворота (Сиэтл, США), выбрал пиксель равным 1/1024 ширины своей задницы. Когда дело дошло до выбора единицы измерений для свойств .Top и .Left у формы в Экселе, Уильям вспомнил о той своей концепции, и принял за единицу 1/1024 ширины своего зада. Однако он забыл учесть, что ввиду большого коммерческого успеха предыдущих продуктов его фирмы задница Уильяма стала шире на 33.3%. Так получилась новая единица измерения - микрософт.... На счет выбора единици измерений, points это еще не конец спектакля - в том же Access разработчикам очень полюбились твипы (Твип - это 1/1440 дюйма). Вообщем, больше единиц измерений, хороших и разных, даешь..... наверное такой плакат висит в комнате у программистов майкрософта.... Придётся наверное писать свою функцию для Экселя, стандартная функция Экселя - oExcel:ActiveWindow:PointsToScreenPixelsY(128) какую то фигню выдаёт...

Dima: Andrey Ты читал вообще какие параметры ? https://msdn.microsoft.com/en-us/vba/excel-vba/articles/shapes-addpicture-method-excel

Andrey: Dima пишет: Ты читал вообще какие параметры ? Это не читал, читал на могучем: https://msdn.microsoft.com/ru-ru/vba/excel-vba/articles/shapes-addpicture-method-excel Не то, не срабатывает -1 !

Dima: Andrey Можно еще пробнуть oExcel:ActiveSheet:Pictures:Insert

Andrey: Вот Александр сделал для этого функции 2: [pre2] aXY := hb_GetImageSize( cDiskFile ) aImage := { cDiskFile, aXY[1], aXY[2] } oRange:=oSheet:Range(osheet:cells(1,1),osheet:cells(1,1)) oExcel:ActiveSheet:Shapes:AddPicture(aImage[1],0, -1, oRange:Left, oRange:Top, ; PixelToPointX(aImage[2]),PixelToPointY(aImage[3])) ..... /////////////////////////////////////////////////////////////////////////////////////////// Function PixelToPointX(iPixels) Local lngDPI, rPixelToPoint lngDPI = GetDPIX() rPixelToPoint = (iPixels / lngDPI) * 72 Return rPixelToPoint /////////////////////////////////////////////////////////////////////////////////////////// Function PixelToPointY(iPixels) Local lngDPI, rPixelToPoint lngDPI = GetDPIY() rPixelToPoint = (iPixels / lngDPI) * 72 Return rPixelToPoint #pragma BEGINDUMP #include <windows.h> HB_FUNC( GETDPIX ) { HDC hDC = GetDC( GetDesktopWindow() ); hb_retni( ( LONG ) GetDeviceCaps(hDC, LOGPIXELSX) ); return; } HB_FUNC( GETDPIY ) { HDC hDC = GetDC( GetDesktopWindow() ); hb_retni( ( LONG ) GetDeviceCaps(hDC, LOGPIXELSY) ); return; } #pragma ENDDUMP[/pre2]

nick_mi: Вот получил ошибку при попытке экспорта Export to OLE-EXCEL 1 (XLS files) Export to OLE-EXCEL 2 (XLS files) в обеих случаях Excel нормально стартовал и выводил данные Application: C:\MiniGUI\SAMPLES\Advanced\Tsb_Export\demo.exe Date: 10.08.2018 Time: 14:24:06 Time from start: 0 days 0 hours 0 mins 11 secs Error BASE/1132 Bound error: array access Called from TSBROWSE:DRAWSUPER(3769) in module: h_tbrowse.prg Called from TSBROWSE:PAINT(9235) in module: h_tbrowse.prg Called from TSBROWSE:DISPLAY(2447) in module: h_tbrowse.prg Called from TOEXCEL2(951) in module: demo.prg Called from (b)TABLEEXPORT(740) in module: demo.prg Called from _DOCONTROLEVENTPROCEDURE(0) Called from EVENTS(0) Called from INKEYGUI(0) Called from TABLEEXPORT(765) in module: demo.prg Called from (b)MAIN(152) in module: demo.prg Called from _DOCONTROLEVENTPROCEDURE(0) Called from EVENTS(0) Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(0) Called from MAIN(190) in module: demo.prg ----------------------------- System Information ------------------------------ Workstation name...: 195-7104 Active user name...: user Available memory...: 774 MB Current disk.......: C Current directory..: MiniGUI\SAMPLES\Advanced\Tsb_Export Free disk space....: 20933 MB Operating system...: Windows XP 5.1 SP3 MiniGUI version....: Harbour MiniGUI Extended Edition 18.07 (32-bit) Harbour version....: Harbour 3.2.0dev (r1806032230) Harbour built on...: Jun 25 2018 21:32:00 C/C++ compiler.....: Borland C++ 5.5.1 (32-bit) Multi Threading....: NO Current Work Area..: 1 -------------------------- Environmental Information -------------------------- SET ALTERNATE......: OFF SET ALTFILE........: SET AUTOPEN........: ON SET AUTORDER.......: 0 SET AUTOSHARE......: 0 SET CENTURY........: ON SET COUNT..........: 0 SET DATE FORMAT....: DD.MM.YYYY SET DBFLOCKSCHEME..: 0 SET DEBUG..........: OFF SET DECIMALS.......: 4 SET DEFAULT........: SET DEFEXTENSIONS..: ON SET DELETED........: OFF SET DELIMCHARS.....: :: SET DELIMETERS.....: OFF SET DIRCASE........: 0 SET DIRSEPARATOR...: \ SET EOL............: 13 SET EPOCH..........: 2000 SET ERRORLOG.......: C:\MiniGUI\SAMPLES\Advanced\Tsb_Export\ErrorLog.htm SET EXACT..........: ON SET EXCLUSIVE......: ON SET EXTRA..........: OFF SET EXTRAFILE......: SET FILECASE.......: 0 SET FIXED..........: OFF SET FORCEOPT.......: OFF SET HARDCOMMIT.....: ON SET IDLEREPEAT.....: ON SET LANGUAGE.......: en SET MARGIN.........: 0 SET MBLOCKSIZE.....: 64 SET MFILEEXT.......: SET OPTIMIZE.......: ON SET PATH...........: SET PRINTER........: OFF SET PRINTFILE......: LPT1 SET SOFTSEEK.......: OFF SET TRIMFILENAME...: .F. SET UNIQUE.........: OFF -------------------------- Detailed Work Area Items --------------------------- --------------------- Internal Error Handling Information --------------------- Subsystem Call ....: BASE System Code .......: 1132 Default Status ....: .F. Description .......: Bound error Operation .........: array access Involved File .....: Dos Error Code ....: 0 +++++++++++++++++++++++++ Available Memory Variables ++++++++++++++++++++++++++

gfilatov2002: nick_mi пишет: получил ошибку при попытке экспорта Благодарю за ссобщение. Поправил исходник библиотеки TsBrowse для следующей сборки

Andrey: nick_mi пишет: Вот получил ошибку при попытке экспорта А другой экспорт "New: Export to Ole-Excel 1 (xls)" - работает ?

nick_mi: Да! Все остальные части нормально отработали

Andrey: Всем привет ! А можно как то убрать белые края на иконках в Tsbrowse ? Если картинка квадратная, то красиво получается, а если нет то вот так получается:

Andrey: Сделал добавление в пример (версия 9.7 - отправлена Григорию). Вывод картинки и подзаголовка для модулей Tsb4DocOle.prg и Tsb4xlsOle.prg Забыл ранее написать в чем разница эскпорт-ов: 1) Модуль - h_tbrowse.prg в библиотеке MiniGUI\SOURCE\TsBrowse и Tsb2xlsOleExtern.prg 2) Модуль - Tsb2doc.prg Экспорт через буфер обмена. При маленьких таблицах работает отлично, на больших таблицах НЕЛЬЗЯ делать другую работу, пока таблица не создастся. Юзера вечно открывают другие документы и начинают copy/paste использовать. В результате в таблице пишется фигня всякая.... И вообще, очень нестабилен это метод. 3) Модуль - Tsb4xlsOle.prg Экспорт через создание таблицы через массив ! Самый быстрый метод ! Большое спасибо за него, Pasha ! Таблица пишется блоками и их количество можно менять: [pre2]#define LINE_WRITE 100 // Количество строк для записи блоками [/pre2] 4) Модуль - Tsb4DocOle.prg Экспорт через метод Word'a создание таблицы. [pre2]oPar:Range:ConvertToTable(WordSeparatorBox,nRowDbf,nColDbf)[/pre2]



полная версия страницы