Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Скорость Delphi > Excel


Автор: uranpro 16.7.2008, 10:20
я делаю много отчетов и в них, как обычно, оч много данных.
передача из дельфи в ексель очень медленная, я слышал, что как-то можно увеличить скорость передачи данных.
но увеличить не за счет меньшего кол-ва обращений к серверу, а как-то по другому.
может кто знает какие-то другие варианты ?

Автор: Данкинг 16.7.2008, 10:44
Генераторы отчётов использовать. smile 

Автор: Frees 16.7.2008, 11:10
я слыхал про такое: когда уже готовую dbf встраивают в excel на фокс про человек дклал, скорость становилось приемлимой даже с большим кол вом данных, но я сам в это не вникал.

Автор: Данкинг 16.7.2008, 11:13
Цитата(Frees @  16.7.2008,  12:10 Найти цитируемый пост)
уже готовую dbf встраивают в excel на фокс про 

Это как, из фокса сделать экспорт в XLS? Типа:

Код

export to base as 866 xls

Да, так, разумеется, экспортнётся быстро, только, во-первых, вроде как про фокс речи не идёт, а, во-вторых, это не всегда может быть удобно.

Автор: uranpro 16.7.2008, 11:20
=)

Добавлено через 8 минут и 55 секунд
Данкинг, так нужно еще какой-то вид предать отчету

Автор: Данкинг 16.7.2008, 11:31
Цитата(uranpro @  16.7.2008,  12:20 Найти цитируемый пост)
Данкинг, так нужно еще какой-то вид предать отчету

В общем-то, можно из фокса экспортнуть, а потом уже получившийся XLS открыть и отредактировать, как надо.

Автор: uranpro 16.7.2008, 11:34
Данкинг, так основное время формирования отчета занимает составление вида=( 

Автор: Данкинг 16.7.2008, 11:59
Цитата(uranpro @ 16.7.2008,  12:34)
Данкинг, так основное время формирования отчета занимает составление вида=(

А если сделать шаблон файла XLS с основным видом и копировать его в нужную папку, а потом подставлять данные?

Автор: uranpro 16.7.2008, 12:34
Данкинг, можно, но не для всех отчетов.

Автор: Frees 16.7.2008, 13:03
тогда генератор отчетов smile

Автор: pseud 16.7.2008, 18:27
Цитата(uranpro @  16.7.2008,  10:20 Найти цитируемый пост)
передача из дельфи в ексель очень медленная, я слышал, что как-то можно увеличить скорость передачи данных.


передача данных не поштучно, а пакетом через буфер.

что-то типа

Код

var
  XLArrayData : OLEVariant;
begin
  ...
  XLArrayData := VarArrayCreate([1, iRowsCount, 1, iColumnsCount], varVariant);

  // шапка
  for j:= 1 to iColumnsCount do
  begin
    XLArrayData[1, j] := dxDBTreeEntities.VisibleColumns[j - 1].Caption;
  end;

  Node := dxDBTreeEntities.TopNode;

  // данные
  for i := 2 to iRowsCount do
  begin
    for j:= 1 to iColumnsCount do
      XLArrayData[i, j] := Node.Strings[dxDBTreeEntities.VisibleColumns[j - 1].Index];

    Node := Node.GetNext;
  end;

  XLCellBegin := XLSheet.Cells[1, 1];
  XLCellEnd := XLSheet.Cells[iRowsCount, iColumnsCount];
  XLRange := XLSheet.Range[XLCellBegin, XLCellEnd];

  // передача массива данных в эксцель
  XLRange.Value := XLArrayData;
...


Автор: Albinos_x 16.7.2008, 18:41
http://forum.vingrad.ru/forum/topic-84634.html

Автор: uranpro 17.7.2008, 10:25
pseud, нуу... я так и делаю))) я же в начале написал))


Albinos_x, мм... сча посмотрим

Автор: December 17.7.2008, 11:06
У меня была проблема с производительностью при работе с екселем через ActiveX. Решилась путём временного отключения пересчёта формул в листе/документе.

Автор: uranpro 17.7.2008, 11:16
December, а если формул нет ?

Автор: December 17.7.2008, 12:40
Тогда не поможет smile

Автор: uranpro 17.7.2008, 13:02
ыы))

Автор: Akella 21.7.2008, 18:14
Можно же сохранять в DBF, а потом открывать экселем

Автор: uranpro 21.7.2008, 18:21
Akella, фсе цвета, сетки. форматы, размеры шрифта... тоже там можно сохранить ?

Добавлено через 2 минуты и 33 секунды
нашел http://www.torry.net/authorsmore.php?id=3262 скорость 75000 в сек оО только платная))

Автор: Akella 21.7.2008, 23:55
Цитата(uranpro @  21.7.2008,  18:21 Найти цитируемый пост)
цвета, сетки. форматы, размеры шрифта

ууууу smile , тогда да, будет медленно.
Можно создавать массив, а потом этот массив накладывать на диапазон, ну а потом форматы присваивать.

Автор: orthrus 22.7.2008, 06:33
Есть еще такой очень удобный компонент http://www.afalinasoft.com/xl-report/index.html, работает очень быстро

Автор: uranpro 22.7.2008, 09:40
Akella, знаю, работает не на много быстрее, есть небольшие проблемы с использованием массивов. 


orthrus, сча посмотрим)

Добавлено через 44 секунды
ого)))) я стал "бывалый" )))

Автор: Scandium 25.7.2008, 01:40
Доброго времени суток!
Коннект создаю через TExcelApplication (у меня называется m_ExcelApplication).
Изменяю фонт ячейки и добавляю в неё текст и... не происходит изенение фонта smile ... Что можно сделать? Причём ЧекБоксы o_StyleExcelReport_title_bold.Cheked, Options.o_StyleExcelReport_title_italic.Cheked, Options.o_StyleExcelReport_maintext_underline.Checked на 100% имеют значение true.
Код

    WorkSheet:=m_ExcelApplication.Worksheets.Get_Item(1) as _WorkSheet;
    WorkSheet.Name:=m_TabControl.Tabs[m_TabControl.TabIndex];
    //Вставляем заглавие Листа, стиль из "заглавие Excel"
    If Options.o_StyleExcelReport_title_bold.Checked then
      WorkSheet.Range['A1','A1'].Font.FontStyle:=WorkSheet.Range['A1','A1'].Font.FontStyle+'bold';
    If Options.o_StyleExcelReport_title_italic.Checked then
      WorkSheet.Range['A1','A1'].Font.FontStyle:=WorkSheet.Range['A1','A1'].Font.FontStyle+'italic';
    If Options.o_StyleExcelReport_maintext_underline.Checked then
      WorkSheet.Range['A1','A1'].Font.FontStyle:=WorkSheet.Range['A1','A1'].Font.FontStyle+'underline';
    WorkSheet.Cells.Item[1,1]:='Определение грубых ошибок среди эксперементальных данных (Q-test)';

Автор: Akella 25.7.2008, 07:56
Scandium, как твой вопрос относится к данной теме? А?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)