Показать сообщение отдельно
  #1  
Старый 17.12.2011, 16:53
ProESM ProESM вне форума
Прохожий
 
Регистрация: 19.03.2009
Сообщения: 33
Репутация: 10
По умолчанию Быстрое чтение из 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 секунд. Можно ли как-то ускорить данный процесс?

Заранее спасибо!
Ответить с цитированием