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




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


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

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







Пост N: 486
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 05.01.16 00:41. Заголовок: Dima пишет: Что кас..


Dima пишет:

 цитата:
Что касаемо картинки ....проделывал уже такой эксперимент , результат выше описал.


Excel 2000 и 2010 при формате ДД.ММ.ГГ показывает все четко, год двумя цифрами.
А вот если задать DD.MM.YY - любую дату преобразует в целое число (видно в строке формул вверху), а внутри ячейки пишет (дословно) "DD.MM.YY"

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



Пост N: 71
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 13.01.16 15:55. Заголовок: Добрый день, коллеги..


Добрый день, коллеги.
Программа на xHarbour, выгружаю файлы MS Excel, затем собираем в сводный отчет данные из выгруженных файлов MS Excel.
Слетают настройки цветов и форматов в сводном отчете... Пробовал на разных версиях MS Excel, закономерности пока не нашел.
Но на 1 ПК всегда выгружается без сбоев.Операционные системы на всех ПК - Win7, офис возможно разный...
Что может быть в тонкостях настройки MS Excel?

Всех со "Старым" Новым Годом!!!


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



Пост N: 3
Зарегистрирован: 04.04.16
ссылка на сообщение  Отправлено: 06.05.16 02:21. Заголовок: Help me pls. Длител..


Help me pls.

Длительное время работает такая схема формирования отчета в Excel
1.Грузится xls-файл - образец с отформатированной шапкой (соответственно - нужные ширины столбцов)
Чтобы не портить образец ( юзера всегда умудрятся его перезаписать)
2.Копируется лист
3.Создается новая книга.
4.Вставка в лист новой книги.
5.Добавление строк отчета в новую книгу

oExcel:Workbooks:Open(cFile)
oBook:=oExcel:ActiveWorkbook()
oBook:Worksheets(1):Cells:Copy()

oBookN:=oExcel:WorkBooks:Add() //новая пустая книга
oSheet:=oBookN:Worksheets(1)
oSheet:Paste()

Вдруг с некоторых пор на одном рабочем месте перестали копироваться ширины столбцов.

Пытался найти отличия в настройках Excel-я влияющие на режим копирования - не нашел.

Второй вариант - принудительное копирование ширин столбцов.
В макросе это выглядит так
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
//вставка ширин столбцов
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Как последнюю строку макроса переписать в терминах Харбора?



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


Пост N: 1192
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 06.05.16 06:47. Заголовок: Пробуйте так (не про..


Пробуйте так (не проверял)

#define xlPasteColumnWidths 8
#define xlPasteSpecialOperationNone -4142

Paste := oExcel:ActiveSheet():PasteSpecial(xlPasteColumnWidths, xlPasteSpecialOperationNone, False, False)



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



Пост N: 4
Зарегистрирован: 04.04.16
ссылка на сообщение  Отправлено: 06.05.16 06:58. Заголовок: Error 1559948/3 DIS..


Error 1559948/3 DISP_E_MEMBERNOTFOUND: PASTESPECIAL

похоже - не находит метод PASTESPECIAL

P.S.

без ошибок прошло

oSheet:Cells:PasteSpecial(xlPasteColumnWidths, xlPasteSpecialOperationNone, .f., .F.)


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


Пост N: 1193
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 06.05.16 07:34. Заголовок: Sadstar2016 пишет: ..


Sadstar2016 пишет:

 цитата:

без ошибок прошло
oSheet:Cells:PasteSpecial(xlPasteColumnWidths, xlPasteSpecialOperationNone, .f., .F.)


Ну да, поскольку PasteSpecial в Excel метод обьекта Range, Cells: там нужен
oExcel:ActiveSheet():Cells:PasteSpecial
Петр пишет:

 цитата:
Пробуйте так (не проверял)



Но вы не об этом и спрашивали
Как я понял, суть вопроса - как преобразовать вызов метода, а не к чему этот метод применить


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



Пост N: 155
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 13.05.16 16:11. Заголовок: Sadstar2016 пишет: ..


Sadstar2016 пишет:

 цитата:
1.Грузится xls-файл - образец с отформатированной шапкой (соответственно - нужные ширины столбцов)
Чтобы не портить образец ( юзера всегда умудрятся его перезаписать)



Может проще скопировать файл шаблона и работать с ним?

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



Пост N: 5
Зарегистрирован: 04.04.16
ссылка на сообщение  Отправлено: 16.05.16 01:53. Заголовок: IMHO - пусть юзер са..


IMHO - пусть юзер сам решает - где и под каким именем хранить файл - если его вообще нужно хранить

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



Пост N: 430
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 19.05.16 12:56. Заголовок: Передача параметра в макрос


На листе Excel создаю кнопку
oExc:Sheets(1):Buttons:Add(120, 20+30*(cnt-1), 350, 22)
и указываю макрос, который должен выполниться при клике на этой кнопке
oExc:Sheets(1):Buttons(cnt):OnAction:="Макрос1"

А как можно сделать вызов этого макроса с параметром ?

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



Пост N: 431
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 19.05.16 16:07. Заголовок: Параметр, видимо, пе..


Параметр, видимо, передать нельзя. Но можно использовать свойство кнопки Parameter,
а в макросе поймать эту кнопку через Caller

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



Пост N: 148
Зарегистрирован: 10.07.07
ссылка на сообщение  Отправлено: 10.06.16 17:08. Заголовок: Как задать денежный формат ячейки?


Нужно из xHarboura при заполнении Excel-файла задать формат поля "Денежный".
Офис 2013. При вводе туда числа должен появляться символ ₽ ( Unicode 20BD ).
Если сделать в самом Excel формат ячейки "Денежный" то все нормально.
Кстати, этот новый символ рубля сидит на Правом Alt + 8.

Попробовал вставить формат, который выдает макрос:
Selection.NumberFormat = "#,##0.00 $"

Переделал под xHarbour:
NumberFormat := '# ##0,00 $ '

Добавляется только символ доллара в конце, что навело на мысль попробовать
формат '# ##0,00 p.' с английской p, или HB_OemToAnsi( '# ##0,00 руб.' ). Все
получилось, буковки появляются, числа можно складывать и т.д.
Но все-таки, как быть с символом ₽?



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


Пост N: 1009
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.06.16 17:54. Заголовок: TimTim пишет: Попро..


TimTim пишет:

 цитата:
Попробовал вставить формат, который выдает макрос:
Selection.NumberFormat = "#,##0.00 $"



макрос выдает другой формат при выборе значка рубля
Selection.NumberFormat = "#,##0.00 [$?-419]"

но OLE это тоже не понимает

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




Пост N: 4965
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.06.16 13:21. Заголовок: Всем привет ! Исполь..


Всем привет !
Использую Ms Офис 2003 SP3.
Периодически появляется дурацкая табличка:


Как от неё избавиться ? Есть ли какой то флаг для этого сообщения ?


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




Пост N: 5709
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.06.16 13:29. Заголовок: Andrey Погугли..


Andrey
Погугли

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




Пост N: 4970
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.06.16 15:43. Заголовок: Dima пишет: Погугли..


Dima пишет:

 цитата:
Погугли


Ничего для себя не нашёл.

Методом проб и ошибок выяснил - неправильную работу в МиниГуи функции oBrw:Excel2(...)
при вот вот таком формате вывода в Эксель:
oBrw:aColumns[nJ]:cDataType := 'N'
oBrw:aColumns[nJ]:cPicture := '99:99'

Как исправить ?

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




Пост N: 5041
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.08.16 22:34. Заголовок: Обрезает нули в Ексе..


Обрезает нули в Екселе для текстового формата.

Вывожу текстовые данные поля бд в ячейку - типа "0000345", указываю в ячейке формат:
oSheet:Cells( nLine, nI ):SET( "NumberFormat", '@' ) // текстовая ячейка

Как избавиться от обрезания ?


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




Пост N: 5944
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.08.16 08:43. Заголовок: Поставь формат что т..


Поставь формат что то типа 0000000000
Где кол-во нулей равно длине строки в твоем случае 0000000

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




Пост N: 5042
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.08.16 12:26. Заголовок: Dima пишет: Постав..


Dima пишет:

 цитата:

Поставь формат что то типа 0000000000


Спасибо !
Но тогда разрушается универсальность функции перекодировки Dbf->Xls.
Текстовые данные могут быть разными.
Я у себя делаю так:
Скрытый текст


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




Пост N: 5945
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.08.16 12:28. Заголовок: Andrey Тогда читай ..

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




Пост N: 5946
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.08.16 16:52. Заголовок: Andrey пишет: IF FI..


Andrey пишет:

 цитата:
IF FIELDTYPE( cPole ) == "C"
oSheet:Cells( nLine, nI ):SET( "NumberFormat", '@' ) // текстовая ячейка


а вот тут нужна доп проверка а не цифры ли там одни живут и если так то
NumberFormat будет другим.

PS
По ходу не нашел (может искал плохо или еще что ) такой функции "а не цифры ли там одни живут" , так что придется
лепить свою.

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


Пост N: 1036
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.08.16 11:35. Заголовок: Andrey пишет: Я у с..


Andrey пишет:

 цитата:
Я у себя делаю так:


Попробуй сначала задать формат а потом присвоить значение в ячейку

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




Пост N: 5947
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.08.16 13:53. Заголовок: Haz пишет: Попробуй..


Haz пишет:

 цитата:
Попробуй сначала задать формат а потом присвоить значение в ячейку


Работает однако.

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




Пост N: 6010
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.09.16 21:54. Заголовок: Может и была тема , ..


Может и была тема , не нашел.
Нужно через Ole , иметь возможность только смотреть и печатать документ Excel.

PS
Сам документ формируется с установкой пароля на изменение. С этим нет проблем.


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




Пост N: 3484
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.09.16 07:56. Заголовок: Можно вызвать метод:..


Можно вызвать метод:

Sheet:PrintPreview()


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




Пост N: 6011
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.09.16 08:05. Заголовок: Pasha пишет: Можно ..


Pasha пишет:

 цитата:
Можно вызвать метод:

Sheet:PrintPreview()


Да не плохой вариант , но если закрыть Preview то снова окажусь в Excel а там делай что хош.

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




Пост N: 3485
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.09.16 09:11. Заголовок: А если так: Excel:V..


А если так:

Excel:Visible := .t.
Sheet:PrintPreview()
Excel:Visible := .f.


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




Пост N: 6012
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.09.16 09:19. Заголовок: Pasha пишет: Excel:..


Pasha пишет:

 цитата:
Excel:Visible := .f.


Заработало
Спасибо

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




Пост N: 3494
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.10.16 08:46. Заголовок: В office 2013 и offi..


В office 2013 и office 2010 с последними обновлениями появилась новая неприятная хворь:
При открытии документа методом Excel:Workbooks:Open происходит или ошибка открытия, или зависание при выполнении метода.
Хворь проявляется у Excel, и иногда у Word.
У меня шаблоны документов хранятся на letodb сервере. Перед открытием я их копирую в папку temp из getenv('temp').
Причем одни шаблоны могут открываться нормально (это Word), а другие - нет.
С Excel ситуация такая: после открытия документа он заполняется, и остается на экране для дальнейших действий с ним пользователя.
Пользователь что-то с ним делает (печатает), и закрывает Excel. Оказывается, что процесс Excel остается висеть в памяти, а шаблон в папке Temp залочен им, и последующее открытие этого шаблона невозможно. Причем, такая ситуация проявляется нестабильно: два раза Excel может закрыться нормально, а на третий - затык.
Если не переписывать файлы в папку temp, а хранить их в другой папке, то хворь не проявляется совсем.

Иногда хворь проходит, если пошаманить с таким бубном:
"Откройте вкладку Файл, чтобы переключиться в представление Microsoft Office
Backstage. В меню Справка выберите пункт Параметры; отобразится диалоговое
окно Параметры. Щелкните элемент Центр управления безопасностью и нажмите
кнопку Параметры центра управления безопасностью. В центре управления
безопасностью щелкните пункт Параметры блокировки файлов. Установите флажок
Открывать выбранные типы файлов в режиме защищенного просмотра и разрешить
редактирование."
Но такие танцы с бубном помогают не во всех случаях.

Пока я выкручиваюсь заменой магической заколдованной папки temp на другую папку, а там кто знает, как эта хворь будет вести себя дальше.
Если занемог Office 2010 и обновлениями, то помогает его снос и установка версии с диска и отключением обновлений. У Office 2013 хворь врожденная.


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




Пост N: 6042
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.10.16 09:48. Заголовок: Pasha пишет: Перед ..


Pasha пишет:

 цитата:
Перед открытием я их копирую в папку temp из getenv('temp')


Тоже так делаю , но в папке Temp создаю свою папку и уже копирую в нее , проблем не было ни разу.

PS
Office 2003

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




Пост N: 3495
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.10.16 09:51. Заголовок: проблем не было ни р..



 цитата:
проблем не было ни разу.



Значит, жди сюрпризов с новыми офисами.

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




Пост N: 6043
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.10.16 13:26. Заголовок: Pasha Ключевая фраз..


Pasha
Ключевая фраза "в папке Temp создаю свою папку и уже копирую в нее" , может и у тебя сработает кто знает.

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



Пост N: 11
Зарегистрирован: 04.04.16
ссылка на сообщение  Отправлено: 23.12.16 02:48. Заголовок: для справки Задача ..


для справки

Задача - Переместить лист в первую позицию

Исходные данные
-----------------------------------
1. Макрос
Sheets("Лист3").Select
Sheets("Лист3").Move Before:=Sheets(1)

-----------------------------------
2.Функция VBA
Moves the sheet to another location in the workbook.

expression.Move(Before, After)
expression Required. An expression that returns an object in the Applies To list.

Before Optional Variant. The sheet before which the moved sheet will be placed. You cannot specify Before if you specify After.

After Optional Variant. The sheet after which the moved sheet will be placed. You cannot specify After if you specify Before.

Remarks
If you don't specify either Before or After, Microsoft Excel creates a new workbook that contains the moved sheet.

Example
This example moves Sheet1 after Sheet3 in the active workbook.

Worksheets("Sheet1").Move after:=Worksheets("Sheet3")

-----------------------------------
3.Работающий вариант

oBook:Sheets("Итого"):Move( oBook:Sheets(1) ) //поставить перед листом N1



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



Пост N: 97
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 05.01.17 08:05. Заголовок: Добрый день, как вер..


Добрый день,
как вернуть активным окно программы, после запуска Excel (формирование сводного отчета. 60 и более листов) из отдельных 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()

.... формирование листов из отдельных Excel файлов

// переход к сводному отчету
Hb_GtInfo(HB_GTI_CLIPBOARDDATA, "")
oSheet_S:=oBook_S :Sheets(1):Select()
oBook_S :=oExcel_S :ActiveWorkBook
oAs_S :=oExcel_S :ActiveSheet()
oSheet_S:=oBook_S :Sheets(1)
oAs_S :Cells(1,5):Select()
oSheet_S:Cells(1,5):Value=Dtoc(Date())+', '+Substr(Time(),1,5)
oAs_S :Cells(1,7):Select()
oSheet_S:Cells(1,7):Value=SecToTim(Seconds()-Start_Beg)
oAs_S :Cells(1,1):Select()
oBook_S :SaveAs(Upper(Day_Excel))
oExcel_S:Quit()
oAs_S :=Nil
oRange_S:=Nil
oBook_S :=Nil
oExcel_S:=Nil


использовать oExcel_S:Visible :=.F. не вариант, надо что бы процесс формирования сводного Excel отчета был виден в фоновом окне, а окно программы стало активным...

PS:xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6476)


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




