Форум » [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

fil: Ну эт понятно. Тока в свойствах FormatConditions я не нашел текста формулы. Собсно, мне нужно отловить событие изменения заливки ячеек формулой условного форматирования дабы прицепить к этим ячейкам примечания.

Dima: Formula1 Formula2 не оно разве ?

fil: Да, это. Можно теперь выполнить эту формулу в харбор синтаксисе и понять изменялась ли заливка. Лучше, конечно, через Interior:ColorIndex, но не получается


Dima: fil пишет: Лучше, конечно, через Interior:ColorIndex http://office.microsoft.com/ru-ru/excel-help/HA001136627.aspx

fil: Эт я знаю. Не получится - формула условного форматирования не меняет ColorIndex/Color. То ли есть еще какой признак цвета, то ли заливка ячейки происходит тока на экране.

Dima: fil Давай XLS файлик (пример) в студию и скажи точно что хош узнать. Поиграюсь.

fil: Победил гада ! Т.к. фомулы условного форматирования отрабатывают тока при визуализации Excel, то в момент заполнения Excel-отчета насильственно рассчитывал их из через Evaluate() и в зависимости от результата клеил комент к ячейке.

gustow: fil пишет: Победил гада ! Победу в студию плиз :) (хотя бы в простейшем примере) А то вдруг пригодится?

fil: Так рассказал же, вроде, все ?! 1. Требовалось брать инфу из исходных Excel файлов и заливать ее в некий Excel файл-шаблон 2. В шаблоне присутствуют как обычные формулы, так и формулы условного форматирования (ФУМ), красящие ячейки в разные цвета 3. ФУМ отрабатывают тока при визуализации Excel, а мне требовалось отловить событие выполнения этих ФУМ при заполнении шаблона 4. Узнать это моно так a) получить ФУМ - ..cells(x, y):FormatConditions(nn):Formula1 б) выполнить ФУМ методом - ..oExc:Evaluate(ФУМ), чтобы оценить возвращаемое значение Пример писать неохота

gustow: Более-менее понятно. Спасибо, fil , за разгадку "еще одной тайны Harbour-вселенной" :)

Dima: Как правильно ? oSheet := oExcel:ActiveSheet() или так oSheet := oExcel:ActiveSheet У меня задача работает нормально а у клиента с таким же EXCEL виснет Код примерно такой. Виснет судя по всему в цикле (временно включил oExcel:Visible) [pre2] oWorkBook := oExcel:WorkBooks:Add() oSheet := oExcel:ActiveSheet() oSheet:Cells:Font:Name := "Arial Cyr" oSheet:Cells:Font:Size := 10 oSheet:Cells( 1, 1 ):Value :=Hb_oemtoansi("Код") oSheet:Cells( 1, 2 ):Value :=Hb_oemtoansi("Наименование") oSheet:Cells( 1, 3 ):Value :=Hb_oemtoansi("Цена") oSheet:Cells( 1, 4 ):Value :=Hb_oemtoansi("Ед.изм") oSheet:Cells( 1, 5 ):Value :=Hb_oemtoansi("Группа") oSheet:Cells( 1, 6 ):Value :=Hb_oemtoansi("Фирма") oSheet:Cells( 1, 7 ):Value :=Hb_oemtoansi("Примечание") oSheet:Range(osheet:cells(1,1),osheet:cells(1,7)):HorizontalAlignment := xlCenter //центр oSheet:Range(osheet:cells(1,1),osheet:cells(1,7)):Font:Bold := .T. oSheet:Range(osheet:cells(1,1),osheet:cells(1,7)):BorderAround( xlContinuous, xlThin) for i=1 to len(mmas) oSheet:Cells( j, 1 ):Value :=mmas[1] oSheet:Cells( j, 1 ):HorizontalAlignment := xlLeft oSheet:Cells( j, 2 ):Value :=mmas[2] oSheet:Cells( j, 2 ):HorizontalAlignment := xlLeft oSheet:Cells( j, 3 ):NumberFormat:="0.00" oSheet:Cells( j, 3 ):Value :=mmas[4] oSheet:Cells( j, 3 ):HorizontalAlignment := xlRight oSheet:Cells( j, 4 ):Value :=mmas[3] oSheet:Cells( j, 4 ):HorizontalAlignment := xlCenter oSheet:Cells( j, 5 ):Value :=mmas[5] oSheet:Cells( j, 5 ):HorizontalAlignment := xlLeft oSheet:Cells( j, 6 ):Value :=mmas[6] oSheet:Cells( j, 6 ):HorizontalAlignment := xlLeft oSheet:Cells( j, 7 ):Value :=mmas[7] oSheet:Cells( j, 7 ):HorizontalAlignment := xlLeft oSheet:Range(osheet:cells(j,1),osheet:cells(j,7)):BorderAround( xlContinuous, xlThin) j++ next oSheet:Columns( 1 ):AutoFit() oSheet:Columns( 2 ):AutoFit() oSheet:Columns( 3 ):AutoFit() oSheet:Columns( 4 ):AutoFit() oSheet:Columns( 5 ):AutoFit() oSheet:Columns( 6 ):AutoFit() oSheet:Columns( 7 ):AutoFit() [/pre2]

