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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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 секунд. Можно ли как-то ускорить данный процесс?

Заранее спасибо!
Ответить с цитированием
  #2  
Старый 17.12.2011, 16:55
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Читай целиком, в вариантный массив.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 17.12.2011, 16:57
ProESM ProESM вне форума
Прохожий
 
Регистрация: 19.03.2009
Сообщения: 33
Репутация: 10
По умолчанию

Это как? Подскажите, пожалуйста
Ответить с цитированием
  #4  
Старый 17.12.2011, 17:01
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Вот здесь посмотри в моем коде, там передача идет массива в Excel, получение - обратная операция.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #5  
Старый 17.12.2011, 17:08
ProESM ProESM вне форума
Прохожий
 
Регистрация: 19.03.2009
Сообщения: 33
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Вот здесь посмотри в моем коде, там передача идет массива в Excel, получение - обратная операция.
Спасибо, поковыряюсь
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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