Пост N: 5282
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.17 11:21. Заголовок: Oskar_AAA пишет: ка..


Oskar_AAA пишет:

 цитата:
как вернуть активным окно программы, после запуска Excel



Надо получить хендл своей программы и переключиться на неё.
Используй несколько функций из МиниГуи:
GETWINDOW() потом BRINGWINDOWTOTOP()
Скрытый текст

Только вот как получить хендл своей программы в хХарборе пока не знаю...


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



Пост N: 98
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 05.01.17 11:32. Заголовок: Тоже попробовал испо..


Тоже попробовал использовать
HB_FUNC( MINIMIZE )
{
ShowWindow( (HWND) hb_parnl(1), SW_MINIMIZE );
}

HB_FUNC( MAXIMIZE )
{
ShowWindow( (HWND) hb_parnl(1), SW_RESTORE );
ShowWindow( (HWND) hb_parnl(1), SW_MAXIMIZE );
}

HB_FUNC( MAXIRESTORE )
{
ShowWindow( (HWND) hb_parnl(1), SW_RESTORE );
}

тестирую...

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




Пост N: 5283
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.17 11:34. Заголовок: Вот ещё посмотри, дл..


Вот ещё посмотри, для хХарбора раньше делал:
Скрытый текст



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




Пост N: 6236
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.01.17 13:42. Заголовок: Oskar_AAA Попробуй ..


Oskar_AAA
Попробуй где то в самом начале своей программы после любого вывода
на экран получить хендл своего окна с помощью GETFOREGROUNDWINDOW (взять можно в Минигуи)
А после запуска Excel используй ShowWindow + BringWindowToTop (взять можно в Минигуи)

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



Пост N: 100
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 05.01.17 14:01. Заголовок: Dima можно выслать и..


Dima
можно выслать из Минигуи GETFOREGROUNDWINDOW и ShowWindow + BringWindowToTop
я не работал в Минигуи...
Спасибо...

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




Пост N: 6237
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.01.17 14:04. Заголовок: Oskar_AAA #pragma ..


Oskar_AAA
 
#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>
HB_FUNC (GETFOREGROUNDWINDOW)
{
HWND hWnd = GetForegroundWindow();
hb_retnl ((LONG) hWnd);
}

#pragma ENDDUMP



 
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
#include "hbapiitm.h"

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



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



Пост N: 101
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 05.01.17 14:15. Заголовок: Спасибо, начну тести..


Спасибо, начну тестировать...

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



Пост N: 102
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 05.01.17 14:32. Заголовок: Dima вылетает по оши..


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)




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




Пост N: 6238
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.01.17 15:13. Заголовок: Oskar_AAA пишет: вы..


Oskar_AAA пишет:

 цитата:
вылетает по ошибке Warning W8065 Call to function 'HB_ISNUM'


Нужно смотреть какой аналог этой функции в Xharbour , я "сижу" на Harbour

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




Пост N: 3521
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.01.17 15:36. Заголовок: ISNUM( 2 ) регистр ..


ISNUM( 2 )

регистр существенен.

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



Пост N: 103
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 05.01.17 18:37. Заголовок: Коллеги, функция SE..


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

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




Пост N: 6239
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.01.17 18:53. Заголовок: Oskar_AAA пишет: Ко..


Oskar_AAA пишет:

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


Не вижу связи крестика и функции что рисует заголовок у окна. Или я вопрос не понял ?

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