Pasha: Я использую oExcel:ActiveSheet, но кажется разницы нет никакой. Подвисание лучше все-таки локализовать, выдавать на экран окно состояния: заполнение заголовка, номер строки массива, выравнивание столбцов. Возможно, что-то делает сам эксель: выполняет какие-то макросы, проверяет орфографию, и при этом подвисает. В коде программы ведь самые простые команды.

Dima: Dima пишет: oSheet:Cells( j, 3 ):NumberFormat:="0.00" Выяснил , падает тут , ненравится ему NumberFormat:="0.00" хммм Error WINOLE 1006 Argument Error _NumberFormat

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

Dima: Порча какая то в Harbour 3.2 , в 2.0 было нормально. В итоговом документе Excel русский текст выглядит как китайский. Исходник [pre2] proc main local oSheet local oWorkBook private oExcel if Start_Excel() oExcel:Visible := .f. oExcel:DisplayAlerts:=.f. oWorkBook := oExcel:WorkBooks:Add() oSheet := oExcel:ActiveSheet() oSheet:Cells:Font:Name := "Arial Cyr" oSheet:Cells:Font:Size := 10 oSheet:Cells( 1, 1 ):Value :=Hb_oemtoansi("Код") oSheet:Cells( 1, 2 ):Value :=Hb_oemtoansi("Наименование") oSheet:Cells( 1, 3 ):Value :=Hb_oemtoansi("Цена") oSheet:Cells( 1, 4 ):Value :=Hb_oemtoansi("Ед.изм") oSheet:Cells( 1, 5 ):Value :=Hb_oemtoansi("Группа") oSheet:Cells( 1, 6 ):Value :=Hb_oemtoansi("Фирма") oSheet:Cells( 1, 7 ):Value :=Hb_oemtoansi("Примечание") oWorkBook:saveas(hb_CurDrive()+":\"+CurDir()+"\price.xls") oWorkBook:close(.f.,,.f.) oExcel:Quit() oWorkBook:=nil oSheet:=nil oExcel:=nil endif return ********************** 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 [/pre2]

Dima: Разобрался. Пришлось добавить REQUEST HB_CODEPAGE_RU1251 hb_cdpSelect( "RU1251" ) ранее и без этого нормально было.

Softlog86: Подскажите : Есть строковое значение Артикул - может быть как строкой так и числом (по факту в DBF базе как символьное значение) . При записи этих артикулов - EXCELL отрезает лидирующий ноль , то есть значение '0125' запишет как '125' Каким способом принудительно заставить EXCELL этого не делать ? Тоесть ячейка по факту должна быть ТЕКСТОВОЙ .... соотв. значения не модифицируются ! Какие ещё есть команды чтоб обойти эту дрянь ?

Pasha: Указать формат ячейки - текстовый, или программно: oSheet:Cells(nRow, nCol):NumberFormat := "@"

Softlog86: Символ собаки "@" - это текстовый ? Если можно - сообщите какие ещё команды управления форматами . Мне нужнее всего текстовый и дата

Andrey: Softlog86 пишет: Мне нужнее всего текстовый Пробел добавь впереди и будет тебе текстовый формат.



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