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

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

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

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

Pasha: Дык.. как Очень даже просто как Пользователю надо клацнуть на полочке панели задач на харбор-программу, и она получит фокус.

Oskar_AAA: Хотелось бы без перехода на панель задач.... в программе вызывается Excel, пользоваиель делает то что хочет с данными, записывает файл и закрыает Приложение Excel и переходит обратно в прграмму...

Pasha: Боюсь, что это невозможно. Во всяком случае, я не знаю, как это сделать. Программа как-то должна отследить, что Excel закрыт. Но Excel остается в памяти, пока висит программа. Есть у ms такая фича. Но зачем все это ? Когда excel закроется, windows и сама передаст фокус на предыдущее окно, т.е харбор-программу.


Andrey: Oskar_AAA пишет: записывает файл и закрыает Приложение Excel и переходит обратно в прграмму... Нельзя наверно. Как Эксель узнает что нужно вернуть фокус обратно в задачу ? Хотя наверно можно в своей задаче опрашивать в цикле каждую минуту на наличие окна Экселя, и если его нет, то переключить(распахнуть) окно своей задачи.

Oskar_AAA: Andrey пишет: наверно можно в своей задаче опрашивать в цикле каждую минуту на наличие окна Экселя, но в памяти может быть загружен Excel совсем не относящийся к моей программе. Pasha, в том то и дело, что активируется Excel в фоновом режиме и висит в своем окне, а программа продолжает идти дальше по тексту кода, т.е. читает данные из файла XLS и пишет в БД. Хотя Пользователь не ввел необходимые данные....

Andrey: Oskar_AAA пишет: но в памяти может быть загружен Excel совсем не относящийся к моей программе. Тогда бери и определяй окно Excel с заголовком ТВОЕГО файла.... Список процессов можешь получить вот с помощью такой программульки... http://files.mail.ru/OX6T20 А там дальше делай с ним что хочешь....

Andrey: Опять проблема с разными версиями Экселя. Создаю Dbf в кодировке RU866. Открываю в экселе и записываю файл в формате XLS. На версии 2003 работает а на новой 2010 вылетает с такой ошибкой: Вот код:[pre2] cFileDbf := "E:\РУССКИЕ-БУКВЫ\тест-эксель.dbf" cFileXls := ChangeFileExt( cFileDbf, '.xls' ) BEGIN SEQUENCE WITH {|e| Break( e )} oExcel := GetActiveObject( "Excel.Application" ) RECOVER BEGIN SEQUENCE WITH {|e| Break( e )} oExcel := CreateObject( "Excel.Application" ) RECOVER MG_Stop( "ОШИБКА! Excel не доступен. [" + win_oleErrorText() + "]" ) RETURN ( "" ) END END WaitWindow( 'Загрузка Excel ... ' + cFileNoPath(cFileDbf), .T. , 800, 14, NIL, YELLOW, RED) oExcel:Visible := .F. // НЕ Показывать EXCEL oExcel:DisplayAlerts := .F. // не приставать с запросами oExcel:WorkBooks:Add() // для версий EXCEL >= 2010 oExcel:Workbooks:Open( cFileDbf, 0 ) oBook := oExcel:ActiveSheet() IF FILE( cFileXls ) // Чтобы Excel не приставал в вопросом "Такой файл уже существует" nErr := DELETEFILE(cFileXls) IF nErr == 0 oBook:SaveAs( cFileXls, xlExcel9795 ) ELSE cMsg := REPLICATE( "-._.", 16 ) + ";;" cMsg += "Ошибка удаления файла: "+cFileXls+" !; Ошибка: "+HB_NtoS(nErr)+";;" cMsg += "Файл занят другим процессом в памяти !;;" cMsg += REPLICATE( "-._.", 16 ) + ";;" MG_Stop( cMsg , "Ошибка!" ) ENDIF ELSE oBook:SaveAs( cFileXls, xlExcel9795 ) ENDIF oExcel:Quit() WaitWindow() [/pre2] Что можно поправить, чтобы не вылетало ? Про то что раньше обсуждали - http://clipper.borda.ru/?1-4-0-00001069-000-10001-0-1637697000 - помню !

Dima: Найди четырёх )))))))))

Oskar_AAA: Добрый день, тоже раньше были проблемы с версиями MS Excel при SaveAs(Name_Xls, версия MS) Попробуйте убрать параметр версии MS Excel замените на SaveAs(Name_Xls)

Haz: Andrey пишет: Что можно поправить, чтобы не вылетало ? А чего сразу то не писать в формате Excel. Есть как минимум 4 способа работы с этим форматом и два из них вообще не требует Excel на компе.. 5 лет одни и те же грабли, может пора с другой стороны к снаряду подойти?

Oskar_AAA: Имя файла MS Excel всегда явно задаю с расширением XLSX и нет проблем ... 2003 сейчас найти трудно. В принципе тип расширения XLS/XLSX можно задать в настройках программы.

Dima: oEx:DefaultSaveFormat

Pasha: Andrey пишет: oBook:SaveAs( cFileXls, xlExcel9795 ) это же Excel версии 95 и 97 Зачем ??? Наверное Excel 2003 поддерживает такой древний формат, а 2010 уже нет

Andrey: Haz пишет: А чего сразу то не писать в формате Excel. Есть как минимум 4 способа работы с этим форматом и два из них вообще не требует Excel на компе.. 5 лет одни и те же грабли, может пора с другой стороны к снаряду подойти? Да по быстрому решил dbf преобразовать в xls, без всяких объектов МиниГуи. Попытка не удалась ! Переделал пути и имя файла в латиницу - тоже такая же ошибка .... Dima пишет: oEx:DefaultSaveFormat Спасибо ! Попробую. Oskar_AAA пишет: замените на SaveAs(Name_Xls) Это тоже попробую. Спасибо ! Pasha пишет: это же Excel версии 95 и 97 Зачем ??? Ну не знал... 2003 работал, думал и 2010 будет...

Haz: Andrey пишет: думал и 2010 будет... Даже в 2016 есть поддержка форматов 95 и 97

Dima: Haz пишет: Даже в 2016 есть поддержка форматов 95 и 97 2021 тоже поддерживает :) линк

Pasha: Haz пишет: Даже в 2016 есть поддержка форматов 95 и 97 У меня как раз 2016. Не поленился, прогнал этот пример. Не работает. Заменил xlExcel9795 на xlExcel8. Работает. Поддержка может она и есть. Теоретически, в доке. Но вот глючит она выходит

Haz: Pasha пишет: У меня как раз 2016. Не поленился, прогнал этот пример. Не работает. Потому что при сохранении в 95/97 Excel раз 5 ругается матом про потерю функционала и совместимость. Но при сохранении через OLE эту ругань не видно, видимо это и приводит ошибке при игноре запросов Excel

Pasha: Ну да, ругается: Для сохранения содержащегося в этом файле проекта VBA в формате Excel 5/0/95 требуется компонент, который в настоящий момент не установлен.... Можно конечно поискать этот компонент, но ЗАЧЕМ???

Andrey: oExcel:DefaultSaveFormat() - не работает. Сделал так:[pre2] oBook:SaveAs( cFileXls, xlWorkbookNormal ) // работает в 2003 и в 2016 !!! DO EVENTS oExcel:Quit() [/pre2]



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