Пост N: 104
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 05.01.17 18:57. Заголовок: Pasha пишет: ISNUM( ..


Pasha пишет:
ISNUM( 2 )

регистр существенен.




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



Пост N: 105
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 05.01.17 21:09. Заголовок: Добрый вечер, с Ваше..


Добрый вечер, с Вашей помощью вот что получилось:
В головной программе, после вывода меню на экран
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 не происходит...

что сделано не так???





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




Пост N: 5284
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.17 21:52. Заголовок: Oskar_AAA пишет: пе..


Oskar_AAA пишет:

 цитата:
перехода (активации) к программе из Excel не происходит...

что сделано не так???



Найди хендл окна Excel и потом переключись на него !
Хенд у окна Excel получить просто - смотреть пример ExcelOle.prg
.... выложил готовые примеры у Григория на сайте - http://hmgextended.com/applications.html

    // окно таблицы 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 )


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



Пост N: 106
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 05.01.17 21:58. Заголовок: Andrey окно Excel и ..


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

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




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


Oskar_AAA пишет:

 цитата:
ShowWindow(Handl_Win)


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

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



Пост N: 107
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 05.01.17 22:57. Заголовок: поставил из из его м..


поставил из из его модуля
hWnd := oExcel_S:hWnd
ShowWindow( hWnd, 6 ) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6

окно Excel стало маленьким, но осталось на переднем плане, как его сделать на ВТОРОМ плане?


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



Пост N: 490
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 05.01.17 23:13. Заголовок: Поменять Z-последова..


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

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



Пост N: 108
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 05.01.17 23:29. Заголовок: FIL Как свое окно СН..


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)

на передний план сове окно не возвращается..

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



Пост N: 491
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 05.01.17 23:42. Заголовок: SetWindowPos(hWnd, ..


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



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




Пост N: 6241
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.01.17 10:59. Заголовок: Oskar_AAA А если та..


Oskar_AAA
А если так
 
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)



Задача под каким терминалом собрана ?
Под GTWVT у меня такая связка работает.

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



Пост N: 109
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 06.01.17 11:02. Заголовок: Dima попробуем, рахм..


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


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



Пост N: 110
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 06.01.17 12:58. Заголовок: Dima где взять функ..


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

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




Пост N: 5285
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.01.17 13:41. Заголовок: Oskar_AAA пишет: гд..


Oskar_AAA пишет:

 цитата:
где взять функцию Isconic()?



Смотри в этой ветке Пост N: 5282
HB_FUNC( ISICONIC )

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



Пост N: 111
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 06.01.17 13:50. Заголовок: ok..


ok

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




Пост N: 6242
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.01.17 16:25. Заголовок: Oskar_AAA Наваял пр..


Oskar_AAA
Наваял простой пример на Harbour , терминал STD.
Запускаем пример и после куда то переключаемся. Через 10 секунд , окно примера появляется ,
но окно фокус ввода не получает , даже если и указать Setfocus(Askar_Win).
Но если собрать под терминалом GTWVT , добавив REQUEST HB_GT_WVT_DEFAULT
то все работает , как я выше и писал.

PS
Может Паша или Пётр чего подскажут

Скрытый текст



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



Пост 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 
ПрофильЦитата Ответить
moderator


Пост N: 1087
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.04.17 22:35. Заголовок: fokinal21 пишет: А ..


fokinal21 пишет:

 цитата:
А как проверить?


Ну есть к примеру enumwindows которая возвращает список активных окон в системе.
Возможно есть способ проще, типа похендлу получить статус окна... именно живо ли оно


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


Пост N: 1441
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 15.04.17 23:47. Заголовок: Haz пишет: Возможн..


Haz пишет:

 цитата:
Возможно есть способ проще, типа похендлу получить статус окна


Валидность хэндла обычно проверяют с использованием WinAPI функции IsWindow()
В MiniGUI функция-враппер носит название IsWindowHandle().

if IsWindowHandle( oExcel:hWnd ) ...




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



Пост N: 22
Зарегистрирован: 22.09.13
ссылка на сообщение  Отправлено: 16.04.17 11:19. Заголовок: oExcel ..


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

? hWnd
? IsWindowHandle(hWnd)

// Результаты: 462230 и .T.

oExcel:Quit()
? hWnd
? IsWindowHandle(hWnd)

// Результаты: 462230 и .T.

*По рекомендации Dima
oExcel:=nil


? hWnd
? IsWindowHandle(hWnd)

// Результаты: 462230 и .T.

// Итог: oExcel опять живее всех живых, несмотря на oExcel:Quit() и oExcel:=nil

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




Пост N: 6361
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.17 12:22. Заголовок: fokinal21 пишет: *П..


fokinal21 пишет:

 цитата:
*По рекомендации Dima
oExcel:=nil


? hWnd
? IsWindowHandle(hWnd)

// Результаты: 462230 и .T.

// Итог: oExcel опять живее всех живых, несмотря на oExcel:Quit() и oExcel:=nil



Ну тогда нужно так

oExcel:Quit()
oExcel:=nil


? hWnd:=oExcel:hWnd
? IsWindowHandle(hWnd)

// Итог: результат в студию


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





Пост N: 523
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.04.17 12:33. Заголовок: Dima пишет: oExcel:..


Dima пишет:

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


? hWnd:=oExcel:hWnd
? IsWindowHandle(hWnd)

// Итог: результат в студию


Можно даже не компилировать - результатом будет ошибка времени исполнения, тк у переменной типа NIL не может быть свойства :hWnd

А ноги у этой проблемы вот отсюда растут: http://clipper.borda.ru/?1-4-0-00001096-000-0-0-1440920410
Вот тут тоже обсуждали: http://clipper.borda.ru/?1-4-0-00000591-000-0-0-1317808661

Вот решение: http://clipper.borda.ru/?1-4-0-00000876-000-0-0-1373554002

 func Start_Excel()  
Local Res:=.f.
#ifndef __XHARBOUR__
#xcommand TRY => BEGIN SEQUENCE WITH {|e| Break( e )}
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#endif

TRY
oExcel := GetActiveObject( "Excel.Application" )
oExcel:DisplayAlerts:=.f.
Res:=.t.

CATCH
Res:=.f.
TRY
oExcel := CreateObject( "Excel.Application" )
Res:=.t.
CATCH
Res:=.f.
END
END
Return Res


Т.е. если процесс уже есть в памяти - использовать его, а не создавать новый.

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



Пост N: 23
Зарегистрирован: 22.09.13
ссылка на сообщение  Отправлено: 16.04.17 16:36. Заголовок: В общем понятно, что..


В общем понятно, что процесс Excel закрывается только после закрытия вызвавшей его программы, как ни крути Quit - ами и nil - ами. И это значит, что попытки выяснить с помощью хендла закрыл юзер окно с табличкой или нет обречены на провал, а это и надо было мне сделать. Может кто проведет другим путем?

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




Пост N: 6364
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.17 16:43. Заголовок: fokinal21 пишет: эт..


fokinal21 пишет:

 цитата:
это значит, что попытки выяснить с помощью хендла закрыл юзер окно с табличкой или нет обречены на провал


А зачем это контролировать ?
Выбросил форму в Excel а дальше юзер что хочет с ней то и делает.
У себя делаю примерно так:
oExcel:DisplayAlerts:=.t.
oExcel:Visible := .t.
oSheet:Cells( 1, 1 ):select()
//oSheet:Protect( "blabla" )
Showexcel(oExcel)


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


Пост N: 1088
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.04.17 18:42. Заголовок: fokinal21 пишет: Мо..


fokinal21 пишет:

 цитата:
Может кто проведет другим путем?


Да легко
Суть в том что любое окно порождено конкретным процессом. Отслеживать хендл окна дело бесперспективное т. к. Винда использует повторное пернназначение (хендл закрытого окна может пллучтьб вновь созданное)
Поэтому имеет смысл привязыватьсяименно к процессу еоторый это окно родил.
И задача сводится к тому что бы определить жив ли сам процесс.
Как определить? По алгоритму
1.зная окно можно найти процесс который его создал
2.зная процесс получить программу которая в нем выполняетя
3.и если это тот процесс и та программа то юзер ее еще не убил

Ps в харбуре есть инструмент чтоб этот алгоритм проверить
Будут вопросы пиши. На чтото я смогу ответить на что-то коллеги помогут


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



Пост N: 24
Зарегистрирован: 22.09.13
ссылка на сообщение  Отправлено: 17.04.17 09:49. Заголовок: Haz пишет: Как опр..


Haz пишет:

 цитата:
Как определить? По алгоритму
1.зная окно можно найти процесс который его создал
2.зная процесс получить программу которая в нем выполняетя
3.и если это тот процесс и та программа то юзер ее еще не убил



Пока на все один большой вопрос ?
Чтобы превратить его в несколько маленьких ,стремящихся к 0, можно чуть подробнее и небольшой пример, можно ссылку, если таковой уже есть.

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


Пост N: 1443
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 17.04.17 11:58. Заголовок: fokinal21 пишет: По..


fokinal21 пишет:

 цитата:
Пока на все один большой вопрос ?
Чтобы превратить его в несколько маленьких ,стремящихся к 0, можно чуть подробнее и небольшой пример, можно ссылку, если таковой уже есть.


Зачем это все прикладному программисту?

fokinal21 пишет:

 цитата:
В общем понятно, что процесс Excel закрывается только после закрытия вызвавшей его программы, как ни крути Quit - ами и nil - ами. И это значит, что попытки выяснить с помощью хендла закрыл юзер окно с табличкой или нет обречены на провал, а это и надо было мне сделать. Может кто проведет другим путем?


oExсel:hWnd хранит хэндл главного окна oExсel (с классом 'XLMAIN'), как вы его собираетесь использовать для определения окна с табличкой, это еще вопрос.
oExсel также имеет коллекцию Windows - "that represents all the windows in all the workbooks", вот я б с ней пробовал работать в вашей ситуации.




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


Пост N: 1089
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.04.17 11:13. Заголовок: fokinal21 пишет: По..


