Форум » [x]Harbour » excel » Ответить

excel

valery2: Хотелось-бы узнать, есть-ли эффективный ( быстрый ) способ экспорта dbf -> xls? Реальный!

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

valery2: Уточняю. У моих конкурентов - Delphi - берем примерно 10000 записей: 3-4 сек., у меня: 1.5 мин !!!!!!

valery2: Читал другие форумы- везде, что-то, нужно использовать кривое, чужое и т. п.. А у нас ?

valery2: Небожители - АУ !!!!!!!!


Петр: Что хотим экспортировать, структура таблицы. И каким способом делаем это сейчас?

valery2: Что-угодно ( прайс, база номенклатуры, накладные и т. д. и т.п. ). Пользуюсь : oExcel := TOleAuto():New( "Excel.Application" ) if Ole2TxtError() != 'S_OK' MsgStop('Excel is not available!', PROGRAM ) RETURN endif oExcel:Visible := .F. oExcel:WorkBooks:Add() oSheet := oExcel:Get( "ActiveSheet" ) Aeval( (cAlias)->( DBstruct(cAlias) ), { |e,i| oSheet:Cells( nCell, i ):Value := e[DBS_NAME] } ) do while !(cAlias)->( EoF() ) nCell++ aColumns := (cAlias)->( Scatter() ) aEval( aColumns, { |e,i| oSheet:Cells( nCell, i ):Value := e } ) (cAlias)->( DBskip() ) enddo oBook := oExcel:Get("ActiveWorkBook") oBook:Title := cAlias oBook:Subject := cAlias oBook:SaveAs(cFile) oExcel:Quit() из MiniGUI\SAMPLES\Applications\DBFview

Петр: Реализация OLE в Harbour не очень быстрая. Если действительно нужна скорость выгрузки, можно использовать прямую запись в файл. Естественно структура xls 2003 или 2007 сложная. Но в сети довольно много примеров генерации файлов biff 2.1 (до Excel 5.0). Такой файл легко открывается всеми версиями Excel - от 97 до 2007. К тому же такой способ можно использовать на компьютере без установленного MS Office. Если же Excel установлен, то просто открываем такой файл и сохраняем в более современной версии.

valery2: Но ведь это - не метод. Вы мудрые где-тож - чего-тож уже надыбали поделитесь А если без шуток - опять у нас нет решения на простые для других вопросы

Петр: valery2 пишет: Но ведь это - не метод.. Что значит не метод? И что значит - опять у нас нет решения на простые для других вопросы?

Pasha: valery2 пишет: поделитесь В сырцах TSBrowse есть метод Excel2 - из грида формируется документ xls Можно его использовать, конечно, модифицировав для данного случая

valery2: Pasha пишет: В сырцах TSBrowse есть метод Excel2 - из грида формируется документ xls Можно его использовать, конечно, модифицировав для данного случая Спасбо! Честное слово. Но там же работы - на неделю, а доводка - на месяц(ы) Неужели никто реально не решал эту проблемму ? Потом, TSBrowse - с ним тоже пробовал. Результат - тот-же. Может я что-то не так ?

Петр: valery2 пишет: Неужели никто реально не решал эту проблемму ? Боюсь, что ни у кого таких глобальных проблем не возникало. Откройте любую базу, сделайте COPY TO temp.xls DELIMITED WITH TAB откройте в Excel вновь созданный temp.xls Используйте OLE вместо "напильника" Получите тот же результат oExcel := TOleAuto():New( "Excel.Application" ) if Ole2TxtError() != 'S_OK' MsgStop('Excel is not available!', PROGRAM ) RETURN endif oExcel:Visible := .F. oExcel:WorkBooks:Add() oSheet := oExcel:Get( "ActiveSheet" ) Aeval( (cAlias)->( DBstruct(cAlias) ), { |e,i| oSheet:Cells( nCell, i ):Value := e[DBS_NAME] } ) do while !(cAlias)->( EoF() ) nCell++ aColumns := (cAlias)->( Scatter() ) aEval( aColumns, { |e,i| oSheet:Cells( nCell, i ):Value := e } ) (cAlias)->( DBskip() ) enddo oBook := oExcel:Get("ActiveWorkBook") oBook:Title := cAlias oBook:Subject := cAlias oBook:SaveAs(cFile) oExcel:Quit() но гораздо быстрее. P.S. Реализация метода Excel 2 в TSBrowse - это та же генерация файла biff 2.1.

valery2: Вот за ЭТО - СПАСИБО !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

valery2: Прошу пощения, но опять непонятки. Я, мягко говоря, не спец ни с excel, ни с ole.Петр пишет: сделайте COPY TO temp.xls DELIMITED WITH TAB откройте в Excel вновь созданный temp.xls сделал Петр пишет: Используйте OLE вместо "напильника" а вот тут - я тупорылый. temp.xls - ведь текстовый. И что сним делать ?

Andrey: valery2 пишет: а вот тут - я тупорылый. temp.xls - ведь текстовый. И что сним делать ? Открывай его в Екселе вплоть до: RUN excel temp.xls Или через Оле вызывать Ексел и открывать этот файл. Пример можете смотреть в ?:\xHarbour\tests\testole.prg Успехов ....

valery2: Открывается-то элементарноoExcel:WorkBooks:Open( CurDrive() + ":\" + curdir()+"\temp.xls" ) А вот дальше... Дохожу до oBook:SaveAs(kyda+"\ttt.xls") Сыплются запросы на сохранение, замену. Забыл сказать: вначале oExcel:Visible := .F. Нужно, чтобы весь просесс был скрытым для юзера. А - oBook:SaveAs(kyda+"\ttt.xls") - сначала задает вопрос "сохранить ttt.xls", затем сообщает, что такой уже есть ( он успел уже кинуть туда ttt.xls, но с текстовыми потрохами), потом выдет putfile, с установками на txt, и, только, указав все атрибуты, получаю нужное. Нужно-то все молча.

valery2: Вот текст :procedure dbxls(kyda) Local oExcel, oSheet, oBook oExcel := TOleAuto():New( "Excel.Application" ) if Ole2TxtError() != 'S_OK' MsgStop('Excel не найден!') RETURN endif COPY TO temp.xls DELIMITED WITH TAB oExcel:Visible := .F. oExcel:WorkBooks:Open( CurDrive() + ":\" + curdir()+"\temp.xls" ) oSheet := oExcel:Get( "ActiveSheet" ) oBook := oExcel:Get("ActiveWorkBook") oBook:SaveAs(kyda+"\ttt.xls") oExcel:Quit() return Где-что-нитак?

Andrey: valery2 пишет: сначала задает вопрос "сохранить ttt.xls", затем сообщает, что такой уже есть ( он успел уже кинуть туда ttt.xls, но с текстовыми потрохами), потом выдет putfile, с установками на txt, и, только, указав все атрибуты, получаю нужное. Перед записью в ttt.xls удаляй сам такой файл, не надейся на ЕКСЕЛЬ !!! И посмотри здесь на форуме как сохранить файл для WORD'a - технология одна ОЛЕ !!!

valery2: Andrey пишет: Перед записью в ttt.xls удаляй сам такой файл, не надейся на ЕКСЕЛЬ !!! Посмотрите на мою проц - в этом вся загвоздка!!!!! Перед oBook:SaveAs(kyda+"\ttt.xls") ничего не происходит! Вот далее - все то, что перечисленно выше. Удалять-то нечего!?

valery2:

valery2: Нашел на форуме SaveAs(FileName, FileFormat, LockComments, Password, AddToRecentFiles, WritePassword, ReadOnlyRecommended, EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData, SaveAsAOCELetter, Encoding, InsertLineBreaks, AllowSubstitutions, LineEnding, AddBiDiMarks) Но, если с 1-м параметром все ясно, 2-й ---- не знаю что подставить- все ошибка. За 3-й еще не брался.



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