Форум » [x]Harbour » OLE: Сделать DBF из XLS » Ответить

OLE: Сделать DBF из XLS

Лукашевский: Возникла такая вот необходимость... есть у кого рабочий вариант? Нужно ведь проверять все колонки на содержание в первой строке беспробельного латинского наименования, и чтобы ни одно наименование не повторялось, приводить ширину колонки к целочисленной, и наверное кучу ещё тонкостей... И ещё интересно: в Excel 2007 через OLE сохранение в виде DBF-файла сработает, или она там обрублено напрочь - в меню сохранения файла ведь DBF-варианта уже нет...

Ответов - 59, стр: 1 2 3 All

Pasha: Andrey пишет: А как отловить, что файл уже открыт ? Хороший вопрос :) Первая мысль, которая возникла - проверить oExcel:WorkBooks:Count, и пройтись по этой коллекции Но оказалось, что при создании обьекта Excel запускается его новая копия, и Count равно нулю Надо как-то связаться с уже запущенным Excel Кстати, если из документа надо только брать данные, его можно открывать в режиме readonly, это 3-й параметр метода Open

Andrey: Другой вопрос: А как прочитать значение ячейки ? oExcel := TOleAuto():New( "Excel.Application" ) IF Ole2TxtError() != 'S_OK' cError := "Excel файл " + cFileXls + " не могу открыть !" + CLRF + CLRF + "EXCEL OLE ERROR [" + Ole2TxtError() + "]" MsgStop( cError, "Ошибка" ) lOpenXls := .F. ELSE lOpenXls := .T. ENDIF IF lOpenXls // Открыл без ошибок oExcel:Visible := .T. oExcel:Workbooks:Open( cFileXls, 0 ) oSheet := oExcel:Get( "ActiveSheet" ) oRange := oExcel:ActiveCell:SpecialCells( xlLastCell ) nLenRecnoXls := oRange:Row nLenColumnXls := oRange:Column cRecno := AllTrim(Str( nLenRecnoXls )) cColumn := AllTrim(Str( nLenColumnXls )) cRange := '"'+'A'+cRecno+':'+Chr(64+nLenColumnXls)+cRecno+'"' MsgInfo(cRange) cTemp := oSheet:Range( cRange ) MsgInfo( cTemp )

Pasha: Andrey пишет: А как прочитать значение ячейки ? oSheet:Cells(nRow, nCol):Value


a_sidorov: Чтение из активного документа (созданного другим приложением или открытого) TRY oExcel := GetActiveObject( "Excel.Application" ) CATCH TRY oExcel := CreateObject( "Excel.Application" ) CATCH Alert( "ERROR! Excel not avialable. [" + Ole2TxtError()+ "]" ) RETURN END END oExcel:ActiveWorkbook() oAS := oExcel:ActiveSheet() Количество закладок lw:= oExcel:Worksheets():count Нужная закладка lt oAS := oExcel:Worksheets(lt) Примеры чтения из вычисленной программой ячейки schet:=oAS:Range(nc+alltrim(str(num_str,6))):value Tip_s:=Alltrim(HB_ANSITOOEM(oAS:Range(nsc+alltrim(str(num_str,6))):value))

Andrey: Pasha пишет: oSheet:Cells(nRow, nCol):Value Что-то не совсем понятно..... Чему равно nRow, nCol ? Числам ? А где же "A150:B150" ? Или можно использовать 2 варианте ?

Pasha: Это числовой номер строки и колонки Для Cells синтаксис A1 не поддерживается

Andrey: Спасибо ВСЕМ большое за помощь !!!

Andrey: Рано порадовался.... Из памяти не выгружается ЕХСЕЛ... Хотя ставлю при выходе из функции oExcel:Quit() Где собака зарыта ?

Pasha: попробуй так oBook:Close(.f.) // закрытие документа-книги oExcel:Quit()

Andrey: Уф... сделал.... Выкладываю ссылку на готовую программу. Может кому понадобиться.... http://files.mail.ru/YFRFIO Спасибо всем за помощь.....

Oskar_AAA: Добрый день.... если можно выложить исходный код конвертера XLS To DBF буду благодарен... в XLS файле будут объедененные строки (код пункта продажи) далее идут строки код товара (до 8 строк) наименование товара, цена итд... По поводу объединенных строк если можно то поподробнее.... Конвертер из DBF To XLS с Вашей помощью уже сделал. Всем спасибо

Pasha: Oskar_AAA пишет: По поводу объединенных строк если можно то поподробнее.... Чтобы объединить в Excel произвольную область ячеек, надо выдать команды: oRange := oSheet:Range(oSheet:Cells(nRow1, nCol1), oSheet:Cells(nRow2, nCol2)) oRange:Merge()

gustow: Pasha , Оскар про "объединенные строки", наверное (как я понял), спрашивал - "как их обойти?", а не "как их в экселке создать?". Oskar_AAA , загуглил я на "xls to dbf harbour" - вылетело, в частности, на пост из конфы "Harbour Users": http://groups.google.com/group/harbour-users/browse_thread/thread/a7e274f383c77d55 Может, поможет? (при доработке надфилем по месту :) )

Andrey: Oskar_AAA пишет: если можно выложить исходный код конвертера XLS To DBF буду благодарен Я уже сделал 3 программки на Минигуи. С помощью наших гуру... Паши, Филатова и других... Пример выкладываю. Исходник конвертирования тоже выкладываю, там нетрудно понять и переделать на хХарбор. http://files.mail.ru/CP2U1B Я Филатову высылал полные исходники для МиниГуи. И как я вижу по Екселю нужны примеры решения тех или иных проблем. Может выложите кто уже работал готовые решения ? Типа: решение того-то ... исходник...

SADSTAR4: "Ася открыла для себя прокладки Олвейс" а я открыл для себя что под харбором для написания экселовских функций лучше использовать нотацию RC. Например [pre2] //=СЧЁТ(RC[-10]:RC[-1]) //=СУММ(RC[-11]:RC[-2])/RC[-1] //написать формулы k:=len(aRes) ... for i:=1 to 24 //часы суток oSheet:Cells( Row1+i, 1+k+1):Formula:="=СЧЁТ(RC[-"+alltrim(str(k))+"]:RC[-1]" oSheet:Cells( Row1+i, 1+k+2):Formula:="=ОКРУГЛ(СУММ(RC[-"+alltrim(str(k+1))+"]:RC[-2])/RC[-1];0)" next [/pre2] 1-количество непустых ячеек среди К ячеек впереди текущей в текущей строке 2-среднее арифметическое среди вышеуказанных ячеек И никакой возни с преобразованием в буквенное наименование столбцов. P.S. можно оптимизировать - вынести формирование формул за цикл.

Oskar_AAA: Добрый день, коллеги. Спасибо за информацию. Буду изучать. О результатах сообщу. Спасибо.

Oskar_AAA: Андрей, добрый день. У меня нет файла Excel.ch - где его взять. Использую xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6476)....

Andrey: Oskar_AAA пишет: У меня нет файла Excel.ch - где его взять. Выслал на почту.

Oskar_AAA: Добрый день, вроде получилось... по краней мере на сегодня устраивает. Данные формата Дата пока не пробовал принимать. Всем спасибо.

СевДон: Andrey! Пока я вышел из отпуска твои линки уже не работают... Мож есчо раз выложить эти проги по конвертации?



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