Автор | Сообщение |
Dima
|
| |
Пост N: 2372
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.05.12 16:52. Заголовок: Снова EXCEL (продолжение)
Ранее с Excel из Harbour ни когда не работал. Поставили тут задачу. У некоторых поставщиков есть определенные формы заказов. Набраны они в Excel. Сейчас народ руками заполняет эти формы и шлет по электронке поставщикам. Задача сводится к тому что бы в этих формах находить нужные коды товара и в нужной ячейке проставлять заказ. Может ткнет кто носом с чего начать что бы не напороться на грабли. Спасибо Сами формы тут http://zalil.ru/33279066
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
fil
|
| |
Пост N: 513
Зарегистрирован: 17.06.10
|
|
Отправлено: 02.06.17 11:25. Заголовок: Из своей проги откры..
Из своей проги открываю файл Excel. В этом файле есть кнопка которая активирует макрос. Макрос должен посылать сообщение - PostMessage(чего нибудь) моей проге и закрывть Excel. Не писал ли кто похожее ?
|
|
|
Петр
|
| постоянный участник
|
Пост 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.
|
|
|
fil
|
| |
Пост N: 514
Зарегистрирован: 17.06.10
|
|
Отправлено: 02.06.17 15:13. Заголовок: Не писал, но не вижу..
цитата: | Не писал, но не вижу на каком этапе могут возникнуть трудности |
| Да ни на каком, написал уже. Думал, вдруг кто халяву подкинет
|
|
|
Петр
|
| постоянный участник
|
Пост N: 1499
Зарегистрирован: 09.10.06
|
|
Отправлено: 02.06.17 15:17. Заголовок: fil пишет: Думал, ..
fil пишет: цитата: | Думал, вдруг кто халяву подкинет |
|
|
|
|
fil
|
| |
Пост N: 516
Зарегистрирован: 17.06.10
|
|
Отправлено: 05.06.17 18:58. Заголовок: Динамическая погрузка макросов
Можно ли программно подгрузить в книгу макрос из внешнего*.bas файла ?
|
|
|
Dima
|
| |
Пост 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 нужно поставить что бы и оля не упала и дата корректно отобразилась ?
|
|
|
Петр
|
| постоянный участник
|
Пост 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
|
|
|
Dima
|
| |
Пост 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
|
|
|
Петр
|
| постоянный участник
|
Пост 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} - тоже работает как просили..
|
|
|
Dima
|
| |
Пост N: 6455
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.06.17 13:45. Заголовок: Петр пишет: в Excel..
Петр пишет: цитата: | в Excell 2016 не приводит к падению |
| Возможно , у меня Excel 2000 У юзверей стоит , поэтому и у себя держу такую версию.
|
|
|
Oskar_AAA
|
| |
Пост N: 118
Зарегистрирован: 09.09.11
|
|
Отправлено: 18.06.17 10:13. Заголовок: Добрый день, формиру..
Добрый день, формирую DBF файл и выводе в Excel использую NaumberFormat только где надо разделить разряды, убрать 0, перенос текста - пока все ОК (Excel 2010 - 2016)
|
|
|
|
Pasha
|
| Администратор
|
Пост 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 будет минимально.
|
|
|
Dima
|
| |
Пост N: 6461
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.06.17 16:32. Заголовок: Pasha пишет: Как ва..
Pasha пишет: цитата: | Как вариант: перед заполнением таблицы по строкам можно установить NumberFormat для тех столбцов, для которых это надо, т.е: |
|
|
|
|
Pasha
|
| Администратор
|
Пост N: 3568
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.06.17 14:54. Заголовок: Как уже отмечалось, ..
Как уже отмечалось, харбор не поддерживает создание двумерных массивов Variant, и из-за этого в Excel не получается присвоить значение диапазону ячеек, состоящему из нескольких строк. Приходится присваивать значение построчно, что намного медленнее. Или копировать диапазон через буфер обмена. Это быстро, но сносит форматирование, что тоже не всегда приемлемо. Написал функцию, которая позволяет это делать. Ссылка на функцию с примером: http://my-files.ru/n4n4id
|
|
|
Dima
|
| |
Пост N: 6464
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.06.17 15:04. Заголовок: Pasha пишет: Написа..
Pasha пишет: цитата: | Написал функцию, которая позволяет это делать. |
| Гениально , работает однако Спасибо !
|
|
|
Alex_Cher
|
| |
Пост N: 44
Зарегистрирован: 18.06.15
|
|
Отправлено: 22.06.17 08:55. Заголовок: Dima пишет: Гениаль..
|
|
|
Петр
|
| постоянный участник
|
Пост N: 1532
Зарегистрирован: 09.10.06
|
|
Отправлено: 22.06.17 09:05. Заголовок: Alex_Cher пишет: че..
Alex_Cher пишет: hbwin включена в проект?
|
|
|
Dima
|
| |
Пост N: 6466
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.06.17 09:05. Заголовок: Alex_Cher пишет: че..
|
|
|
Alex_Cher
|
| |
Пост N: 45
Зарегистрирован: 18.06.15
|
|
Отправлено: 22.06.17 09:49. Заголовок: ... дальше больше ..
|
|
|
Петр
|
| постоянный участник
|
Пост 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 и спокойно компилируете.
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|