Форум » [x]Harbour » Нужен конвертер DBF в XLS » Ответить

Нужен конвертер DBF в XLS

Oskar_Aa: Добрый день, нужен конвертер формата DBF (консольный xHarbour) в формат XLS, с перекодировкой из 866 в 1251 Спасибо...

Ответов - 105, стр: 1 2 3 4 5 6 All

Oskar_AAA: Прикрепил файл... только ссылку не запомнил Function Xls_Cvod Local oExcel,oSheet,oBook,oAs Local oExcel_S,oSheet_S,oBook_S,oAs_1 Main_File:=Mar10+'Rpt_Azs' // сводный отчет oExcel_S:=ToleAuto():New("Excel.Application") oExcel_S:Workbooks:Open(Main_File) oBook_S :=oExcel_S:ActiveWorkBook oExcel_S:Set( "DisplayAlerts",.F.) oAs_S :=oExcel_S:ActiveSheet() oSheet_S:=oBook_S :Sheets(1) oExcel_S:Visible := .T. // 1 xls отчет File_Ex:='01_Table' Xls_Copy:=Mar12+File_Ex oExcel :Workbooks:Open(Xls_Copy) oExcel :Set( "DisplayAlerts",.F.) oAs:= oExcel:ActiveSheet() oRange := oExcel:ActiveCell:SpecialCells(xlLastCell) cRecno :=oRange:Row cColumn:=oRange:Column oAs:Range(oAs:Cells(2,2),oAs:Cells(cRecno,cColumn-4)):Select() oAs:Range(oAs:Cells(2,2),oAs:Cells(cRecno,cColumn-4)):Copy() // переход на сводный отчет oAs_S:Cells(5,1):Select() oAs_S:Paste() Hb_gtInfo(HB_GTI_CLIPBOARDDATA, "") // очистка буфера обмена oExcel:CutCopyMode := .F. oExcel:Quit() // закрытие локального xls файла // 2 xls отчет File_Ex:='02_table' Xls_Copy:=Mar12+File_Ex oExcel :Workbooks:Open(Xls_Copy) Hb_gtInfo(HB_GTI_CLIPBOARDDATA, "") // очистка буфера обмена oAs:= oExcel:ActiveSheet() oExcel :Visible := .T. oExcel :Set( "DisplayAlerts",.F.) oRange := oExcel:ActiveCell:SpecialCells(xlLastCell) cRecno :=oRange:Row cColumn:=oRange:Column oAs:Range(oAs:Cells(2,2),oAs:Cells(cRecno,cColumn)):Select() oAs:Range(oAs:Cells(2,2),oAs:Cells(cRecno,cColumn)):Copy() oExcel:Quit() // переход на сводный отчет oBook_S :=oExcel_S:ActiveWorkBook oAs_S :=oExcel:ActiveSheet() oSheet_S:=oBook_S :Sheets(2) oAs_S :Cells(5,1):Select() oAs_S:Paste() oAs_S:SaveAs(Main_File,Excel97_10) Hb_gtInfo(HB_GTI_CLIPBOARDDATA, "") oExcel:CutCopyMode := .F. oAs_S:SaveAs(Main_File,Excel97_10) // запись сводного отчета oExcel_S:Quit()

