On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 19
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 10.10.07 03:43. Заголовок: экспорт в Excel (тормоза)


Не пойму, в чем причина... Объясните, братцы, "тупому" :)
----

делаю экспорт в Excel (база с лекарствами)

....
oExcel := TOleAuto():New( "Excel.Application" )
oExcel:Visible := .F.
oLibros := oExcel:Get( "WorkBooks" )
oLibro := oLibros:Add()
oHoja := oExcel:Get( "ActiveSheet" )
oHoja:Cells:Font:Name := "Arial"
oHoja:Cells:Font:Size := 10
row0:=3
pbi:=1
...
do while .not. AFTG_X->(eof()) // AFTG_X - база, из которой экспортирую (лекарства, цены...)
// (aftg_fi - массив макросов для выводимых выражений)

oHoja:Cells( row0+pbi, 1 ):Value := " "

for iii:=1 to 20

do case

case iii=9 // цена
oHoja:Cells( row0+pbi, iii ):Value := strtran( str(&(aftg_fi[iii]), 11, 2), ".", ",")
oHoja:Cells( row0+pbi, iii ):Set( "NumberFormat", "#######0,00" )
oHoja:Cells( row0+pbi, iii ):HorizontalAlignment := XL_RIGHT

case iii=11 // сумма
oHoja:Cells( row0+pbi, iii ):Value := strtran( &(aftg_fi[iii]), ".", ",")
oHoja:Cells( row0+pbi, iii ):Set( "NumberFormat", "##########0,00" )
oHoja:Cells( row0+pbi, iii ):HorizontalAlignment := XL_RIGHT

otherwise // все остальные - просто взять значение

if valtype(&(aftg_fi[iii]))="C" // если это строка
oHoja:Cells( row0+pbi, iii ):Value := trim(&(aftg_fi[iii]))
else

if iii=3 // "Код ЛС"
oHoja:Cells( row0+pbi, iii ):Value := &(aftg_fi[iii])
oHoja:Cells( row0+pbi, iii ):HorizontalAlignment := XL_RIGHT
else // другие
oHoja:Cells( row0+pbi, iii ):Value := &(aftg_fi[iii])
endif

endif

endcase

if valtype(&(aftg_fi[iii]))="N" // если это число - выравнять вправо
oHoja:Cells( row0+pbi, iii ):HorizontalAlignment := XL_RIGHT
endif

next iii

AFTG_X->(dbskip())

pbi++

enddo

...
// формируем заголовок таблицы
oHoja:Cells( 1, 1 ):Value := "Выборка из БД формуляров МУ"
oHoja:Cells( 1, 1 ):Font:Size := 12
oHoja:Cells( 1, 1 ):Font:Bold := .T.

oHoja:Range("A1:F1"):Merge()
oHoja:Range("A1:F1"):HorizontalAlignment := XL_CENTER

oHoja:Columns("A:"+ckmax):AutoFit() // ckmax - max.буква (самой правой из заполняемых граф) в Экселе

for iii:=1 to 20
if at( str(iii,3), " 2 4 5 6 12 13 14 15" ) > 0
// устанавливаем ширину колонок:
// ФТГ (наим.), МНН, Торг, Форма, ЛПУ, Терр., Основание, Цел.Прог.
if oHoja:Columns(chr(asc("A")-1+iii)+":"+chr(asc("A")-1+iii)):ColumnWidth > 20
oHoja:Columns(chr(asc("A")-1+iii)+":"+chr(asc("A")-1+iii)):ColumnWidth := 20
endif
endif
next iii

// центрируем данные по Ед.Изм.
oHoja:Range("G"+ltrim(str(row0))+;
":G"+ltrim(str(row0+pbi-1))):HorizontalAlignment := XL_CENTER

oHoja:Cells( 2, 1 ):Select()

oExcel:Visible := .T.

oHoja:End()
oLibro:End()
oLibros:End()
oExcel:End()

.....
и вроде всё...

Непонятка в том, что на небольших выборках (100-200-400) всё отрабатывает "мухой", а при попытке выкинуть 25-30 тысяч - ОППАНЬКИ... и идём нервно курить минут на ..дцать. Комп шуршит там чего-то, трудится... а процесс "нескончаем" (во всяком случае, за "разумное" время - ну пусть ЕДИНИЦЫ минут! а это "рубилово" идет минут 20-30!!!).

На всякий - операционная обстановка: Win98, Office-97 [увы -так НАДО!..], Athlon 2400, оперативки 512 [сам знаю, что мало! но на "обычное экселЕние" хватает выше головы]

И - заодно уж - подскажите неразумному: не пойму, как пользовать (для того же форматирования в ячейках, к примеру) экселовские константы (xlRight, xlCenter и пр.)?

Пишу, например:
oHoja:Cells( row0+pbi, iii ):HorizontalAlignment := oExcel:Constants():xlRight (или что-то типа) -
и, естественно, бываю послан...
Пришлось вверху писать дифайны вроде
#define XL_RIGHT -4152
(понимаю, что глупо ["всё уже украдено до нас!"] - но "с налету" не понял еще, как правильно сделать)

TsBrowse'овский Excel2() не выходит использовать (по ряду причин) (хотя потестил - получил тот же "нервный перекур"...)
Или это "напряги" Эксела?.. Не может переварить 30 тыс.строк "за раз"?

Заранее спасибо! "То ли лыжи погнулись... то ли я..." :)

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 32 , стр: 1 2 All [только новые]


Ответов - 32 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 106
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет