Здравствуйте!
Перейду сразу к вопросу. Есть 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 секунд. Можно ли как-то ускорить данный процесс?
Заранее спасибо!