fokinal21 пишет:

 цитата:
Пока на все один большой вопрос ? Чтобы превратить его в несколько маленьких ,стремящихся к 0, можно чуть подробнее и небольшой пример, можно ссылку, если таковой уже есть.



Вот тот самый небольшой пример. Показывает окна их класс и заголовки. В том числе если есть открытая книга в Excel то ее и покажет в списке
 

#include "common.ch"
#include "i_winuser.ch"

#define WM_GETTEXT 0x000D
#define WM_SETTEXT 0x000C
#define WM_GETTEXTLENGTH 0x000E


Func main()
local hWnd := 0
local aWin := {}
local aChild := {}
local hChildWindow := 0
local i := 0
local j := 0
local nLen := 0
local nLenCh := 0


REQUEST HB_LANG_RU866
HB_LANGSELECT("RU866")

REQUEST HB_CODEPAGE_RU1251
hb_cdpSelect( "RU1251" )


aWin := EnumWindows()

nLen := len( aWin )


for i := 1 to nLen
aChild := EnumChild( aWin[ i ] )
nLenCh := LEN( aChild )
for j := 1 TO nLenCh
? aChild[j][2], aChild[ j ][3]
end
end
return NIL



Func EnumChild( hWin )
local aChild := {}
EnumChildWindows( hWin, { |hChild, nLParam | AADD( aChild, { hChild, GetClassName( hChild ), GetChildWindowText(hChild) } ) , .T. }, 0 )
return aChild


FUNCTION GetChildWindowText(hWnd )
LOCAL nLen, cText
nLen := SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0) + 1
cText := Space( nLen)
nLen := SendMessageString(hWnd, WM_GETTEXT, nLen, @cText)
RETURN substr(cText,1,nLen)



**********************************************************************************************************************************************
*
**********************************************************************************************************************************************

#pragma BEGINDUMP

#include <windows.h>

#include "hbapi.h"
#include "hbapiitm.h"

#include <hbapi.h>
#include <hbapiitm.h>
#include <windows.h>

void hb_evalBlock( PHB_ITEM pCodeBlock, ... );

static PHB_ITEM pCodeBlock = NULL;

BOOL CALLBACK static EnumChildProc( HWND hWnd, LPARAM lParam )
{
PHB_ITEM pHWnd = hb_itemPutNL( NULL, ( LONG ) hWnd );
PHB_ITEM pParam = hb_itemPutNL( NULL, ( LONG ) lParam );

if( pCodeBlock )
hb_evalBlock( pCodeBlock, pHWnd, pParam, 0 );

hb_itemRelease( pHWnd );
hb_itemRelease( pParam );

return hb_parl( -1 );
}

HB_FUNC( ENUMCHILDWINDOWS )
{
HWND hWnd = ( HWND ) hb_parnl( 1 );
LPARAM lParam = ( LPARAM ) hb_parnl( 3 );

pCodeBlock = hb_param( 2, HB_IT_BLOCK );
hb_retl( EnumChildWindows( hWnd, EnumChildProc, lParam ) );
pCodeBlock = NULL;
}


BOOL CALLBACK static EnumWinProc( HWND hWnd, LPARAM lParam )
{
PHB_ITEM pHWnd = hb_itemPutNL( NULL, ( LONG ) hWnd );
PHB_ITEM pParam = hb_itemPutNL( NULL, ( LONG ) lParam );

if( pCodeBlock )
hb_evalBlock( pCodeBlock, pHWnd, pParam, 0 );

hb_itemRelease( pHWnd );
hb_itemRelease( pParam );

return TRUE;
}



static PHB_ITEM pArray;

#if defined( __BORLANDC__ )
#pragma argsused
#endif

BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam )
{
PHB_ITEM pHWnd = hb_itemPutNL( NULL, ( LONG ) hWnd );
#if defined( __MINGW32__ )
UNREFERENCED_PARAMETER( lParam );
#endif
hb_arrayAddForward( pArray, pHWnd );
hb_itemRelease( pHWnd );

return TRUE;
}

HB_FUNC ( ENUMWINDOWS )
{
pArray = hb_itemArrayNew( 0 );

EnumWindows( ( WNDENUMPROC ) EnumWindowsProc, ( LPARAM ) 0 );

hb_itemReturnRelease( pArray );
pArray = NULL;
}


BOOL CALLBACK EnumThreadWndProc( HWND hWnd, LPARAM lParam )
{
PHB_ITEM pHWnd = hb_itemPutNL( NULL, ( LONG ) hWnd );
#if defined( __MINGW32__ )
UNREFERENCED_PARAMETER( lParam );
#endif
hb_arrayAddForward( pArray, pHWnd );
hb_itemRelease( pHWnd );

return TRUE;
}


HB_FUNC ( GETCLASSNAME )
{
HWND hWnd = (HWND) hb_parnl( 1 );
TCHAR ClassName[ 1024 ];
GetClassName( hWnd, ClassName, sizeof (ClassName) / sizeof (TCHAR) );
hb_retc( ClassName );
}



HB_FUNC( GETWINDOWTEXT )
{
HWND hWnd = ( HWND ) hb_parnl( 1 );
int iLen = GetWindowTextLength( hWnd );
char * cText = ( char * ) hb_xgrab( iLen + 1 );
int iRet = GetWindowText( hWnd, ( LPSTR ) cText, iLen + 1 );

hb_retclen( cText, iRet );
hb_xfree( cText );
}


HB_FUNC( SENDMESSAGE )
{
hb_retnl( ( LONG ) SendMessage( ( HWND ) hb_parnl( 1 ), ( UINT ) hb_parni( 2 ), ( WPARAM ) hb_parnl( 3 ), ( LPARAM ) hb_parnl( 4 ) ) );
}

HB_FUNC( SENDMESSAGESTRING )
{
hb_retnl( ( LONG ) SendMessage( ( HWND ) hb_parnl( 1 ), ( UINT ) hb_parni( 2 ), ( WPARAM ) hb_parnl( 3 ), ( LPARAM ) ( LPSTR ) hb_parc( 4 ) ) );
}


HB_FUNC ( POSTMESSAGE )
{
hb_retl( (BOOL) PostMessage (
(HWND) hb_parnl (1),
(UINT) hb_parni (2),
(WPARAM) hb_parnl (3),
(LPARAM) hb_parnl (4) ) );
}


#pragma ENDDUMP






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



Пост N: 25
Зарегистрирован: 22.09.13
ссылка на сообщение  Отправлено: 18.04.17 12:15. Заголовок: Всем спасибо за помо..


Всем спасибо за помощь и консультации!

Haz пишет:

 цитата:
Вот тот самый небольшой пример


Буду, по возможности, разбираться с примером...

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




Пост N: 6368
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.04.17 12:37. Заголовок: fokinal21 пишет: Бу..


fokinal21 пишет:

 цитата:
Буду, по возможности, разбираться с примером...


Пример по ходу отображается не верно , там где есть [ i ] только без пробелов внутри скобок

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



Пост N: 1410
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.04.17 12:42. Заголовок: Dima пишет Пример по..


Dima пишет
 цитата:
Пример по ходу отображается не верно


тут
 
for i := 1 to nLen
aChild := EnumChild( aWin[ i ] )
nLenCh := LEN( aChild )
for j := 1 TO nLenCh
? aChild[j][2], aChild[j][3]
end
end


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


Пост N: 1090
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.04.17 13:36. Заголовок: SergKis пишет: тут ..


SergKis пишет:

 цитата:
тут


Дима , Сергей , спасибо . Подправил [ и ]

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


Пост N: 1445
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 18.04.17 15:48. Заголовок: REQUEST HB_LANG_RU8..



 цитата:
 
REQUEST HB_LANG_RU866
REQUEST HB_CODEPAGE_RU1251

procedure Main( p, m )

local oExcel, oWorkBook, oWindows
local nI, nCount, w

hb_LangSelect( "RU866" )
hb_cdpSelect( "RU1251" )

hb_default( @p, "/" )
hb_default( @m, "/m" )

if hb_LeftEqI( p, "/g" ) .or. hb_LeftEqI( p, "-g" )
oExcel := win_oleGetActiveObject( "Excel.Application" )
elseif hb_LeftEqI( p, "/c" ) .or. hb_LeftEqI( p, "-c" )
oExcel := win_oleCreateObject( "Excel.Application" )
else
? Upper( __FILE__ ), '[/G|/C] [/M]'
? ' /C - Create new Excel object'
? ' /G - Get existing object'
? ' /M - Merge instances [by default]'
? ''
endif

if oExcel != NIL
IF hb_LeftEqI( m, "/m" ) .or. hb_LeftEqI( m, "-m" )
oExcel:MergeInstances := .T.
else
oExcel:MergeInstances := .F.
endif
? oExcel:hwnd
? '---------'
oWindows := oExcel:Windows()
oWorkBook := oExcel:WorkBooks:Add()

nCount := oWindows:Count
// Note that the active window is always Windows[1]
oWindows[1]:Caption := "xl#win#" + hb_NtoS( nCount )

for each w in oWindows
? w:caption
? w:hwnd
next

oExcel:Visible := .T.

//oExcel:Quit()
else
? "Error: MS Excel not available. [" + win_oleErrorText() + "]"
endif

return




Программа консольная.
Компилировать как-то так hbmk2 myexcel.prg -lhbwin

Запускать
myexcel /c /m
myexcel /g
myexcel /g
myexcel /g

Рекомендую посмотреть, проанализировать и сделать выводы

Интересно будет посмотреть на результат для разных версий Excel

P.S. Excel 2016 работает чудненько.

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




Пост N: 6372
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.04.17 16:26. Заголовок: Петр пишет: P.S. Ex..


