Чтение файлов Excel при помощи ADO

При больших файлах Excel чтение каждой ячейки через COM объект Excel.Application приводит к большим затратам времени, для ускорения процесса чтения можно воспользоваться объектом ADODB. Обработка происходит на клиенте, поэтому файл Excel читается в массив строк, где строка представлена как массив.

&НаКлиенте
Функция ПолучитьМассивXLSФайла(ИмяФайлаЗагрузки)

Connection = Новый COMОбъект(«ADODB.Connection»);
// Можно использовать строку подключения для Excel ранее 2007
//СтрокаПодключения = «Provider=Microsoft.Jet.OLEDB.4.0; Data Source = » + ИмяФайлаЗагрузки;
СтрокаПодключения = «Provider=Microsoft.ACE.OLEDB.12.0; Data Source = « + ИмяФайлаЗагрузки;
СтрокаПодключения = СтрокаПодключения+«; Extended Properties = «+«»»Excel 8.0″+»;HDR=NO;IMEX=1″»;»;

Попытка
   Connection.Open(СтрокаПодключения);
Исключение
   Сообщить(ОписаниеОшибки());
   Возврат Неопределено;
КонецПопытки;

Command = Новый COMОбъект(«ADODB.Command»);
axCatalog = Новый COMОбъект(«ADOX.Catalog»);
axCatalog.ActiveConnection = Connection;
// получить имя первого листа
Для каждого Лист ИЗ axCatalog.Tables Цикл
      ИмяТаблицы = Лист.Name;
      Прервать;
КонецЦикла;

RecordSet = Новый COMОбъект(«ADODB.RecordSet»);
Command.ActiveConnection = Connection;
Command.CommandText =«SELECT COUNT(*) FROM [«+ИмяТаблицы+«]»;
Command.CommandType =1;
RecordSet = Command.Execute();
КоличествоСтрок = RecordSet.Fields(0).Value;
Command.CommandText = «SELECT * FROM [«+ИмяТаблицы+«]»;
Command.CommandType = 1;
Попытка
      RecordSet = Command.Execute();
Исключение
      Сообщить(ОписаниеОшибки());
КонецПопытки;

RecordSet.MoveNext();
ФайлВФормеМассива = новый Массив;

Пока RecordSet.EOF() = 0 Цикл
   МассивСтроки = новый Массив;
   для НомерПоля = 1 по RecordSet.Fields.Count цикл
      МассивСтроки.Добавить(RecordSet.Fields(НомерПоля1).Value);
   КонецЦикла;
   ФайлВФормеМассива.Добавить(МассивСтроки);
   RecordSet.MoveNext();
КонецЦикла;
RecordSet.Close();
Connection.Close();

Возврат ФайлВФормеМассива;

КонецФункции

Если названия листов на русском языке, то после имени листа надо ставить знак «$».

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *