Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Разное > Флейм
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #3  
Старый 09.07.2008, 15:05
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Вставка через буфер позволяет достичь просто ОФИГЕННОЙ скорости передачи данных.
Попробуйте в Excel добавить, скажем, 150 000 записей... Легче повеситься. Вставка же
через буфер длает это за пару секунд.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
procedure PasteToColumn(var Buf:string; x,count:integer; Var Sheet:variant);
var
IR2,IR1: ExcelRange;
begin
  Clipboard.AsText:=Buf;
  IDispatch(IR1):=Sheet.Cells.Item[1, x];
  IDispatch(IR2):=Sheet.Cells.Item[count, x];
  OLEVariant(Sheet.Range[IR1, IR2]).PasteSpecial;
  Clipboard.Clear;
  Buf:='';
end;
 
procedure TForm1.ExportToExcel(FileName:string);
var
XLApp,Sheet:Variant;
index,x:Integer;
str,Buf:string;
begin
try
Buf:='';
XLApp:= CreateOleObject('Excel.Application');  //Создаем Excel Application
XLApp.Visible:=true;                           //Показываем его
XLApp.Workbooks.Add(-4167);                    //добавляем книгу
XLApp.Workbooks[1].WorkSheets[1].Name:='Отчёт';
Sheet:=XLApp.Workbooks[1].WorkSheets['Отчёт'];
 
 AssignFile(input,filename);
 Reset(input);                //открываем файл на чтение
 index:=1;
 x:=1;
  while not eof(input) do begin
   Readln(str);
   Buf:=Buf+str+#9#10;
   if index mod 65536=0 then begin //если дошли до конца столбца (Excel), то копируем то что в буфере в этот столбец
    PasteToColumn(Buf,x,65536,Sheet);
    x:=x+1//далее будем добавлять в другой столбец
    index:=0;
    application.ProcessMessages;
   end;
   index:=index+1;
  end;
  PasteToColumn(Buf,x,index,Sheet); //если что то осталось, то вставляем оставшееся
  CloseFile(input);
except
 CloseFile(input);
 showmessage('Ошибка при экспорте данных');
end;
end;
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:47.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025