On-line: Andrey, гостей 0. Всего: 1 [подробнее..]
АвторСообщение
администратор




Пост N: 2372
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.05.12 16:52. Заголовок: Снова EXCEL (продолжение)


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

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 202 , стр: 1 2 3 4 5 6 7 8 9 10 11 All [только новые]





Пост N: 112
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 06.01.17 17:37. Заголовок: Dima программа xHarb..


Dima
программа xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6476).
консольная (25 х 80)
REQUEST HB_CODEPAGE_RU866
REQUEST DBFCDX,DBFFPT
HB_SetCodePage( "RU866" )
RDDSetDefault('DBFCDX')
SetMode(25,80)

если
REQUEST HB_GT_WVT
REQUEST HB_GT_WVT_DEFAULT
и подключаю GTWVT.lib при запуске программы выводится сообщение Unrecoverable error 10001 It's not a GUI programm

переделывать под GUI - времени вообще нет...

PS все функции Ваши & Andrey собрались и по ним ошибок при сборке программы нет.

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)
set color to w/n
?hWnd,Askar_Win,Isiconic(Askar_Win)
wait
выдают числовые значения, Isiconic(Askar_Win)= .F.





Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6243
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.01.17 17:45. Заголовок: Oskar_AAA К сожален..


Oskar_AAA
К сожалению по Xharbour ни чего сказать не могу , давно слез с него на Harbour

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 113
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 06.01.17 17:59. Заголовок: Коллеги, получилось..


Коллеги,
получилось в консольном xHarbour управлять окном и размером окна Excel с передачей фокуса на программу.
Dima, Andrey и всем откликнувшемся - Рахмат

# Include 'Achoice.Ch'
# Include 'Command.Ch'
# Include 'Dbedit.Ch'
# Include 'Dbstruct.Ch'
# Include 'Directry.Ch'
# Include 'Excel.Ch'
# Include 'Inkey.Ch'
# Include 'Setcurs.Ch'
# Include 'Hbgtinfo.Ch'
// крестик на окне программы
SetConsoleTitle(CTitle)
hWnd:=FindWindow(CTitle)
DeleteCloseButton(hWnd)
// имена файлов в кириллице
SetFileApis()
// •Ґ-¤« ®Є®-
Public Askar_Win1,Askar_Win2
Askar_Win1=GetForeGroundWindow()
Askar_Win2=GetWindow()
//
REQUEST HB_CODEPAGE_RU866
REQUEST DBFCDX,DBFFPT
HB_SetCodePage( "RU866" )
RDDSetDefault('DBFCDX')
SetMode(25,80)

обработка и так далее (создание временных Excel файлов....)

создание сводного Excel отчета со многими листами из временных Excel файлов
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()
// управление окнами
hWnd := oExcel_S:hWnd
ShowWindow(hWnd,3) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 RESTORE=9
If Askar_Win1>0
SetForeGroundWindow(Askar_Win1)
Endif
ShowWindow(Askar_Win1,9) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 RESTORE=9
BringWindowToTop(Askar_Win1) // вывод программы на ПЕРЕДНИЙ план

сборка листов отчета


#PRAGMA BEGINDUMP
# include "Hbapi.h"
# include "Windows.h"
# include "Hbapiitm.h"
# include "Shlobj.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( SETFILEAPIS ) // OEM
{
SetFileApisToOEM();
}
HB_FUNC( ISICONIC )
{
hb_retl( IsIconic( (HWND) hb_parnl(1)) );
}
// ®ЇаҐ¤Ґ«Ґ-ЁҐ  ЄвЁў-®Ј® ®Є- 
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 ), SW_SHOW );
}
HB_FUNC( SETFOCUS )
{
hb_retnl( ( LONG_PTR ) SetFocus( ( HWND ) hb_parnl( 1 ) ) );
}
HB_FUNC( SETFOREGROUNDWINDOW )
{
SetForegroundWindow( ( HWND ) hb_parnl( 1 ) );
}
HB_FUNC( GETWINDOWTEXT )
{
int iLen = SendMessage( (HWND) hb_parnl(1), WM_GETTEXTLENGTH, 0, 0 ) + 1;
char *cText = ( char * ) hb_xgrab( iLen );

GetWindowText( (HWND) hb_parnl(1), (LPTSTR) cText, iLen );

hb_retc( cText );
hb_xfree( cText );
}

