Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2011, 16:53   #1
ProESM
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 27
По умолчанию Быстрое чтение из Excel

Здравствуйте!

Перейду сразу к вопросу. Есть Excel-файл с 9 колонками и 1000 строк, т.е. 9000 ячеек. Читаю данные из файла следующим образом:
Код:
uses ComObj, ActiveX
...
var
  MyExcel,          // экземпляр Excel
  MyWorkBook,       // экземпляр рабочей книги
  MyWorksheet       // экземпляр рабочего листа
    : OleVariant;
...
procedure ReadExcel(ExcelFile: string);
var
  i, j, RowCount, ColCount: Integer;
  ExcelArr: array of array of Variant;
  d: TDateTime;
begin
  ...
  // тут я проверил, установлен ли Excel, открыт ли, отключил реакцию на сообщения и т.п.
  ...
  MyWorkBook := MyExcel.Workbooks.Open(ExcelFile);

  MyWorksheet := MyWorkBook.Worksheets.Item[1];

  RowCount := MyWorksheet.UsedRange.Rows.Count;

  ColCount := MyWorksheet.UsedRange.Columns.Count;

  SetLength(ExcelArr, RowCount);

  for j := 0 to RowCount-1 do
    SetLength(ExcelArr[j], ColCount);

  d := Now();

  for i := 1 to RowCount do
    for j := 1 to ColCount-1 do
      ExcelArr[i-1, j-1] := MyWorksheet.Cells.Item[i, j].Value;    

  SaveLog(
    'log.log',
    'Чтение из Excel = ' + FormatDateTime('hh:mm:ss:zzz',   
    Now()-d),
    1,
    False
  );
end;
Результат: Чтение из Excel и валидация = 00:00:06:805.

Это очень долго: 9000 ячеек прочесть за ~7 секунд. Можно ли как-то ускорить данный процесс?

Заранее спасибо!
ProESM вне форума Ответить с цитированием
Старый 17.12.2011, 18:53   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Подключить как БД через ADO
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 17.12.2011, 19:05   #3
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Заполняем вариантный массив из файла FileXLS, что очень быстро, а с массивом делаем всё, что угодно
Цитата:
var
XLWork, XLApp,VarArrFromExcel: Variant;
begin
XLApp:= CreateOleObject('Excel.Application' );
try
XLApp.DisplayAlerts := false;
XLApp.WorkBooks.Open(FileXLS);
XLWork := XLApp.Workbooks[1].WorkSheets[1];
//Всё в вариантный массив
VarArrFromExcel := XLWork.UsedRange.Value2;
finally
XLApp.ActiveWorkBook.Close;
XLApp.Quit;
XLApp := Unassigned;
end;
end;
ReportCube вне форума Ответить с цитированием
Старый 17.12.2011, 19:42   #4
ProESM
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 27
По умолчанию

Цитата:
Сообщение от ReportCube Посмотреть сообщение
Заполняем вариантный массив из файла FileXLS, что очень быстро, а с массивом делаем всё, что угодно
А как мне потом вытащить значение конкретной ячейки из этого VarArrFromExcel?
ProESM вне форума Ответить с цитированием
Старый 17.12.2011, 19:54   #5
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Ещё что-то?
Цитата:
aRow := VarArrayLowBound(VarArrFromExcel, 1);
aCol := VarArrayLowBound(VarArrFromExcel, 2);
MaxRow := VarArrayHighBound(VarArrFromExcel, 1);
MaxCol := VarArrayHighBound(VarArrFromExcel, 2);
ReportCube вне форума Ответить с цитированием
Старый 17.12.2011, 21:12   #6
ProESM
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 27
По умолчанию

Цитата:
Сообщение от ReportCube Посмотреть сообщение
Ещё что-то?
Спасибо, больше ничего )
ProESM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
быстрое чтение пикселей с экрана eldalex Общие вопросы Delphi 12 19.10.2010 13:20
Чтение и запись некоторой части информации в файл DBF из Excel fired Microsoft Office Excel 4 19.08.2010 03:28
Чтение данных из файла Excel в C++Builder Max2114 C++ Builder 6 15.01.2009 11:32
Чтение Excel ячеек в текстовый фаил jopaz Общие вопросы Delphi 4 06.10.2008 00:04