Петр пишет:

 цитата:
P.S. Excel 2016 работает чудненько.


На 2003 падает на oExcel:MergeInstances и закоментил пока , пересобрал , запустил с ключом /C и упал в цикле на ? w:hwnd


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


Пост N: 1447
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 18.04.17 16:38. Заголовок: Dima пишет: На 2003..


Dima пишет:

 цитата:
На 2003 падает на oExcel:MergeInstances


Настоящий Эксель начинается с 2013

Dima пишет:

 цитата:
упал в цикле на ? w:hwnd


Припоминаю, что где-то мы уже это обсуждали, у Ворда свойство hwnd есть, у Экселя нет. В 2007(?) вроде уже есть.


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




Пост N: 6374
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.04.17 21:21. Заголовок: Петр пишет: Настоящ..


Петр пишет:

 цитата:
Настоящий Эксель начинается с 2013


Кажется в примере не хватает проверки перед его запуском на версию офиса , впрочем это уже обсуждали
в одной из тем , так что кому надо тот сам и допилит.

PS
У многих еще стоит XP и далеко не SP3 , так что заюзать могут офис только ниже 2010

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


Пост N: 1448
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 18.04.17 22:12. Заголовок: Dima пишет: Кажется..


Dima пишет:

 цитата:
Кажется в примере не хватает проверки перед его запуском на версию офиса



Можно добавить в любом удобном месте
? oExcel:version

И танцевать от результата

Excel 2003 - 11.0
Excel 2007 - 12.0
Excel 2010 - 14.0
Excel 2013 - 15.0
Excel 2016 - 16.0


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



Пост N: 513
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 02.06.17 11:25. Заголовок: Из своей проги откры..


Из своей проги открываю файл Excel. В этом файле есть кнопка которая активирует макрос.
Макрос должен посылать сообщение - PostMessage(чего нибудь) моей проге и закрывть Excel. Не писал ли кто похожее ?

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


Пост N: 1498
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 02.06.17 14:57. Заголовок: fil пишет: Не писал..


fil пишет:

 цитата:
Не писал ли кто похожее ?



Не писал, но не вижу на каком этапе могут возникнуть трудности: нажать кнопку (выполнить макрос), послать сообщение, закрыть Excel?

Добавляйте описание WinAPI функций, что-то типа

 цитата:

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long



и вперед.

UPD: наверное вам пригодится RegisterWindowMessage.

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



Пост N: 514
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 02.06.17 15:13. Заголовок: Не писал, но не вижу..



 цитата:
Не писал, но не вижу на каком этапе могут возникнуть трудности



Да ни на каком, написал уже. Думал, вдруг кто халяву подкинет

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


Пост N: 1499
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 02.06.17 15:17. Заголовок: fil пишет: Думал, ..


fil пишет:

 цитата:
Думал, вдруг кто халяву подкинет




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



Пост N: 516
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 05.06.17 18:58. Заголовок: Динамическая погрузка макросов


Можно ли программно подгрузить в книгу макрос из внешнего*.bas файла ?

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




Пост N: 6453
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.06.17 09:16. Заголовок: Заполняю ячейку след..


Заполняю ячейку следующим значением
hb_dtoc(Tmp123->data_z,"DD.MM.YYYY")
NumberFormat для нее поставил "@" , вместо даты получил цифры.
Глянул как в макросе делает Excel для даты , NumberFormat там "m/d/yyyy" , тоже вставил
в проге но после этого оля упала.
Какой вид NumberFormat нужно поставить что бы и оля не упала и дата корректно отобразилась ?

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


Пост N: 1523
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 17.06.17 10:13. Заголовок: Dima пишет: Заполня..


Dima пишет:

 цитата:
Заполняю ячейку следующим значением
hb_dtoc(Tmp123->data_z,"DD.MM.YYYY")


Попробуйте заполнять так
:Value := Date()
:Value := hb_DateTime()
:Value := Tmp123->data_z

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




Пост N: 6454
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.06.17 12:14. Заголовок: Петр Дело в том что..


Петр
Дело в том что есть универсальная функция (моя) , обрабатывает DBF таблицу и кидает ее в EXCEL.
Данные таблицы заполняю не по ячейкам а по строкам.
То есть Value я присваиваю массив (в данном случае) вида {"17.06.2017","ИВАНОВ",45123.10}
Если после присвоения (или до) не делать NumberFormat , то все ровно.
Но понадобилось в 3 -й колонке число бить по разрядам что бы получить 45 123.10 , если этого
не сделать получаю 45123.1
Поэтому решил диапазону (RANGE) передать массив вида {"@","@","# ##0"+GET_SDECIMAL()+"00"} через
NumberFormat , все сработало за исключением вывода строки в которой дата.
Подмена "@" на "m/d/yyyy" приводит к падению оли.
Сделал пока временное решение но пришлось отказаться от заполнения диапазона в NumberFormat
и сделал по ячейкам в цикле , скорость немного конечно упадет. Массив теперь выглядит так
{NIL,"@","# ##0"+GET_SDECIMAL()+"00"} а в цикле проверка стоит , если не NIL то работаем с NumberFormat


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


Пост N: 1524
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 17.06.17 13:30. Заголовок: Фрагмент кода oAS:..


Фрагмент кода

oAS:Range( "A1:C1" ):Value := {"17.06.2017","ИВАНОВ",45123.10}
oAS:Range( "A1:C1" ):NumberFormat := {"mm/dd/yyyy","@","# ##0,00"}
oAS:Range( "A1:C1" ):Select()

в Excell 2016 не приводит к падению

Можно попробовать использовать (до или после)
oAS:Columns( 3 ):NumberFormat.. или oAS:Range( "С3:C100" ):NumberFormat..

UPD.
oAS:Range( "A1:C1" ):Value := {Date(),"ИВАНОВ",45123.10} - тоже работает как просили..

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




Пост N: 6455
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.06.17 13:45. Заголовок: Петр пишет: в Excel..


Петр пишет:

 цитата:
в Excell 2016 не приводит к падению


Возможно , у меня Excel 2000
У юзверей стоит , поэтому и у себя держу такую версию.

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



Пост N: 118
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 18.06.17 10:13. Заголовок: Добрый день, формиру..


Добрый день, формирую DBF файл и выводе в Excel использую NaumberFormat только где надо разделить разряды, убрать 0, перенос текста - пока все ОК (Excel 2010 - 2016)


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




Пост N: 3566
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.06.17 16:13. Заголовок: Как вариант: перед з..


Как вариант: перед заполнением таблицы по строкам можно установить NumberFormat для тех столбцов, для которых это надо, т.е:

oSheet:Columns( nCol1 ):NumberFormat := cFormat1
..
oSheet:Columns( nColN ):NumberFormat := cFormatN

а затем сделать цикл по строкам с их заполнением

Если есть шапка таблицы, то после форматирования всего столбца NumberFormat для шапки можно очистить, или установить другой:

oSheet:Rows('1'+':'+AllTrim(Str(nRow))):NumberFormat := ...

С точки зрения оптимизации так будет лучше всего, т.к. число вызовов NumberFormat будет минимально.


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




Пост N: 6461
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.06.17 16:32. Заголовок: Pasha пишет: Как ва..


Pasha пишет:

 цитата:
Как вариант: перед заполнением таблицы по строкам можно установить NumberFormat для тех столбцов, для которых это надо, т.е:




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




Пост N: 3568
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.06.17 14:54. Заголовок: Как уже отмечалось, ..


Как уже отмечалось, харбор не поддерживает создание двумерных массивов Variant, и из-за этого
в Excel не получается присвоить значение диапазону ячеек, состоящему из нескольких строк.
Приходится присваивать значение построчно, что намного медленнее. Или копировать диапазон через
буфер обмена. Это быстро, но сносит форматирование, что тоже не всегда приемлемо.

Написал функцию, которая позволяет это делать.

Ссылка на функцию с примером:

http://my-files.ru/n4n4id


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




Пост N: 6464
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.06.17 15:04. Заголовок: Pasha пишет: Написа..


Pasha пишет:

 цитата:
Написал функцию, которая позволяет это делать.


Гениально , работает однако
Спасибо !

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





Пост N: 44
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 22.06.17 08:55. Заголовок: Dima пишет: Гениаль..


Dima пишет:

 цитата:
Гениально , работает однако



у меня нет ...
http://shot.qip.ru/00U6oZ-3JqTa71XL/

чего не хватает ?

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


Пост N: 1532
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 22.06.17 09:05. Заголовок: Alex_Cher пишет: че..


Alex_Cher пишет:

 цитата:
чего не хватает ?



hbwin включена в проект?

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




Пост N: 6466
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.06.17 09:05. Заголовок: Alex_Cher пишет: че..


Alex_Cher пишет:

 цитата:
чего не хватает ?


HBWIN

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





Пост N: 45
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 22.06.17 09:49. Заголовок: ... дальше больше ..


... дальше больше

http://shot.qip.ru/00U6oZ-6JqTa71XM/

надо было с С ++ начинать ...

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


Пост N: 1533
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 22.06.17 10:01. Заголовок: Alex_Cher пишет: ...


Alex_Cher пишет:

 цитата:

... дальше больше



Больше чего?

В MiniGUI (последней версии) правите файл сборки
call ..\..\..\batch\compile.bat _set2a /L hbwin %1 %2 %3 %4 %5 %6 %7 %8 %9
и спокойно компилируете.


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




Пост N: 3569
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.06.17 10:36. Заголовок: По поводу этого кода..


По поводу этого кода. Оригинальный фрагмент там совсем небольшой: создание двумерного массива, все остальное пришлось копировать из сырцов hbwin и xharbour, так как нужные функции там объявлены как static, и их не вызовешь.
Как раз месяц назад в harbour dev list было обсуждение этого вопроса, и есть надежда, что поддержка таких массивов будет добавлена в hbwin. Тогда эта функция станет не нужна.
Сейчас ее можно использовать для решения вполне конкретной и ограниченной задачи. Это что-то вроде заплатки.


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




Пост N: 3573
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.07.17 14:05. Заголовок: Pasha пишет: и есть..


Pasha пишет:

 цитата:
и есть надежда, что поддержка таких массивов будет добавлена в hbwin. Тогда эта функция станет не нужна.



Ну вот, все вопросы в dev list утрясены, и поддержка многомерных массивов Variant добавлена в Harbour.

Пример для заполнения диапазона в Excel:

// файл из contrib\hbwin
#include "hbole.ch"

local aSet[nRows, nColumns]
// далее надо заполнить двумерный массив со значениями ячеек

// и вызвать
oRange:Value := __oleVariantNew( WIN_VT_VARIANT, aSet, nRows, nColunms )


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




Пост N: 6482
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.17 16:49. Заголовок: Pasha пишет: Ну вот..


Pasha пишет:

 цитата:
Ну вот, все вопросы в dev list утрясены, и поддержка многомерных массивов Variant добавлена в Harbour.



Спасибо.

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


Пост N: 723
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 05.07.17 07:28. Заголовок: http://xlslib.source..


http://xlslib.sourceforge.net/index.php
What is xlsLib?
xlsLib is a multiplatform, a C/C++ library for dynamically generating Excel(TM) files (*.xls format). It allows the generation of these files directly without the need of other assistive software.
xlsLib can be used:
as a statically linked library. xlsLib can easily be integrated in any C/C++ project.
As a dynamically linked library. The classic shared object scheme can be followed for using xlsLib.
Последние обновления , кажется 14 годом.

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


Пост N: 724
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 06.07.17 12:42. Заголовок: Петр Может быть Вы..


Петр

Может быть Вы обратили свое внимание на эту библиотеку.
Цель - возможность работы с ней в Харбор/ MiniGui

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


Пост N: 1542
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 11.07.17 11:34. Заголовок: Vlad04 пишет: Може..


Vlad04 пишет:

 цитата:

Может быть Вы обратили свое внимание на эту библиотеку.
Цель - возможность работы с ней в Харбор/ MiniGui



Честно говоря, я не вижу в этом никакого профита.

Активное продвижение формата xls завершилось в 2003 году - 14 лет назад.
К тому же, несмотря на заявления, xlsLib типичная C++ библиотека. Использование с harbour (C) возможно, но это довольно сомнительное удовольствие.

В MiniGUI есть пример для работы с libxlsxwriter.dll (формат xlsx).


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


Пост N: 725
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 11.07.17 14:17. Заголовок: Петр Ок, формат не ..


Петр
Ок, формат не критичен.

К сожалению libxlsxwriter.dll имеет ряд ограничений - она не может читать или изменять существующие файлы!
И , наверно, обязательно д.быть установлен Excel

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


Пост N: 1543
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 11.07.17 15:55. Заголовок: Vlad04 пишет: К сож..


Vlad04 пишет:

 цитата:
К сожалению libxlsxwriter.dll имеет ряд ограничений - она не может читать или изменять существующие файлы!

То же самое можна сказать о xlsLib

Vlad04 пишет:

 цитата:
И , наверно, обязательно д.быть установлен Excel

Нет

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





Пост N: 106
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 22.07.17 22:06. Заголовок: Петр пишет: В MiniG..


Петр пишет:

 цитата:
В MiniGUI есть пример для работы с libxlsxwriter.dll (формат xlsx).



Где лежит? Что-то не нахожу...

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




Пост N: 6509
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.07.17 12:56. Заголовок: Панченко пишет: Где..


Панченко пишет:

 цитата:
Где лежит? Что-то не нахожу...


C:\MiniGUI\SAMPLES\Advanced\HbXlsxWriter\

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





Пост N: 107
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 24.07.17 12:48. Заголовок: Dima Спасибо. Пере..


Dima

Спасибо. Перешел на версию 17.06. Действительно, пример там и лежит :))

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





Пост N: 108
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 29.07.17 19:23. Заголовок: Pasha пишет: все во..


Pasha пишет:

 цитата:
все вопросы в dev list утрясены, и поддержка многомерных массивов Variant добавлена в Harbour.
...
oRange:Value := __oleVariantNew( WIN_VT_VARIANT, aSet, nRows, nColunms )


Логичным был бы второй шаг - такое же быстрое заполнение массива значениями oRange:Value. Этот вопрос не поднимается?

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




Пост N: 3575
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.08.17 12:54. Заголовок: И до этих правок мож..


И до этих правок можно было считать в массив значение Range для диапазона ячеек. Только массив получался с перевернутыми размерностями: сначала столбец, потом строка.
Теперь же в массив считываются значения диапазона как положено: [ <строка>, <столбец> ]
Никаких дополнительных функций вызывать не надо, просто вызвать:
aValues := oRange:Value

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





Пост N: 109
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 03.08.17 17:28. Заголовок: to Pasha Спасибо...


to Pasha

Спасибо.

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




Пост N: 5844
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.04.18 15:32. Заголовок: Pasha пишет: Как уж..


Pasha пишет:

 цитата:
Как уже отмечалось, харбор не поддерживает создание двумерных массивов Variant, и из-за этого
в Excel не получается присвоить значение диапазону ячеек, состоящему из нескольких строк.
Приходится присваивать значение построчно, что намного медленнее. Или копировать диапазон через
буфер обмена. Это быстро, но сносит форматирование, что тоже не всегда приемлемо.

Написал функцию, которая позволяет это делать.

Ссылка на функцию с примером:

http://my-files.ru/n4n4id



Файл удалён. Можно его выложить заново ?

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




Пост N: 6821
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.04.18 16:02. Заголовок: Andrey пишет: Файл ..


Andrey пишет:

 цитата:
Файл удалён. Можно его выложить заново ?


https://cloud.mail.ru/public/22h1/4N2PZfRNW

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




Пост N: 5845
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.04.18 16:32. Заголовок: Спасибо ! :sm36: ..


Спасибо !

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


Пост N: 1230
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.04.18 23:10. Заголовок: Так оно Пашиными ста..


Так оно Пашиными стараниями уже давно в дистрибутиве харбура. Я пользуюсь без всяких дополнительных функций.
Все родное, харбуровское. Или речь не о том?

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




Пост N: 5849
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.04.18 07:28. Заголовок: Haz пишет: Я пользу..


Haz пишет:

 цитата:
Я пользуюсь без всяких дополнительных функций.
Все родное, харбуровское. Или речь не о том?


А есть пример небольшой, демонстрирующий как этим пользоваться ?

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


Пост N: 1408
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 27.04.18 08:23. Заголовок: В файле по ссылке и ..


Andrey пишет:

 цитата:
А есть пример небольшой, демонстрирующий как этим пользоваться ?


В файле по ссылке и есть пример.

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




Пост N: 5850
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.04.18 08:44. Заголовок: Haz пишет: Я пользу..


Haz пишет:

 цитата:
Я пользуюсь без всяких дополнительных функций.
Все родное, харбуровское. Или речь не о том?



Да я не понял тоже.
В примере разве - всё родное, харбуровское ?

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




Пост N: 6822
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.04.18 08:46. Заголовок: Andrey пишет: А ест..


Andrey пишет:

 цитата:
А есть пример небольшой, демонстрирующий как этим пользоваться ?


Пост N: 3573 в этой теме

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



Пост N: 587
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 24.05.18 20:26. Заголовок: Есть переменная соде..


Есть переменная содержащая RTF структуру. Как вставить эту переменную в ячейку Excel не
как текст, а как RTF ?

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



Пост N: 591
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 09.06.18 16:38. Заголовок: Всем, привет ! Как ..


Всем, привет !

Как можно программно войти в ячейку. Т.е. как если дважды кликнуть на ячейке и войти в режим редактирования. (макрос делал)

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




Пост N: 6847
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.06.18 10:03. Заголовок: fil пишет: программ..


fil пишет:

 цитата:
программно войти в ячейку


Может это ?

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



Пост N: 592
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 11.06.18 12:27. Заголовок: Только этот метод бу..


Только этот метод будет работать ежели Excel уже визуализирован. А так вроде подходит
:SetKeys({"F2"})
:Paste()
:SetKeys({"RETURN"})

А то ежели сделать paste не входя в ячейку, текст из клипборда распределится по строкам.

В общем вся фигня из за того, что мне в ячейку Excel надо положить форматный текст, а в value ячейки можно положить только текст без формата. Остается paste


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




Пост N: 6026
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.09.18 12:37. Заголовок: Всем привет ! Перено..


Всем привет !
Переношу проект из HBOLE.LIB -> HBWIN.LIB
Создаю экселовский файл из массива:
//             дата    , л/счёт                                   , код , .... 
aDim := { DATE(), "901010"+HB_NtoS(10+nLine), "001", .... }

В HBOLE.LIB использовал:
         IF cType == "D" 
oSheet:Cells( nLine, nI ):SET( "NumberFormat", "@" )

Получалось так:


При использовании HBWIN.LIB переделал код:
         IF cType == "D" 
oSheet:Cells( nLine, nI ):NumberFormat := '@' // текстовая ячейка

И так получается:


Как для HBWIN.LIB сделать шаблон даты 99.99.9999 ?

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




Пост N: 6918
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.09.18 12:51. Заголовок: Andrey пишет: Как д..


Andrey пишет:

 цитата:
Как для HBWIN.LIB сделать шаблон даты 99.99.9999 ?


