Форум » [x]Harbour » Снова EXCEL (продолжение) » Ответить

Снова EXCEL (продолжение)

Dima: Ранее с Excel из Harbour ни когда не работал. Поставили тут задачу. У некоторых поставщиков есть определенные формы заказов. Набраны они в Excel. Сейчас народ руками заполняет эти формы и шлет по электронке поставщикам. Задача сводится к тому что бы в этих формах находить нужные коды товара и в нужной ячейке проставлять заказ. Может ткнет кто носом с чего начать что бы не напороться на грабли. Спасибо Сами формы тут http://zalil.ru/33279066

Ответов - 121, стр: 1 2 3 4 5 6 7 All

Oskar_AAA: Dima вылетает по ошибке Warning W8065 Call to function 'HB_ISNUM' with no prototype in function HB_FUN_SHOWWINDOW вот фрагмент головного модуля... Procedure MAIN(Shifr) //INGAZ # Include 'Achoice.Ch' # Include 'Inkey.Ch' # Include 'Directry.Ch' # Include 'Setcurs.Ch' # Include 'Dbstruct.Ch' # Include 'Command.Ch' # Include 'Dbedit.Ch' # Include 'Excel.Ch' # Include 'Hbgtinfo.Ch' # Include 'Dbedit.Ch' Public Ctitle Ctitle:='INGAZ' C_Title=Ctitle+'.EXE' // SetConsoleTitle(cTitle) hWnd := FindWindow( cTitle ) DeleteCloseButton( hWnd ) #PRAGMA BEGINDUMP # include "Hbapi.h" # include "Windows.h" # include "Hbapiitm.h" HB_FUNC( SETCONSOLETITLE ) { hb_retl( SetConsoleTitle( hb_parc( 1 ) ) ) ; } HB_FUNC( FINDWINDOW ) { hb_retnl( (LONG)FindWindow( NULL, hb_parc( 1 ) ) ) ; } HB_FUNC( DELETECLOSEBUTTON ) { DeleteMenu(GetSystemMenu( (HWND)hb_parnl( 1 ), FALSE), SC_CLOSE, MF_BYCOMMAND ) ; DrawMenuBar( (HWND)hb_parnl( 1 ) ) ; } HB_FUNC_STATIC( SETFILEAPIS ) // OEM { SetFileApisToOEM(); } HB_FUNC (GETFOREGROUNDWINDOW) { HWND hWnd = GetForegroundWindow(); hb_retnl ((LONG) hWnd); } HB_FUNC( BRINGWINDOWTOTOP ) { BringWindowToTop( ( HWND ) hb_parnl( 1 ) ); } HB_FUNC( SHOWWINDOW ) { ShowWindow( ( HWND ) hb_parnl( 1 ), HB_ISNUM( 2 ) ? hb_parni( 2 ) : SW_SHOW ); } HB_FUNC( SETFOCUS ) { hb_retnl( ( LONG_PTR ) SetFocus( ( HWND ) hb_parnl( 1 ) ) ); } HB_FUNC( SETFOREGROUNDWINDOW ) { SetForegroundWindow( ( HWND ) hb_parnl( 1 ) ); } #pragma ENDDUMP // REQUEST HB_CODEPAGE_RU866 REQUEST DBFCDX,DBFFPT HB_SetCodePage( "RU866" ) RDDSetDefault('DBFCDX') SetMode(25,80)

Dima: Oskar_AAA пишет: вылетает по ошибке Warning W8065 Call to function 'HB_ISNUM' Нужно смотреть какой аналог этой функции в Xharbour , я "сижу" на Harbour

Pasha: ISNUM( 2 ) регистр существенен.

Oskar_AAA: Коллеги, функция SETCONSOLETITLE (удаление возможности закрыть программу по "крестику") работает не зависимо от регистра.. в HbApi.h нашел #define ISNUM( n ) ( hb_param( n, HB_IT_NUMERIC ) != NULL )

Dima: Oskar_AAA пишет: Коллеги, функция SETCONSOLETITLE (удаление возможности закрыть программу по "крестику") работает не зависимо от регистра.. Не вижу связи крестика и функции что рисует заголовок у окна. Или я вопрос не понял ?

Oskar_AAA: Pasha пишет: ISNUM( 2 ) регистр существенен.

Oskar_AAA: Добрый вечер, с Вашей помощью вот что получилось: В головной программе, после вывода меню на экран Handl_Win=GetForeGroundWindow() ?Handl_Win 5178634 далее обработка БД и создание Xls файлов (43 шт) создание из макета сводного отчета Xls с 42 листами oExcel_S:=ToleAuto():New("Excel.Application") oExcel_S:Workbooks:Open(Day_Excel) oExcel_S:Set("DisplayAlerts",.F.) oExcel_S:Visible :=.T. // ¢¨§ã «¨§ æ¨ï ᢮¤-®£® ®âç¥â  oBook_S :=oExcel_S:ActiveWorkBook oAs_S :=oExcel_S:ActiveSheet() oSheet_S:=oBook_S :Sheets(1):Select() oSheet_S:=oBook_S :Sheets(1) oAs_S :Cells(1,15):Select() oSheet_S:Cells(1,15):Value=Cdata // ¤ â  ®âç¥â  oSheet_S:Cells(1,18):Value=Bom(Cdata) // ¤ â  - ç «  ¬¥áïæ  oAs_S :Cells(1,1):Select() // ShowWindow(Handl_Win) BringWindowToTop(Handl_Win) SetFocus(Handl_Win) ?Handl_Win 5178634 wait перехода (активации) к программе из Excel не происходит... что сделано не так???

