Загрузка данных из табличного документа и Excel

Опубликовал Алексей Смирнов (sm2701) в раздел Обработки - Универсальные обработки

Загружать из Excel можно разными способами.

Загружать из Excel можно разными способами.

ТабличныйДокумент
Добавляем на форму новый реквизит ТабличныйДокумент, ставим флаги Редактирование, ОтображатьСетку.

Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
Значение = ТабличныйДокумент.Область(НомерСтроки, 1).Текст;
КонецЦикла;

Загрузка из Excel построчно

Книга = Excel.WorkBooks.Open(ИмяФайла);
Лист  = Книга.WorkSheets(1);
ВсегоСтрок   = Лист.Cells(1,1).SpecialCells(11).Row;
 
Для НомерСтроки = 1 по ВсегоСтрок Цикл
Значение = СокрЛП(Лист.Cells(НомерСтроки, 1).Value);
КонецЦикла;
 
Excel.Application.Quit();

Загрузка из Excel областью
Источник на //infostart.ru/public/20090/
Если быть точнее, то тут использован метод Выгрузить() из COMSafeArray (он же здесь Область.Value).

ункция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
	
	Excel = Новый COMОбъект("Excel.Application");
	Книга = Excel.WorkBooks.Open(ИмяФайла);
	ЛистЭксель  = Книга.WorkSheets(1);
	
	Если ВсегоСтрок = 0 Тогда
		ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
	КонецЕсли;
	
	Если ВсегоКолонок = 0 Тогда
		ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
	КонецЕсли;
	
	Если ТЗ = Неопределено Тогда
		ТЗ =  Новый ТаблицаЗначений;
		Для Счетчик = 1 По ВсегоКолонок Цикл
			ТЗ.Колонки.Добавить("Колонка"+Формат(Счетчик, "ЧГ=0"), Новый ОписаниеТипов("Строка"));
		КонецЦикла;
	КонецЕсли;
	
	Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
		НоваяСтрока = ТЗ.Добавить();
	КонецЦикла;
	
	Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
	Данные = Область.Value.Выгрузить();
	
	Для Счетчик = 0 По ВсегоКолонок-1 Цикл
		ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
	КонецЦикла;
	
	ЛистЭксель = Неопределено;
	
         Excel.Application.Quit();
	Возврат ТЗ;
	
КонецФункции

Провёл эксперимент, загрузка 65 536 строк из файла xls:
– Построчная загрузка загружала 30 МИНУТ!
– Загрузка колонками заняла всего 6 СЕКУНД!
– Загрузка через ADODB.Connection заняла 11 СЕКУНД!
Прикрепил обработку с 3-мя этими вариантами + xls файл с 65 536 строк.

Скачать файлы

Наименование Файл Версия Размер
Загрузка из Excel
.zip 1,83Mb
06.01.17
2
.zip 1,83Mb 2 Скачать

См. также

Комментарии
1. Михаил Русанов (RainyAugust22) 206 20.02.17 07:34 Сейчас в теме
просьба пофиксить "загрузку областью" способ хоть и быстрый но содержит критичную ошибку:
при чтении из файла неправильно читает цифру после запятой должно быть 8.2, а получаю 8.1999999999999. Соответственно следующее число вместо 8.3 получаю 8.3000000000001

ps. необходимо реализовать через Text, а не Value