Oskar_AAA: „O„Љ„y„q„{„p „Ѓ„‚„y „Ђ„‚„p„q„Ђ„„„{„u 2 xls „†„p„z„|„p „~„p „ѓ„„„‚„Ђ„{„u oAs_S :Cells(5,1):Select() |Error BASE/1004 Class: 'NIL' has no exported method: CELLS Arguments: ( [ 1] = | |Type: U [ 2] = Type: N Val: 5 [ 3] = Type: N Val: 1) „ |

Oskar_AAA: ссылка на файл http://zalil.ru/31804807


Oskar_AAA: Нашел ошибку, в строке oAs_S :=oExcel:ActiveSheet() записал как oAs_S :=oExcel_S:ActiveSheet(), теперь ругается на oAs_S:Paste() Error Excel.Application:ACTIVESHEET/3 DISP_E_MEMBERNOTFOUND: PASTE Arguments: (| |)

Oskar_AAA: Получилось, спасибо за советы и терпение.... Теперь вопрос как снять выделение диапазона на листах сводного отчета? Использую команду Hb_gtInfo(HB_GTI_CLIPBOARDDATA, "") // очистка буфера обмена oExcel_S:CutCopyMode :=.F. // снятие выделения диапазона ячеек все листы, которые получены через копирование ячеек из локальных XLS остаются с выделенным диапазоном.

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

Andrey: Oskar_AAA пишет: Дективировал выделение ячеек, через выбор ячейки на листе.... А как ? Нам тоже интересно !

Oskar_AAA: Andrey, установил куросор или другими словами активировал ячейку... oSheet_S:=oBook_S :Sheets(3):Select() // выбор листа и активация нужного листа oBook_S :=oExcel_S:ActiveWorkBook oAs_S :=oExcel_S:ActiveSheet() oSheet_S:=oBook_S :Sheets(3) oAs_S :Cells(5,1):Select() // установка нужной ячейки с которой надо вставлять из буфера oSheet_S:Paste() // собственно вставка oAs_S :Cells(5,1):Select() // активация ячейки

Oskar_AAA: Добрый день, возникла интересная ситуация. На 1 ПК установлена русская версия Windows 7, SP1 и Office 2010, на 2 ПК XP, SP1 и Office 2003. На этих ПК установлены xHarbour, BCC5 одинаковые. Так вот на Windows 7, SP1 и Office 2010 обработка сводного отчета XLS проходит нормально, а на другом вываливается по ошибке фрагмент кода обработки oSheet_S:=oBook_S :Sheets(1):Select() oBook_S :=oExcel_S:ActiveWorkBook oAs_S :=oExcel_S:ActiveSheet() oSheet_S:=oBook_S :Sheets(1) oAs_S :Cells(5,1):Select() Day_Excel:=Mar12+Dtos(Cdata)+'Day' // формирование имени файла отчета oAs_S:SaveAs(Day_Excel,Excel97_10) // запись файла отчета oExcel_S:Quit()

Chikanuk: Oskar_AAA пишет: oAs_S:SaveAs(Day_Excel,Excel97_10) // запись файла отчета А Office 2003 разве работает с форматом Office 2010 Надо бы сохранять в формате 97-2003 (или же 97-2000). Как вариант - поставить на остальные 2 компа Office 2010.

Pasha: Огласите, что за ошибка и что такое Excel 97_10 ? Какая-то переменная ?

Chikanuk: Pasha пишет: что такое Excel 97_10 ? Какая-то переменная ? oAs_S:SaveAs(Day_Excel,Excel97_10) Это из VBA: параметр, указывающий, в каком формате Excel будет сохранять файл с именем, указанным в первом параметре. В данном случае Excel97_10, то есть в формате Office 2010. А Oskar_AAA пытается сохранить в этом формате из Office 2003, на что тот реагирует ошибкой. Надо бы ставить Excel97_03, но тогда при попытке запустить под Office 2000/97 опять ошибка вылезет. Параметр Excel97 более универсален: будет работать с 97 по 2010 включительно.

Oskar_AAA: Excel97_10 - это есть переменная, котора принимает значение 43 или 56 в зависимости от версии MS Excel, прописана в настройках своего ПО. программа вываливается на Exce 2003 ТОЛЬКО при обработке двух XLS отчетов одновременно, т.е . открывает локальный отчет, берет из него данные и ВНОСИТ их в уже ОТКРЫТЫЙ сводный отчет на определенный лист. Далее закрывается локальный отчет и копия oExcel, котрым он был открыт. Далее опять запускается новая копия Excel и открывается другой локальный отчет и опять берет из него данные и ВНОСИТ их в уже ОТКРЫТЫЙ сводный отчет на определенный лист. Попытка открыть Два файла использую одну копию Excel у меня вылетает ошибка. Как открывать два и более файлов, использую одну копию Excel (как определить и различать переменные oExcel, oBook, oSheets, oAs, oRange)? Как записать и закрыть определеный (Документ) файл XLS, при этом не Закрывая само Приложение Excel? пока делаю так: Local oExcel,oSheet,oBook,oAs Local oExcel_S,oSheet_S,oBook_S,oAs_1 // svod XLS Main_File:=Mar10+'Rpt_Azs' oExcel_S:=tOleAuto():New("Excel.Application") oExcel_S:Workbooks:Open(Main_File) oBook_S :=oExcel_S:ActiveWorkBook oAs_S :=oExcel_S:ActiveSheet() oSheet_S:=oBook_S :Sheets(1):Select() oExcel_S:Set("DisplayAlerts",.F.) oExcel_S:Visible := .F. // local XLS 1 File_Ex:='01_Table' Xls_Copy:=Mar12+File_Ex oExcel :=tOleAuto():New("Excel.Application") oExcel :Workbooks:Open(Xls_Copy) oExcel :Set("DisplayAlerts",.F.) oExcel :CutCopyMode := .F. oAs:= oExcel:ActiveSheet() oRange :=oExcel:ActiveCell:SpecialCells(xlLastCell) cRecno :=oRange:Row cColumn:=oRange:Column /// /// oExcel_S:CutCopyMode :=.F. oExcel:Quit() oAs:=Nil oExcel:=Nil oRange:=Nil oBook :=Nil // local XLS 2 File_Ex:='02_table' Xls_Copy:=Mar12+File_Ex oExcel :=tOleAuto():New("Excel.Application") oExcel :Workbooks:Open(Xls_Copy) oExcel :Visible := .F. oExcel :Set("DisplayAlerts",.F.) oExcel :CutCopyMode :=.F. oExcel :Visible := .F. oAs:= oExcel:ActiveSheet() oRange :=oExcel:ActiveCell:SpecialCells(xlLastCell) cRecno :=oRange:Row cColumn:=oRange:Column oAs:Range(oAs:Cells(2,2),oAs:Cells(cRecno,cColumn)):Select() oAs:Range(oAs:Cells(2,2),oAs:Cells(cRecno,cColumn)):Copy() oExcel :Visible := .F. oExcel_S:Visible := .F. /// /// oExcel:Quit() oAs:=Nil oExcel:=Nil oRange:=Nil oBook :=Nil

Pasha: Так все-таки, что за ошибка возникает ? И на каком точно операторе, SaveAs ?

Oskar_AAA: Pasha, номер ошибки и строку кода, на которой вылетает сброшу в понедельник. Сейчас под руками нет того ПК. Спасибо

Oskar_AAA: Добрый день всем. Pasha, сообщение об ошибке ----------------------------- xHarbour Error Log ------------------------------ Date...............: 07/10/2011 Time...............: 21:21:55 Available memory...: 690844 Current disk.......: C Current directory..: TEMP.BL1 Free disk space....: 17157193728 Operating system...: Windows XP Professional 5.01.2600 Service Pack 3 xHarbour version...: xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6476) xHarbour built on..: Jun 11 2009 09:38:24 C/C++ compiler.....: Borland C++ 5.5.1 (32 bit) Multi Threading....: NO VM Optimization....: 2 -------------------- Internal Error Handling Information --------------------- Subsystem Call ....: Excel.Application:ACTIVESHEET System Code .......: 3 Default Status ....: .F. Description .......: DISP_E_MEMBERNOTFOUND Operation .........: SAVEAS Arguments .........: [ 1] = Type: C Val: C:\PROBA.ALL\FILES.EXP\20110907Day [ 2] = Type: N Val: 43 Involved File .....: Dos Error Code ....: 0 Trace Through: ---------------- TOLEAUTO:SAVEAS : 0 in Module: source\rtl\win32ole.prg EXCEL_DAY1 : 1,835 in Module: COMM_004.prg EXPORT_DATA : 474 in Module: MAIN_000.prg MAIN : 184 in Module: MAIN_000.prg

Pasha: Oskar_AAA пишет: -------------------- Internal Error Handling Information --------------------- Subsystem Call ....: Excel.Application:ACTIVESHEET System Code .......: 3 Default Status ....: .F. Description .......: DISP_E_MEMBERNOTFOUND Operation .........: SAVEAS Метод SaveAs надо применять не к листу, а к книге, т.е. к oBook. Лист ведь отдельно не сохраняется. Сохраняется вся книга.

Oskar_AAA: Pasha, т.е надо записать oWorbook_S:SaveAs(Day_Excel,Excel97_10) вместо oAs_S:SaveAs(Day_Excel,Excel97_10) я правильно понял?

Pasha: Oskar_AAA пишет: Pasha, т.е надо записать oWorbook_S:SaveAs(Day_Excel,Excel97_10) вместо oAs_S:SaveAs(Day_Excel,Excel97_10) я правильно понял? В вашем коде же нет переменной oWorbook_S. И из воздуха она сама по себе не возникнет. Надо использовать ту переменную, в которую зенесено значение ActiveWorkbook, или какой-либо другой книги, которую надо сохранить.

Oskar_AAA: попробую на другом ПК, это вечером. А как сделать так чтобы: в процессе работы активировался Excel, пользователь внес необходимые данные, затем прошла запись данных в файл XLS и переход обратно в xHarbour. Другими словами: ввод данных в дилоговом режиме, активируется Excel, пользователь вносит данные в таблицу Excel, записывает Excel файл и управление обратно переходт в программу xHarbour. У меня gпользователи привыкли к вводу в Excel...



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