Andrey: Oskar_AAA пишет: перехода (активации) к программе из Excel не происходит... что сделано не так??? Найди хендл окна Excel и потом переключись на него ! Хенд у окна Excel получить просто - смотреть пример ExcelOle.prg .... выложил готовые примеры у Григория на сайте - http://hmgextended.com/applications.html [pre2] // окно таблицы Excel на передний план hWnd := oExcel:hWnd ShowWindow( hWnd, 6 ) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 INKEYGUI(100) ShowWindow( hWnd, 3 ) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 BringWindowToTop( hWnd ) [/pre2]

Oskar_AAA: Andrey окно Excel и так является активным, мне надо его сделать видимым но не активным, т.е пусть будет на экране в фоновом режиме... или если Хенд Excel просто получить, надо сделать окно таблицы на второй план как? Спасибо. Посмотрю ссылки Григория

Dima: Oskar_AAA пишет: ShowWindow(Handl_Win) Тут имеет значение 2 параметр если не ошибаюсь. Андрей уже показал. У Вас его нет совсем.

Oskar_AAA: поставил из из его модуля hWnd := oExcel_S:hWnd ShowWindow( hWnd, 6 ) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 окно Excel стало маленьким, но осталось на переднем плане, как его сделать на ВТОРОМ плане?

fil: Поменять Z-последовательность окна можно через SetWindowPos, а проще ShowWindow другого-какого окна вот Excel и уйдет в фон. Можно свое окно посадить на передний план

Oskar_AAA: FIL Как свое окно СНОВА посадить на Передний план (вычислил Хедлы по своей программе и Excel). но : в головном модуле: Askar_Win=GetForeGroundWindow() hWnd := oExcel_S:hWnd *ShowWindow(hWnd,6) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 ShowWindow(hWnd,3) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 // ShowWindow(Askar_Win,3) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 BringWindowToTop(Askar_Win) на передний план сове окно не возвращается..

fil: SetWindowPos(hWnd, -1, 0,0,0,0,3)

Dima: Oskar_AAA А если так [pre2] if isiconic(Askar_Win) SetForeGroundWindow(Askar_Win) endif ShowWindow(Askar_Win, 9) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 RESTORE=9 BringWindowToTop(Askar_Win) [/pre2] Задача под каким терминалом собрана ? Под GTWVT у меня такая связка работает.

Oskar_AAA: Dima попробуем, рахмат... программа xHarbour - консольный 25 х 80,

Oskar_AAA: Dima где взять функцию Isconic()? if isiconic(Askar_Win) ///

Andrey: Oskar_AAA пишет: где взять функцию Isconic()? Смотри в этой ветке Пост N: 5282 HB_FUNC( ISICONIC )

Oskar_AAA: ok

Dima: Oskar_AAA Наваял простой пример на Harbour , терминал STD. Запускаем пример и после куда то переключаемся. Через 10 секунд , окно примера появляется , но окно фокус ввода не получает , даже если и указать Setfocus(Askar_Win). Но если собрать под терминалом GTWVT , добавив REQUEST HB_GT_WVT_DEFAULT то все работает , как я выше и писал. PS Может Паша или Пётр чего подскажут [pre2] ? "Test" Askar_Win:=GETFOREGROUNDWINDOW() Inkey(10) if isiconic(Askar_Win) SetForeGroundWindow(Askar_Win) endif ShowWindow(Askar_Win, 9) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 RESTORE=9 BringWindowToTop(Askar_Win) wait ************** #pragma BEGINDUMP #include <windows.h> #include <hbapi.h> #include "hbapiitm.h" HB_FUNC (GETFOREGROUNDWINDOW) { HWND hWnd = GetForegroundWindow(); hb_retnl ((LONG) hWnd); } HB_FUNC( BRINGWINDOWTOTOP ) { BringWindowToTop( ( HWND ) hb_parnl( 1 ) ); } HB_FUNC( ISICONIC ) { hb_retl( IsIconic( ( HWND ) hb_parnl( 1 ) ) ); } HB_FUNC( SHOWWINDOW ) { ShowWindow( ( HWND ) hb_parnl( 1 ), HB_ISNUM( 2 ) ? hb_parni( 2 ) : SW_SHOW ); } HB_FUNC( SETFOCUS ) { hb_retnl( ( LONG_PTR ) SetFocus( ( HWND ) hb_parnl( 1 ) ) ); } HB_FUNC( SETFOREGROUNDWINDOW ) { SetForegroundWindow( ( HWND ) hb_parnl( 1 ) ); } #pragma ENDDUMP [/pre2]



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