Сделать руками такой шаблон в Excel (c записью в макрос) и после смотреть что он туда нарисовал

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



Пост N: 53
Зарегистрирован: 07.06.08
ссылка на сообщение  Отправлено: 12.09.18 15:08. Заголовок: Чтобы дата корректно..


Чтобы дата корректно отображалась в Excel, нужно дату преобразовать в строку, откуда Excel знает, что на входе дата и в каком зашифрованном виде? Например, так
oSheet:Cells( nLine, nI ):Value := If( ValType( xValue )=="D", DtoC( xValue ), If( ValType( xValue )=="N", xValue , ;
If( ValType( xValue )=="L", If( xValue ,".T." ,".F." ), cValToChar( xValue ) ) ) )

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


Пост N: 1304
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.09.18 20:37. Заголовок: Andrey пишет: Numbe..


Andrey пишет:

 цитата:
NumberFormat := '@'


Никаких проблем не испытываю при прямой записи даты в Excel. Единственное в hbwin пустую дату необходимо заменить на nil.
Указание @ в нумберформате говорит, что следующие данные это строка. Может в этом проблема

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




Пост N: 6028
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.09.18 23:20. Заголовок: Haz пишет: Указание..


Haz пишет:

 цитата:
Указание @ в нумберформате говорит, что следующие данные это строка. Может в этом проблема


В HBOLE.LIB работало, в HBWIN.LIB - нет.
Делаю следующее:
      aDim := { DATE()-nLine, "901010"+HB_NtoS(10+nLine), .... } 

FOR nI := 1 TO LEN(aDim)
cType := VALTYPE(aDim[nI])
xValue := aDim[nI]

oSheet:Cells( nLine, nI ):Value := xValue

IF cType == "D"
// преобразуем в текстовый формат
//oSheet:Cells( nLine, nI ):NumberFormat := '@' // работает
//xValue := StoD( DTOS(xValue) )


// for HBOLE - oSheet:Cells( nLine, nI ):SET( "NumberFormat", 'm/d/yy' ) // дата ячейка - было ранее
oSheet:Cells( nLine, nI ):NumberFormat := 'm/d/yy' // дата ячейка - НЕ РАБОТАЕТ, вылет по ошибке

ELSEIF cType == "N"
.....


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





Пост N: 61
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 14.09.18 10:17. Заголовок: Мужики, пособите ...


Мужики, пособите ...

создаю Excel, необходимо закрепить верхнюю часть таблицы на экране -
макрос выдает " ActiveWindow.FreezePanes = True "

вставляю в MiniGUI в разных комбинациях не проходит ... что не так ?

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




Пост N: 6920
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.09.18 10:30. Заголовок: Alex_Cher Примерно ..


Alex_Cher
Примерно так
oExcel:Sheets():Select()
oExcel:ActiveWindow:SplitRow := 11 // :SplitCol
oExcel:ActiveWindow:FreezePanes := .t.

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





Пост N: 62
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 14.09.18 12:12. Заголовок: Dima пишет: Примерн..


Dima пишет:

 цитата:
Примерно так



Dima - спасибо большое все нарисовалось,.. удачи тебе и всех благ ....

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




Пост N: 3796
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.09.18 13:05. Заголовок: В HBOLE.LIB работало..



 цитата:
В HBOLE.LIB работало, в HBWIN.LIB - нет.



Удивительно, но дельфийский народ жалуется на такой же трабл (хоть у них нет hbole):

http://citforum.ck.ua/programming/delphi/excel/

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




Пост N: 6964
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.11.18 12:50. Заголовок: Как правильно конвер..


Как правильно конвертнуть макрос под Harbour ?
ExecuteExcel4Macro "SHOW.DETAIL(1,212,FALSE,,2)"

Пробовал так oExcel:Application:ExecuteExcel4Macro("SHOW.DETAIL(1,212,FALSE,,2)")

Не пашет

Проехали (надо было свернуть группы)
Сделал так oSheet:Outline:ShowLevels(1)


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



Пост N: 56
Зарегистрирован: 24.02.11
ссылка на сообщение  Отправлено: 21.12.18 08:38. Заголовок: Всем доброго дня! Во..


Всем доброго дня!
Возник вот такой интересный вопрос.
Более-менее полноценная работа с Excel подразумевает наличие на компьютере установленного офиса.
В силу привычки (или упоротости, не знаю) пользуюсь портабельным офисом. Впрочем, это касается не только офиса, предпочитаю использовать портабельные версии нужного ПО, если они имеются.

Собственно вопрос в том, можно ли в связке с харбором как-то использовать вместо установленного офиса портабельный?

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




Пост N: 3817
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.12.18 09:15. Заголовок: У меня на работе как..


У меня на работе как раз не установлен MS Office (уже 7 лет обхожусь без него). Скачаю portable, посмотрю.

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




Пост N: 6987
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.12.18 10:04. Заголовок: vvv пишет: Собствен..


vvv пишет:

 цитата:
Собственно вопрос в том, можно ли в связке с харбором как-то использовать вместо установленного офиса портабельный?


Не попробуешь , не узнаешь...
Для начала проверь , будет ли создаваться OLE объект Excel

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



Пост N: 2164
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.12.18 11:43. Заголовок: vvv пишет схема раб..


