В начало

Чтение файла XLSX в ТЗ

 

            Есть файл из Икселя, который нужно загрузить таблицу значений для последующей обработки.

Рис. Тестовый файл «Тест.xlsx»

 

            Создаем внешнюю обработку. Реквизитов нет, кроме табличной части «ТабДок».

Рис. Структура внешней обработки

 

            На форме размещена табличная часть «ТабДок» и кнопка «Выбрать файл».

Рис. Управляема форма внешней обработки

 

            Далее добавляем действие для команды «ВыбратьФайл» и сопутствующие процедуры.

 

Листинг. Модуль формы внешней обработки

&НаСервере

Процедура ОбработатьВыборФайла(ПомещенныеФайлы, ДополнительныеПараметры)

            Если ПомещенныеФайлы = Неопределено Тогда

                        Возврат;

            КонецЕсли;

           

            Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл                 

                        РасширениеФайла = "";

                        МассивСтрок = СтрРазделить(ПереданныйФайл.Имя, ".", Ложь);

                        Если МассивСтрок.Количество() > 1 Тогда

                                   РасширениеФайла = МассивСтрок[МассивСтрок.Количество() - 1];

                        КонецЕсли;

                       

                        ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПереданныйФайл.Хранение);       

                        ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеФайла);

                        ДвоичныеДанные.Записать(ИмяВременногоФайла);                                   

                       

                        ОбработатьВыборФайлаНаСервере(ИмяВременногоФайла);  

            КонецЦикла;

КонецПроцедуры

 

////////////////////////////////////////////////////////////////////////////////////////////////////

&НаСервере

Процедура ОбработатьВыборФайлаНаСервере(ИмяВременногоФайла) Экспорт   

            ТабличныйДокумент = Новый ТабличныйДокумент;

            ТабличныйДокумент.Прочитать(ИмяВременногоФайла);

           

            Построитель = Новый ПостроительЗапроса;

            Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());

            Построитель.Выполнить();

           

            ТЗ = Построитель.Результат.Выгрузить();

           

            //Добавляем колонки в "ТабДок"

            Для НомерКолонки = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл

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

                        КолонкаВШапкеБезПробелов = СтрЗаменить(КолонкаВШапке, " ", "");

                        нРеквизиты = Новый Массив;

                        нРеквизиты.Добавить(Новый РеквизитФормы(КолонкаВШапкеБезПробелов, Новый ОписаниеТипов("Строка"), "Объект.ТабДок", КолонкаВШапке, Истина));

                        ИзменитьРеквизиты(нРеквизиты);

                       

                        нЭлемент = Элементы.Добавить(КолонкаВШапкеБезПробелов, Тип("ПолеФормы"), Элементы.ТабДок);

                        нЭлемент.Вид = ВидПоляФормы.ПолеВвода;  

                       

                        нЭлемент.ПутьКДанным = "Объект.ТабДок." + КолонкаВШапкеБезПробелов;

            КонецЦикла;

           

            //Загружаем "ТЗ" в "ТабДок"

            Объект.ТабДок.Загрузить(ТЗ);

           

            //Обрабатываем данные

            Для НомерСтроки = 2 По ТабличныйДокумент.ВысотаТаблицы Цикл

                        Адрес = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, 1).Текст);

                        КадастровыйНомер = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, 1).Текст);

                        //...

            КонецЦикла;   

           

КонецПроцедуры

 

//////////////////////////////////////////////////////////////////////////////////////////////////

&НаКлиенте

Процедура ВыбратьФайл(Команда)

            ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

            ДиалогОткрытияФайла.МножественныйВыбор = Ложь;

            ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Лист Microsoft Excel'; en = 'Лист Microsoft Excel'") + "(*.xlsx)|*.xlsx;*.xls";

           

            ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтаФорма);   

            НачатьПомещениеФайлов(ОписаниеОповещения, , ДиалогОткрытияФайла, Истина, УникальныйИдентификатор);

КонецПроцедуры

 

            Запускаем режим отладки, открываем обработку и выбираем xlsx-файл.

Рис. Чтение xlsx-файла

 

            Все работает.