HB_FUNC( GETWINDOW )
{
hb_retnl( (LONG) GetWindow((HWND) hb_parnl(1), hb_parni(2)) );
}
#PRAGMA ENDDUMP



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6244
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.01.17 22:31. Заголовок: Oskar_AAA пишет: и ..


Oskar_AAA пишет:

 цитата:
и подключаю GTWVT.lib при запуске программы выводится сообщение Unrecoverable error 10001 It's not a GUI programm

переделывать под GUI - времени вообще нет...


GUI тут совсем не при чем.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3522
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.01.17 09:53. Заголовок: Здесь: https://suppo..


Здесь: https://support.microsoft.com/ru-ru/kb/124103

написано, как получить hWnd для консоли через вызов FindWindow
так же есть оговорка:

Полученный дескриптор HWND не обязательно подходит для всех операций дескриптор окна.

Если немного модифицировать функции winapi, чтобы проанализировать возвращаемые значения:

HB_FUNC( BRINGWINDOWTOTOP )
{
hb_retnl( BringWindowToTop( ( HWND ) hb_parnl( 1 ) ) );
}

HB_FUNC( SETFOREGROUNDWINDOW )
{
hb_retnl( SetForegroundWindow( ( HWND ) hb_parnl( 1 ) ) );
}

и сделать тест:

Function TestWnd
Local ch := hb_gtinfo(HB_GTI_WINTITLE)
Local hWnd1 := FindWindow(ch)
Local hWnd2 := FindWindow('Паук')

? SETFOREGROUNDWINDOW(hWnd2)
? BringWindowToTop(hWnd2)
Inkey(2)
? SETFOREGROUNDWINDOW(hWnd1)
? BringWindowToTop(hWnd1)
return nil

Запустить игрушку паук, и этот тест.

Результат:

? SETFOREGROUNDWINDOW(hWnd1)
возвращает 0, то есть не работает

Похоже, здесь срабатывает та самая оговорка.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 114
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 08.01.17 12:14. Заголовок: Спасибо, за советы и..


Спасибо, за советы и участие.
Обошелся проверкой на значение GetForeGroundWindow() >0 . Получилось то, что хотел в консоли

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 16
Зарегистрирован: 22.09.13
ссылка на сообщение  Отправлено: 28.01.17 11:28. Заголовок: Надо очистить таблиц..


Надо очистить таблицу от пустых строк.
Что-то из Harbour никак не получается... Может кто подскажет?
Спасибо

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6260
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.01.17 13:33. Заголовок: fokinal21 пишет: На..


fokinal21 пишет:

 цитата:
Надо очистить таблицу от пустых строк


Вопрос не очень понятен.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6262
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.01.17 15:17. Заголовок: fokinal21 Может име..


fokinal21
Может имелось в виду скрыть диапазон строк ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 17
Зарегистрирован: 22.09.13
ссылка на сообщение  Отправлено: 28.01.17 17:25. Заголовок: Есть таблица в Excel..


Есть таблица в Excel, надо удалить пустые строки
В моем частном случае дело упрощается тем, что их можно определить
по пустым ячейкам первого столбца
В vba это решается просто и понятно:


Sub RowDel()
LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
Application.ScreenUpdating = False
For r = LastRow To 1 Step -1
If Application.Rows(r).Columns(1).Value = "" Then Rows(r).Delete
Next r
End Sub

Попытался перевести все это в Harbour и вот что получилось :


Function RowDel()
oExcel := CreateObject( "Excel.Application" )
oExcel:Workbooks:Open(Getfile())
oList := oExcel:Get( "ActiveSheet" )
oExcel:Visible("True")

LastRow:= oList:UsedRange:Row-1 + oList:UsedRange:Rows:Count

For r = LastRow To 1 Step -1
If oExcel:Rows(r):Columns(1):Value <>""
oExcel:Rows(r):Delete()
endif
Next r
return

при этом, если в vba прога срабатывает при Value = "", что логически верно,
то в Harbour все работает при Value <>"" что совсем мне непонятно
Это проверено на простой тестовой таблице - просто заполнил в первом столбце несколько ячеек не подряд
Кроме этого vba спокойно глотает наличие чисел в части ячеек, Harbour падает в ошибку.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1404
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 28.01.17 18:14. Заголовок: За такой перевод пер..