vvv пишет [quote]`
схема работы с xml должна работать ( см. тему http://clipper.borda.ru/?1-4-0-00001250-000-0-0-1541685579 )
т.е. получаем file.xml и запускаем excel file.xml

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



Пост N: 57
Зарегистрирован: 24.02.11
ссылка на сообщение  Отправлено: 21.12.18 12:07. Заголовок: Dima пишет: Для нач..


Dima пишет:

 цитата:
Для начала проверь , будет ли создаваться OLE объект Excel


Похоже, не создается.
Вот текст ошибки из примера "OLE"

 цитата:

--------------------- Internal Error Handling Information ---------------------

Subsystem Call ....: TOleAuto
System Code .......: -1
Default Status ....: .F.
Description .......: CO_E_CLASSSTRING
Operation .........: TOLEAUTO:NEW
Involved File .....:
Dos Error Code ....: 0



SergKis пишет:

 цитата:
схема работы с xml должна работать


Не, xml не подходит.
Суть работы в следующем: открыть xls файл (приходит со стороны), кое-что поменять и сохранить (с сохранением форматирования) под новым именем.
В принципе, есть работающий костыль на Йокселе, но Йоксель рандомно затирает формулы и приходится постоянно контролировать результат.
Иногда еще теряется формат ячеек, тоже рандомно. Причем потери возникают именно при открытии файла.

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



Пост N: 2165
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.12.18 12:38. Заголовок: vvv Если надо менят..


vvv
Если надо менять и присутствуют формулы ..., зачем искать приключений с portable, йоксель, просто установите excel.
Есть, конечно, LibXL (можно читать, писать и т.д.), но она платная

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



Пост N: 58
Зарегистрирован: 24.02.11
ссылка на сообщение  Отправлено: 21.12.18 12:57. Заголовок: Да сам не знаю, поче..


Да сам не знаю, почему ексель не хочется ставить. Может азарт какой "а можно ли без".

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


Пост N: 1492
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 21.12.18 13:11. Заголовок: Даже в Википедии нап..


Даже в Википедии написано, что

 цитата:
технология OLE использует архитектуру «толстого клиента», то есть сетевой ПК с избыточными вычислительными ресурсами. Это означает, что тип файла либо программа, которую пытаются внедрить, должна присутствовать на машине клиента. Например, если OLE оперирует таблицами Microsoft Excel, то программа Excel должна быть инсталлирована на машине пользователя


https://ru.wikipedia.org/wiki/Object_Linking_and_Embedding

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



Пост N: 59
Зарегистрирован: 24.02.11
ссылка на сообщение  Отправлено: 21.12.18 13:40. Заголовок: PSP пишет: Даже в В..


PSP пишет:

 цитата:
Даже в Википедии написано, что

цитата:
технология OLE использует архитектуру «толстого клиента», то есть сетевой ПК с избыточными вычислительными ресурсами. Это означает, что тип файла либо программа, которую пытаются внедрить, должна присутствовать на машине клиента. Например, если OLE оперирует таблицами Microsoft Excel, то программа Excel должна быть инсталлирована на машине пользователя


А вот здесь просто интересно, что вложено в данном конкретном случае в понятие "инсталлирована".
Портабельный excel присутствует, но он "не инсталлирован", однако работает.

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



Пост N: 2166
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.12.18 13:43. Заголовок: vvv пишет Может азар..


vvv пишет
 цитата:
Может азарт какой "а можно ли без"


В качестве фантазии\приключения (не пробовал) и азарта "а можно ли без". Вариант vba и макросов с назначением вып. макроса на клавишу Ctrl+Shift+... и попытки посылать из hb окну excel этих клавиш для выполнения нужного макроса (после run portable excel file.xls)

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


Пост N: 1493
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 21.12.18 13:45. Заголовок: vvv пишет: А вот зд..


vvv пишет:

 цитата:
А вот здесь просто интересно, что вложено в данном конкретном случае в понятие "инсталлирована".
Портабельный excel присутствует, но он "не инсталлирован", однако работает.


По-моему, у понятия "инсталлирована" нет двойного смысла. Оно однозначно.
"Неинсталлированный" excel работает сам по себе, но система о нем ничего не знает и поэтому не может создать экземпляр объекта на основании этого экселя.

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



Пост N: 60
Зарегистрирован: 24.02.11
ссылка на сообщение  Отправлено: 21.12.18 14:02. Заголовок: PSP пишет: "Неи..


PSP пишет:

 цитата:
"Неинсталлированный" excel работает сам по себе, но система о нем ничего не знает и поэтому не может создать экземпляр объекта на основании этого экселя.



Вот и хочется либо сообщить системе об этом екселе, либо, зная его месторасположение, использовать его мозги.

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



Пост N: 61
Зарегистрирован: 24.02.11
ссылка на сообщение  Отправлено: 21.12.18 14:04. Заголовок: SergKis пишет: В ка..


SergKis пишет:

 цитата:
В качестве фантазии\приключения (не пробовал) и азарта "а можно ли без". Вариант vba и макросов с назначением вып. макроса на клавишу Ctrl+Shift+... и попытки посылать из hb окну excel этих клавиш для выполнения нужного макроса (после run portable excel file.xls)



А можно попробовать в праздники, если делать нечего будет.

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




Пост N: 6988
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.12.18 14:28. Заголовок: vvv пишет: А можно ..


vvv пишет:

 цитата:
А можно попробовать в праздники, если делать нечего будет.


Погугли на предмет Portable Excel Create Ole Object

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




Пост N: 3818
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.12.18 16:49. Заголовок: Скачал portable offi..


Скачал portable office с рутрекера:

https://rutracker.org/forum/viewtopic.php?t=5526478

а касперский его сразу грохнул, говорит мол: бяка, лечение невозможно
Нет ли ссылки без бяки ?

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




Пост N: 6989
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.12.18 17:45. Заголовок: Pasha Забей в поиск..


Pasha
Забей в поиске на рутрекере лучше так
"Portable Office 2003"
Всего 12 ссылок

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




Пост N: 3819
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.12.18 18:17. Заголовок: Да я видел эти сборк..


Да я видел эти сборки, в комментариях пишут: на win10 не идет, а у меня как раз она.
Автор сборок смотрю тот же

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




Пост N: 6990
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.12.18 00:01. Заголовок: Pasha Паш забей на ..


Pasha
Паш забей на портабл , так как служба не загружена , ни чего не выйдет стандартными методами и придется
выкручиваться.

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


Пост N: 1494
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 22.12.18 09:26. Заголовок: vvv пишет: Вот и хо..


vvv пишет:

 цитата:
Вот и хочется либо сообщить системе об этом екселе, либо, зная его месторасположение, использовать его мозги.


"Сообщить" системе можно очень просто: инсталлировать)) Всё остальное - фантазии. Это всё равно, что иметь автомобиль без мотора и думать, что автомобилю можно просто "сообщить", что мотор лежит в гараже и машина будет ехать только от этого "знания")))

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




Пост N: 6991
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.12.18 09:46. Заголовок: По ходу можно пробну..


По ходу можно пробнуть , но не факт что сработает.
Грузим Excel (portable) через hb_processOpen (например)
После пробуем что то типа oExcel := GetActiveObject( "Excel.Application" )


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


Пост N: 1419
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.12.18 14:05. Заголовок: Можно и не пробовать


Портабле приложения запускаются в своем окружении "песочнице" и этому приложению подсовывается наследие системы где его подготовили. А вовсе не наоборот. OLE точно работать не будет. VBA и макросы будут. Но об этом уже выше написано. Более того, если даже всю подготовку сделать, к примеру в xml, то система не будут иметь ассоциированного приложения с этим xml. Нужно руками запустить портабле ехель и руками открыть файл xml.
Подобные приложения используются для работы в ручном режиме при угрозе влететь на лицензию. Для автоматизации они не годятся в привычном смысле. А для людей творческих, ничто не мешает из своей программы на харбуре запустить портабле ехель и дождавшись загрузки управлять ехелем нажимая на кнопки на его морде посылая соответствующие сообщения определенным окнам ехеля. Но это еще то шапито.

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



Пост N: 2167
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.12.18 18:56. Заголовок: Haz пишет Подобные п..


Haz пишет
 цитата:
Подобные приложения используются для работы в ручном режиме при угрозе влететь на лицензию


Для работы одну лицензию можно приобрести, не ней проделывать манипуляции с документами через ole и раздавать для использования в portable excel на другие pc. Будет дешевле, во всех смыслах, чем "шапито"

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


Пост N: 1420
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.12.18 21:55. Заголовок: SergKis пишет: Для ..


SergKis пишет:

 цитата:
Для работы одну лицензию можно приобрести,


Согласен, но это к заказчику. А у заказчика в голове мозг по другому работает.

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


Пост N: 809
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 10.03.19 21:13. Заголовок: Посмотрел примеры - ..


Посмотрел примеры - в основном выгрузка в Excel.
У меня задача обратная - нужно прочесть данные с большого Excel файла
(несколько десятков тысяч записей ). Размеры файла могут быть разные, т.е.
не знаю сколько строк. Все читается через OLE, но очень долго, несколько минут.
Как ускорить ?

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




Пост N: 7025
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.03.19 21:57. Заголовок: Vlad04 Можно погугл..


Vlad04
Можно погуглить "чтение файла excel ole"

А строки можно сразу посчитать

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




Пост N: 3827
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.03.19 08:07. Заголовок: Свойство Value относ..


Свойство Value относится к объекту Range. Можно присвоить Range диапазону ячеек внутри строки, и получить Value как массив.
Можно получить значения сразу нескольких строк как двумерный массив.

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


Пост N: 810
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 11.03.19 15:26. Заголовок: Pasha Попробую пос..


Pasha

Попробую построчно считывать. При записи подобным образом скорость кратно возрастает

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


Пост N: 1441
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.03.19 17:33. Заголовок: Vlad04 пишет: нужно..


Vlad04 пишет:

 цитата:
нужно прочесть данные с большого Excel файла


Если это просто чья то выгрузка в Excel - читать можно через ODBC

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


Пост N: 811
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 11.03.19 21:39. Заголовок: Haz Выгрузка чья-то..


Haz
Выгрузка чья-то, но формат определённый.
Попробовал читать в массив
- построчно быстрее,чем по клеточно
- а если всю таблицу в массив, так вообще улёт, совсем немного отстает от DBF.

Через ODBC, наверно, скорость будет как с родной таблицей ?

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


Пост N: 1442
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.03.19 23:38. Заголовок: Vlad04 пишет: Через..


Vlad04 пишет:

 цитата:
Через ODBC, наверно, скорость будет как с родной таблицей ?


В принципе не тормозит. Где-то был пример чтения через ODBC, если сам не найдёшь, могу поискать у себя. Точно баловался лет 7 назад, тк была задача чтения и записи больших таблиц Excel.

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


Пост N: 812
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 12.03.19 19:20. Заголовок: Небольшой косочек ко..


Небольшой косочек кода решил выложить, так как с некоторыми моментами пришлось повозиться

 цитата:

ExcelApl - имя объекта Excel при открытии
oAS := ExcelApl:ActiveSheet()

Количество строк в Excel странице
mlast := ExcelApl:ActiveSheet:Range("A1"):CurrentRegion:Rows:Count

Копирование в переменную mCel (объявлена, как {}) необходимой области страницы Excel -
3 столбца на всю высоту.В столбцах числовые значения (2) и в одном - Дата.

mCel:=oAS:Range('D'+Alltrim(Str(1,5))+':F'+Alltrim(Str(mlast,5))):Value

Обработка

nn:=2
for i:=2 to mlast // собственно данные со второй строки
nWsrst:=(datTek - mCel[i,1] )/365.25 // в итоге число, исходное значение ДАТА
nPOL:=Int(mCel[i,2] ) // число
nSmk:= Int(mCel[i,3]) // число

....
next i



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


Пост N: 813
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 12.03.19 19:22. Заголовок: Формат исходного док..


Формат исходного документа csv и xls. Оффис 2003.

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




Пост N: 7026
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.19 23:47. Заголовок: Vlad04 хз я считаю ..


Vlad04
хз я считаю строки и столбцы примерно так
a:=oSheet:UsedRange:Rows:Count
b:=oSheet:UsedRange:Columns:Count

это после
oWorkBook := oExcel:Workbooks:Open(cfile)
oSheet := oExcel:ActiveSheet()

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


Пост N: 1443
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.03.19 10:41. Заголовок: Vlad04 Через ODBC, ..


Vlad04

 цитата:
Через ODBC, наверно, скорость будет как с родной таблицей



Попробуй этим , просто интересно
Выгрузки в Excel где первая срока - имена полей а потом сам массив данных читает влет
ODBCDemo.prg
 
#require "rddsql"
#require "sddodbc"

#include "simpleio.ch"
#include "dbinfo.ch"

REQUEST SDDODBC, SQLMIX
REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866


PROCEDURE Main()

#if defined( __HBSCRIPT__HBSHELL )
rddRegister( "SQLBASE" )
rddRegister( "SQLMIX" )
hb_SDDODBC_Register()
#endif

Set( _SET_DATEFORMAT, "yyyy-mm-dd" )
HB_SETCODEPAGE( "RU1251" )

rddSetDefault( "SQLMIX" )
? "Connect:", rddInfo( RDDI_CONNECT, { "ODBC", "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=TEST.XLS;" } )
? "Use:", dbUseArea( .T., , "select * from sheet1", "test" )
? "Alias:", Alias()
? "DB struct:", hb_ValToExp( dbStruct() )
wait

dbGoTop()
Browse()
dbCloseArea()

RETURN


Browse там для наглядности, обработку можно сделать в цикле while !eof() ... end, доступ к полям через fieldget( n )
свой XLS переименуй в TEST.XLS и кинь в папку с программой. ВАЖНО ярлычек с данными в EXL должен называться sheet1
или поправь в исходнике под свое название
С MiniGui под консоль собирается так
c:\MiniGui\batch\compile.bat ODBCDemo /l hbodbc /l odbc32 /l sddodbc /l hbsqldd /c %1 %2 %3 %4 %5 %6 %7 %8 %9

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

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