Форум » [x]Harbour » Снова EXCEL » Ответить

Снова EXCEL

Dima: Ранее с 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: Пока что интересует: поиск в определенной колонке c определенной строки

Pasha: Да никаких особенных граблей быть не может. Примерно так: [pre]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() [/pre]

Andrey: Dima пишет: Пока что интересует: поиск в определенной колонке c определенной строки Форма жестко задана ? Т.е. нужно найти (например: 001/001) и в ячейку "К-во (кг)" написать тебе нужную цифру ?


fil: 1. Определяем для Excel-файла ширину/высоту рабочего ранга(было на форуме) 2. Бросаем ранг в массив. Ну и ищем чего надо

Vlad04: http://files.mail.ru/X3JBC6 Пример загрузки из Excel- в базу

Dima: fil пишет: 1. Определяем для Excel-файла ширину/высоту рабочего ранга(было на форуме) что то не нашел...... Вроде все получилось , но после заполнения бланка и попытки закрытия EXCEL , он задает вопрос , не желаю ли я сохранить изменения. Как обойти этот запрос и сохраниться ?

fil: oExc:Sheets(nn):UsedRange:Rows:Count oExc:Sheets(nn):UsedRange:Columns:Count oExc:WorkBooks(имя):Close(FALSE,,FALSE)

Dima: Всем спасибо !!!

Dima: Наткнулся на грабли. MT режим. Запущенная в отдельном потоке функция по по заполнению заявок упорно не хочет запускать EXCEL. Функция постоянно выдает FALSE Private переменная oExcel объявлена из фунции которая вызывает Start_Excel() Куда копать ? PS Простой пример без потоков в MT режиме срабатывает нормально. [pre2] 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 [/pre2]

Dima: Похоже в MT режиме и многопоточной обработкой EXCEL запустить не получиться. Или не прав я и можно как то исправить ситуацию ? PS Уж очень не хочется функцию по заполнению бланков реализовывать в виде отдельной программы и вызывать ее из основной задачи.

fil: А так можно: Открываем один oExc:=CreateObject(Excel.Application). Открываем файл в нем листы с формами На каждый трейд ActiveX():New( диалог, "OWC11.Spreadsheet" ) и на каждый кладем свою форму. Обрабатываем.

Vlad04: Private переменная oExcel объявлена из фунции Я oExcel объявляю в головном файле и стартую из любого места программы

Dima: fil пишет: Открываем один oExc:=CreateObject(Excel.Application) Dima пишет: Похоже в MT режиме и многопоточной обработкой EXCEL запустить не получиться Dima пишет: Ole2TxtError() выдает ошибку 0x800401f0

Dima: Dima пишет: Уж очень не хочется функцию по заполнению бланков реализовывать в виде отдельной программы и вызывать ее из основной задачи. Так и поступил. Работает ;)

Softlog86: Есть задача сгенерировать два XLS файла из одной DBF . Только разные условия для отбора . Пока делаю последовательно ... Можно-ли клепать их одновременно (как-бы разные листы) ? А затем сохранять каждый лист отдельно ... Но я не знаю как это делать - у меня сохраняется вся книга сразу .... Научите переключать книги и сохранять их отдельно :)

Dima: Примерно так. [pre2] 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 [/pre2]

Softlog86: Уже спасибки ! А как быть если XLS файлов нет ? Они создаются во время обработки данных из других DBF файлов ...... Интересует ещё команды изменения свойств ячейки ( столбца) : Тип данных , выравнивание , шаблон вывода.....

Dima: Softlog86 А посмотри примерчик \svn\harbour\contrib\hbwin\tests\testole.prg Что касаемо шаблона и выравнивания есть тема на форуме , поищи по слову Excel

fil: Всем, привет ! Excel через ole 1. Как получить текст формулы условного форматирования (ежели таковые определены для ячейки) ? 2. Можно ли программно выполнить формулу условного форматирования ?

Dima: fil Сделай макрос и все увидишь. Можно погуглить на предмет Selection.FormatConditions



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