За такой перевод переводчик от технического редактора по рукам может получить

Ближе к теме: вспоминайте, для чего предназначена функция Empty в hb, и countA в vba, а также
посмотрите пример от MVP Dennis Wallentin в топике Range.Row Property (Excel)

Sub Delete_Empty_Rows()
'This example deletes the empty rows from a selected range.


Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 18
Зарегистрирован: 22.09.13
ссылка на сообщение  Отправлено: 28.01.17 19:24. Заголовок: Петр пишет: вспомин..


Петр пишет:

 цитата:
вспоминайте, для чего предназначена функция Empty


Спасибо! С Empty действительно все хорошо, но все же был интерес перевода готового примера
в Harbour. Переведенный пример вполне рабочий (при текстовых заполнениях ячеек), но так и непонятно почему в Harbour все срабатывает при oExcel:Rows(r):Columns(1):Value <>"", может разъясните где логика порылась... А то как-то неспокойно

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1405
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 28.01.17 20:05. Заголовок: fokinal21 пишет: но..


fokinal21 пишет:

 цитата:
но все же был интерес перевода готового примера
в Harbour



Ну так переводите,
только учтите, что при переводе Шекспира на русский используются правила русского языка.

А при переводе этого примера на Harbour правильно было бы учитывать особенности vba, Excell и Harbour, а не только . на : поменять.


 цитата:
procedure main 

? "" = ""
? "" = NIL

? "" <> ""
? "" <> NIL
? "" = 0





Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 116
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 07.02.17 07:36. Заголовок: Добрый день, коллеги..


Добрый день, коллеги
Имеется файл с иерархической структурой строк, как определить уровень иерархии по строке.
Пробовал такое:

RowLevel=oSheet:Outline:ShowLevels RowLevels

RowLevel=oAs:Row(Ni):Outline:RowLevels


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 117
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 07.02.17 09:43. Заголовок: Решил: RowLevel=oShe..


Решил:
RowLevel=oSheet:Rows(Ni):OutlineLevel

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 350
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 11.04.17 22:28. Заголовок: Читаем / пишем .XLSX..


Читаем / пишем .XLSX файлы из HARBOUR без использования EXCELL !
У меня всё получилось собрать . Примем на вооружение :

https://github.com/FTrautwein/hblibxlsxwriter

Спасибо: 4 
ПрофильЦитата Ответить



Пост N: 20
Зарегистрирован: 22.09.13
ссылка на сообщение  Отправлено: 15.04.17 19:42. Заголовок: Всем добрый вечер! К..


Всем добрый вечер!
Кусок кода:

oExcel:=CreateObject( "Excel.Application" )
? oExcel:hWnd
oExcel:Quit()
? oExcel:hWnd

В результате выводятся одинаковые значения. Почему, если Excel закрыт?
Тоже самое происходит, если открыть файл и закрыть его вручную вместо Quit



Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1086
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.04.17 20:25. Заголовок: fokinal21 пишет: По..


fokinal21 пишет:

 цитата:
Почему


Потому что хендл окна присваиваивается при создании объекта и нет необходимости его актуализировать во время жизни объекта, т. к. это уже забота программиста.
Еcли нужно что то с чемто сравнить, то нужно и проверить живо ли еще окно с таки хендлом

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 21
Зарегистрирован: 22.09.13
ссылка на сообщение  Отправлено: 15.04.17 21:27. Заголовок: Haz пишет: Потому ч..


Haz пишет:

 цитата:
Потому что хендл окна присваиваивается при создании объекта и нет необходимости его актуализировать во время жизни объекта


Получается, что после Quit объект еще не умер?
Если закрыть окно "крестиком" - тот же результат.

Haz пишет:

 цитата:
проверить живо ли еще окно с таки хендлом


А как проверить? Этот результат появился после танцев вокруг поиска способа именно такой проверки.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6360
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.04.17 21:28. Заголовок: fokinal21 пишет: oE..


fokinal21 пишет:

 цитата:
oExcel:Quit()


я после этого делаю так
oWorkBook:=nil
oSheet:=nil
oExcel:=nil


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 202 , стр: 1 2 3 4 5 6 7 8 9 10 11 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 89
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет