:: Архив конференции по VFP до 2005 года
передача dbf в xls
snoop
Автор

Сообщений: 378
Дата регистрации: 14.11.2002
я передаю данные в екселб вот таки образом

SELECT &clEndStr from &kkk INTO CURSOR zzz
oleApp = CREATEOBJECT("Excel.Application")
OleApp.Workbooks.Add
FOR i=1 TO RECCOUNT()
GO i
FOR z=1 TO FCOUNT()
fld=FIELD(z)
DO CASE
CASE TYPE('&fld')='D'
vl=DTOC(&fld)
CASE TYPE('&fld')='N'
vl=STR(&fld)
CASE TYPE('&fld')='L'
vl=IIF(&fld=.F.,'0','1')
OTHERWISE
vl=&fld
ENDCASE
OleApp.Cells(i,z).Value=vl
ENDFOR
ENDFOR
ThisForm.Text1.Value=""
ThisForm.Container5.Visible= .f.
OleApp.Visible=.T.
OleApp.quit()
коротко= перебераю в курсоре столбци и строки, чекаю их, а потом втыкаю в эксель, но файл 37 столбцов и 4000 строк обрабатывается 4-е минуты! на машине PIV-2,8HT, 512DDR,SATA а что говорить про ламеров?

я уверен=делаю не правильно, подскажите!!
Ratings: 0 negative/0 positive
Re: передача dbf в xls
boba

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Работа через createobject нужна в том случае, если вам нужно обогатить екселовсий документ чем то новеньким
Для банального копирования подходит
copy to ... type xls
Работает раз в 50 быстрее
Новый документ уже можно подправить указанным образом, поправив вместо английских названий колонок в первом ряду свои




------------------
не имей 100 рублей, а имей сто друзей
Ratings: 0 negative/0 positive
Re: передача dbf в xls
Vladimir_Knyr

Сообщений: 1711
Откуда: г. Енисейск
Дата регистрации: 15.12.2003
Hi snoop, boba
и еще можно добавить, к сказанному : Поиск :: "экспорт excel"




------------------
хороший код работать будет и обязан, а плохой не жалко.
Ratings: 0 negative/0 positive
Re: передача dbf в xls
boba

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Я встречался неоднократно, когда у заказчика в екзе варианте программы команды
export /import давали неустранимые ошибки. Похоже на несоответсnвие каких то dll




------------------
не имей 100 рублей, а имей сто друзей
Ratings: 0 negative/0 positive
Re: передача dbf в xls
Божья_коровка

Сообщений: 25731
Дата регистрации: 23.08.2001
Цитата:
copy to ... type xls
Да это быстрей, но файл формируеться в 5 или максимум кажеться в 7 версии экселя, у меня юзеры по первости шугались когда делали в файле исправления, а их XP или 2000й с 2003 ругался спрашивая пересохранить ли файл
Ratings: 0 negative/0 positive
Re: передача dbf в xls
Sergo

Сообщений: 5
Дата регистрации: 08.02.2005
Еще столкнулся с особенностью команды copy to ... type XLS - выгружает только первые 16384 записей.
Ratings: 0 negative/0 positive
Re: передача dbf в xls
Божья_коровка

Сообщений: 25731
Дата регистрации: 23.08.2001
Это да, есть такое, но я всегда думала что это ограничение экселя 95 ого....
Ratings: 0 negative/0 positive
Re: передача dbf в xls
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Из хелпа фокса
Цитата:
XL5
Creates a Microsoft Excel version 5.0 workbook file. Each field from the currently selected table becomes a column in the spreadsheet, and each record becomes a row. If you do not include a file extension, an .xls extension is assigned to the new workbook.
Note Though you can export a maximum of 65,535 rows, which includes one row reserved for the field header, versions of Excel earlier than 8.0 (Excel 97) display only the first 16,384 rows and cannot import files containing more than 32,767 rows.




------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: передача dbf в xls
Владимир Максимов

Сообщений: 14097
Откуда: Москва
Дата регистрации: 02.09.2000
Заполнение через буфер обмена

* Создаем объект Excel
LOCAL comExcel
comExcel=CREATEOBJECT('Excel.Application')
comExcel.workbooks.Add
* Делаем Excel видимым
* Эту команду надо давать в самом конце формирования листа Excel
* здесь она приведена для наглядности
comExcel.Visible= .T.
* Формируем текстовую строку для последующего вывода в Excel
LOCAL lcString
* CHR(9) - клавиша Tab - переход на следующую ячейку в текущей строке
* CHR(13) - клавиша Enter - переход на следующую строку в первом столбце указанного диапазона
lcString='Ячейка 1:1'+CHR(9)+'Ячейка 1:2'+CHR(9)+'Ячейка 1:3'+CHR(13)+;
'Ячейка 2:1'+CHR(9)+'Ячейка 2:2'+CHR(9)+'Ячейка 2:3'+CHR(13)+;
'Ячейка 3:1'+CHR(9)+'Ячейка 3:2'+CHR(9)+'Ячейка 3:3'
* Сохраняем текущее значение буфера обмена
LOCAL lcClipText
lcClipText = _clipText
* вставляем текст в буфер обмена
_cliptext = m.lcString
* копируем буфер обмена в нужное место Excel
comExcel.Cells(1,1).PasteSpecial(1)
* еще раз копируем в другое место
comExcel.Range("A5:C7").PasteSpecial(1)
* Выравнивание столбцов по ширине содержимого
comExcel.Columns("A:C").Autofit
* Данный способ предполагает передачу только ТЕКСТОВЫХ данных
* Это значит, что любые типы данных надо конвертировать в текстовые
SET DATE GERMAN
SET CENTURY ON
_clipText = TRANSFORM(123456.78)+CHR(9)+TRANSFORM(DATE())
comExcel.Cells(5,5).NumberFormat="0.00"
comExcel.Cells(5,6).NumberFormat="m/d/yyyy" && такого формата может и не быть
comExcel.Cells(5,5).PasteSpecial(1)
comExcel.Columns("E:F").Autofit
* Чтобы снять выделение по окончании всех вставок передаю фокус на первую ячейку
comExcel.Cells(1,1).select
* восстанавливаем буфер обмена
_clipText = m.lcClipText


Еще вариант, делать экспорт в файл DBF формата Fox2x в кодовой странице 866. Такая таблица откроется в Excel без вопросов. Потом можно форматировать полученные данные "по вкусу"

select MyTab
COPY TO MyTab866 TYPE FOX2X AS 866
* Создаем объект Excel
LOCAL comExcel
comExcel=CREATEOBJECT('Excel.Application')
comExcel.workbooks.Open(fullpath('MyTab866.dbf'))
comExcel.Visible= .T.

Правда, таким образом не загружаются Memo-поля.




------------------
Ratings: 0 negative/0 positive
Re: передача dbf в xls
snoop
Автор

Сообщений: 378
Дата регистрации: 14.11.2002
1. спасибо все
2.про "копи 2 ...хлс"= знаю, хочется сделать через СОМ, чтобы красиво и на всю жизнь, а то выйдит новый ексель и все привет
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 7 (Гостей: 7)

© 2000-2024 Fox Club 
Яндекс.Метрика