Автор | Сообщение |
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
[только новые]
|
|
Dima
|
| |
Пост N: 2373
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.05.12 18:37. Заголовок: Пока что интересует:..
Пока что интересует: поиск в определенной колонке c определенной строки
|
|
|
Pasha
|
| Администратор
|
Пост N: 2354
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.05.12 19:51. Заголовок: Да никаких особенных..
Да никаких особенных граблей быть не может. Примерно так: Local oExcel := Win_OleAuto():New( "Excel.Application" ) Local oBook, oSheet, oCell, xValue Local nRow := 3 Local nCol := 3, nCol2 := 5 oExcel:Visible := .f. oExcel:Workbooks:Open( cFile, 0 ) oBook := oDoc:ActiveWorkBook oSheet := oExcel:ActiveSheet while .t. oCell := oSheet( nRow, nCol ) xValue := oRange:Value if Empty(xValue) exit endif if xValue == <Kod> oSheet( nRow, nCol2 ):Value := <Zakaz> endif enddo ... oBook:Close(.f.) oExcel:Quit()
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 2212
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.05.12 19:56. Заголовок: Dima пишет: Пока чт..
Dima пишет: цитата: | Пока что интересует: поиск в определенной колонке c определенной строки |
| Форма жестко задана ? Т.е. нужно найти (например: 001/001) и в ячейку "К-во (кг)" написать тебе нужную цифру ?
|
|
|
fil
|
| |
Пост N: 125
Зарегистрирован: 17.06.10
|
|
Отправлено: 21.05.12 20:36. Заголовок: 1. Определяем для Ex..
1. Определяем для Excel-файла ширину/высоту рабочего ранга(было на форуме) 2. Бросаем ранг в массив. Ну и ищем чего надо
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 309
Зарегистрирован: 13.10.05
|
|
Отправлено: 22.05.12 06:27. Заголовок: http://files.mail.ru..
|
|
|
Dima
|
| |
Пост N: 2374
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.05.12 13:48. Заголовок: fil пишет: 1. Опред..
fil пишет: цитата: | 1. Определяем для Excel-файла ширину/высоту рабочего ранга(было на форуме) |
| что то не нашел...... Вроде все получилось , но после заполнения бланка и попытки закрытия EXCEL , он задает вопрос , не желаю ли я сохранить изменения. Как обойти этот запрос и сохраниться ?
|
|
|
fil
|
| |
Пост N: 126
Зарегистрирован: 17.06.10
|
|
Отправлено: 22.05.12 13:59. Заголовок: oExc:Sheets(nn):Used..
oExc:Sheets(nn):UsedRange:Rows:Count oExc:Sheets(nn):UsedRange:Columns:Count oExc:WorkBooks(имя):Close(FALSE,,FALSE)
|
|
|
Dima
|
| |
Пост N: 2375
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.05.12 14:08. Заголовок: Всем спасибо !!!..
Всем спасибо !!!
|
|
|
Dima
|
| |
Пост N: 2376
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.05.12 14:41. Заголовок: Наткнулся на грабли...
Наткнулся на грабли. MT режим. Запущенная в отдельном потоке функция по по заполнению заявок упорно не хочет запускать EXCEL. Функция постоянно выдает FALSE Private переменная oExcel объявлена из фунции которая вызывает Start_Excel() Куда копать ? PS Простой пример без потоков в MT режиме срабатывает нормально. 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 // Ole2TxtError() выдает ошибку 0x800401f0 Res:=.f. END END Return Res
|
|
|
Dima
|
| |
Пост N: 2377
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.05.12 18:30. Заголовок: Похоже в MT режиме и..
Похоже в MT режиме и многопоточной обработкой EXCEL запустить не получиться. Или не прав я и можно как то исправить ситуацию ? PS Уж очень не хочется функцию по заполнению бланков реализовывать в виде отдельной программы и вызывать ее из основной задачи.
|
|
|
fil
|
| |
Пост N: 127
Зарегистрирован: 17.06.10
|
|
Отправлено: 23.05.12 22:41. Заголовок: А так можно: Открыв..
А так можно: Открываем один oExc:=CreateObject(Excel.Application). Открываем файл в нем листы с формами На каждый трейд ActiveX():New( диалог, "OWC11.Spreadsheet" ) и на каждый кладем свою форму. Обрабатываем.
|
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 310
Зарегистрирован: 13.10.05
|
|
Отправлено: 24.05.12 05:43. Заголовок: Private переменная o..
цитата: | Private переменная oExcel объявлена из фунции |
| Я oExcel объявляю в головном файле и стартую из любого места программы
|
|
|
Dima
|
| |
Пост N: 2378
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.05.12 08:59. Заголовок: fil пишет: Открывае..
fil пишет: цитата: | Открываем один oExc:=CreateObject(Excel.Application) |
| Dima пишет: цитата: | Похоже в MT режиме и многопоточной обработкой EXCEL запустить не получиться |
| Dima пишет: цитата: | Ole2TxtError() выдает ошибку 0x800401f0 |
|
|
|
|
Dima
|
| |
Пост N: 2379
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.05.12 15:24. Заголовок: Dima пишет: Уж очен..
Dima пишет: цитата: | Уж очень не хочется функцию по заполнению бланков реализовывать в виде отдельной программы и вызывать ее из основной задачи. |
| Так и поступил. Работает ;)
|
|
|
Softlog86
|
| |
Пост N: 61
Зарегистрирован: 03.12.08
|
|
Отправлено: 25.05.12 12:44. Заголовок: Есть задача сгенерир..
Есть задача сгенерировать два XLS файла из одной DBF . Только разные условия для отбора . Пока делаю последовательно ... Можно-ли клепать их одновременно (как-бы разные листы) ? А затем сохранять каждый лист отдельно ... Но я не знаю как это делать - у меня сохраняется вся книга сразу .... Научите переключать книги и сохранять их отдельно :)
|
|
|
Dima
|
| |
Пост N: 2380
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.05.12 13:53. Заголовок: Примерно так. proc..
Примерно так. proc main local oWorkBook1 local oWorkBook2 local cfile1:=CurDrive()+":\"+CurDir()+"\"+"z1.xls" local cfile2:=CurDrive()+":\"+CurDir()+"\"+"z2.xls" private oExcel if !Start_Excel() quit endif oWorkBook1 := oExcel:Workbooks:Open(cfile1) oWorkBook2 := oExcel:Workbooks:Open(cfile2) oExcel:Visible := .T. oExcel:Windows(oWorkBook1:name()):Activate() // переключение между файлами // oExcel:Windows(oWorkBook2:name()):Activate() переключение между файлами wait oWorkBook1:save() oWorkBook1:close(.f.,,.f.) oWorkBook2:save() oWorkBook2:close(.f.,,.f.) oExcel:Quit() return nil
|
|
|
Softlog86
|
| |
Пост N: 62
Зарегистрирован: 03.12.08
|
|
Отправлено: 26.05.12 17:03. Заголовок: Уже спасибки ! А как..
Уже спасибки ! А как быть если XLS файлов нет ? Они создаются во время обработки данных из других DBF файлов ...... Интересует ещё команды изменения свойств ячейки ( столбца) : Тип данных , выравнивание , шаблон вывода.....
|
|
|
Dima
|
| |
Пост N: 2382
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.05.12 17:20. Заголовок: Softlog86 А посмотр..
Softlog86 А посмотри примерчик \svn\harbour\contrib\hbwin\tests\testole.prg Что касаемо шаблона и выравнивания есть тема на форуме , поищи по слову Excel
|
|
|
fil
|
| |
Пост N: 136
Зарегистрирован: 17.06.10
|
|
Отправлено: 03.08.12 17:13. Заголовок: Всем, привет ! Exce..
Всем, привет ! Excel через ole 1. Как получить текст формулы условного форматирования (ежели таковые определены для ячейки) ? 2. Можно ли программно выполнить формулу условного форматирования ?
|
|
|
Dima
|
| |
Пост N: 2478
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.08.12 18:05. Заголовок: fil Сделай макрос и..
fil Сделай макрос и все увидишь. Можно погуглить на предмет Selection.FormatConditions
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|