Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.09.27;
Скачать: [xml.tar.bz2];

Вниз

Ускорить экспорт в Excel   Найти похожие ветки 

 
ANTPro_ ©   (2015-01-27 08:35) [0]

Всем привет!
Есть приложение которое экспортирует данные в Excel.
Открывает шаблон и вставляет через буфер обмена.
Проблема в том что это происходит крайне медленно(вставка 3000 записей занимает 15 минут)
Как можно ускорить экспорт?


 
brother ©   (2015-01-27 08:40) [1]

использовать OLE?


 
ANTPro_ ©   (2015-01-27 08:41) [2]

Ах, да забыл написать, что исходников приложения нет.


 
brother ©   (2015-01-27 08:57) [3]

Тогда: откиньтесь на спинку кресла и ждите пока ... (с)SetupWin98


 
junglecat ©   (2015-01-27 09:28) [4]

Удалено модератором


 
Jeer ©   (2015-01-27 09:54) [5]

Удалено модератором


 
junglecat ©   (2015-01-27 10:02) [6]

Удалено модератором


 
ANTPro_ ©   (2015-01-27 11:11) [7]

Судя по API монитору OLE уже используется.


 
кгшзх ©   (2015-01-27 11:22) [8]

заменить поячеечное присвоение (а судя по скорости там именно оно) значений на:
взять двумерный рэйндж в листе и присвоить ему двумерный vb-массив


 
ANTPro_ ©   (2015-01-27 11:52) [9]

Вставка построчная(Так как в буфере обмена 1 запись на строку)


 
кгшзх ©   (2015-01-27 11:56) [10]

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


 
Jeer ©   (2015-01-27 15:44) [11]

Удалено модератором


 
картман ©   (2015-01-27 15:54) [12]

Удалено модератором


 
Jeer ©   (2015-01-27 16:00) [13]

Удалено модератором


 
DSKalugin ©   (2015-02-10 17:14) [14]

1)Набрать данные в массив (Для быстрого чтения отключайте гриды и куча других методов).
2)Скопировать его в выделенную область Range

var ExcelApp, Workbook, WorkSheet: OLEVariant;

Procedure InitializeExcel;
begin
 ExcelApp := CreateOleObject("Excel.Application");
 ExcelApp.Visible := False;
 ExcelApp.Application.EnableEvents := false;
end;

Procedure AddNewWorkSheet;
begin
 ExcelApp.SheetsInNewWorkbook := 1;
 Workbook := ExcelApp.WorkBooks.Add;
 WorkSheet := Workbook.Worksheets[1];
 WorkSheet.Activate;
end;

Procedure FinalizeExcel;
begin
 WorkSheet:=Unassigned;
 WorkBook:=Unassigned;
 ExcelApp:=Unassigned;
end;

Procedure fastExportToExcel(DataSet:TDataSet);
const MAX_EXCEL_ROWS=65530; // не актуально уже
var
 C, R, fc, rc : integer;
 fm, cell1, cell2, range: variant;
begin
 try
   InitializeExcel;
   AddNewWorkSheet;
   DataSet.DisableControls;
   //if DataSet is T
   rc:=DataSet.RecordCount;
   if rc>MAX_EXCEL_ROWS then rc:=MAX_EXCEL_ROWS;
   fc:=DataSet.FieldCount;
   fm:=VarArrayCreate([1,rc+1, 1,fc], varVariant);
   for c:=0 to fc-1 do begin
     fm[1, c + 1]:=DataSet.Fields[c].FieldName;

   end;
   r:=1;
   DataSet.First;
   while not DataSet.EOF do begin
     inc(r);
     for c:=0 to fc-1 do
       if DataSet.Fields[c].IsNull then fm[r, c + 1]:=""
       else fm[r, c + 1]:=DataSet.Fields[c].AsString;
     if r>MAX_EXCEL_ROWS then Break;
     DataSet.Next;
   end;
   WorkSheet.Name:=DataSet.Name;
   cell1:=WorkSheet.Cells[1, 1];
   cell2:=WorkSheet.Cells[rc+1, fc];
   range:=WorkSheet.Range[cell1, cell2];
   range.NumberFormat:="@";
   range.Value:=fm;
   for c:=1 to fc do WorkSheet.Columns[c].AutoFit;
   cell1:=WorkSheet.Cells[1, 1];
   cell2:=WorkSheet.Cells[1, fc];
   range:=WorkSheet.Range[cell1, cell2];
   range.Font.Bold:=True;
   

 finally
   VarClear(fm);
   DataSet.EnableControls;
   ExcelApp.Visible := True;
   cell1:=unassigned;
   cell2:=unassigned;
   range:=unassigned;
   FinalizeExcel;
 end;
end;



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2015.09.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.002 c
15-1423303455
Kerk
2015-02-07 13:04
2015.09.27
О ТЗ


15-1423690240
Юрий
2015-02-12 00:30
2015.09.27
С днем рождения ! 12 февраля 2015 четверг


15-1423517417
Юрий
2015-02-10 00:30
2015.09.27
С днем рождения ! 10 февраля 2015 вторник


15-1422336953
ANTPro_
2015-01-27 08:35
2015.09.27
Ускорить экспорт в Excel


2-1396972116
Andrey5
2014-04-08 19:48
2015.09.27
Базы данных в делфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский