Выбрать Файл Excel и преобразовать в Таблицу значений

Mister X 18 1

Выбрать Файл Excel и преобразовать в пустую Таблицу значений, без колонок Колонки из файла

&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок = "Выбор файла";
	Диалог.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx";
	Диалог.ИндексФильтра = 0;
	Диалог.ПредварительныйПросмотр = Ложь;
	Диалог.ПроверятьСуществованиеФайла = Истина;
	Диалог.МножественныйВыбор = Ложь; 
	Диалог.ПолноеИмяФайла = Объект.ПутьКФайлу;
	
	Если Диалог.Выбрать() Тогда
		Объект.ПутьКФайлу = Диалог.ПолноеИмяФайла;
	КонецЕсли;	
	КонецПроцедуры

&НаКлиенте
Процедура ПрочитатьФайлEXEL(Команда)
	Файл = Новый Файл(Объект.ПутьКФайлу);
	Если НЕ Файл.Существует() Тогда
		Возврат;
	КонецЕсли;
	ДвоичныеДанные = Новый ДвоичныеДанные(Объект.ПутьКФайлу);
	EXCELВТаблицуЗначений(ДвоичныеДанные, Файл.Расширение);
КонецПроцедуры

&НаСервере
Процедура EXCELВТаблицуЗначений(ДвоичныеДанные, Расширение)
	
	ФайлEXCELНаСервере = ПолучитьИмяВременногоФайла(Расширение);
	ДвоичныеДанные.Записать(ФайлEXCELНаСервере);
	
	ФайлEXCELНаСервере = ПолучитьИмяВременногоФайла(Расширение);
	ДвоичныеДанные.Записать(ФайлEXCELНаСервере);
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.Прочитать(ФайлEXCELНаСервере);
	УдалитьФайлы(ФайлEXCELНаСервере);
	ОбластьТаблицы = ТабличныйДокумент.Область();
	ПостроительЗапроса = Новый ПостроительЗапроса;
	ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьТаблицы);  
	
	ПостроительЗапроса.Выполнить();
	ТаблицаДанных = ПостроительЗапроса.Результат.Выгрузить();
	
	ДобавитьКолонкуНаСервере(ТаблицаДанных);
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьКолонкуНаСервере(Таблица)
	// добавим таблицу: сначала саму таблицу, потом колонку.
	Реквизиты = Новый Массив;
	Реквизиты.Добавить(Новый РеквизитФормы("ТаблицаНаФорме", Новый ОписаниеТипов("ТаблицаЗначений")));
	
	Для Каждого Ст ИЗ Таблица.Колонки Цикл
		Реквизиты.Добавить(Новый РеквизитФормы(Ст.Имя, Ст.ТипЗначения, "ТаблицаНаФорме"));
	КонецЦикла;
	
	// добавим реквизиты на форму
	ИзменитьРеквизиты(Реквизиты);
	
	// добавим элементы формы
	Таб = Элементы.Добавить("ТаблицаНаФорме", Тип("ТаблицаФормы"));
	Таб.ПутьКДанным = "ТаблицаНаФорме";
	
	// запретим менять положение строк и сами строки, отключим командную панель
	Таб.ИзменятьСоставСтрок = Ложь;
	Таб.ИзменятьПорядокСтрок = Ложь;
	Таб.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
	
	Для Каждого Ст ИЗ Таблица.Колонки Цикл
		Рек = Элементы.Добавить("Колонка" + Ст.Имя, Тип("ПолеФормы"), Таб);
		Рек.Вид = ВидПоляФормы.ПолеНадписи;
		Рек.ПутьКДанным = "ТаблицаНаФорме" + "." + Ст.Имя;
		Рек.Заголовок = Ст.Имя;
	КонецЦикла;
	
	// заполним таблицу
	ЗначениеВРеквизитФормы(Таблица, "ТаблицаНаФорме");	
	
	Элементы.ПроверитьДанные.Видимость = ИСТИНА;
КонецПроцедуры
1

Комментарии

SergSt
#1, 04 августа 2023 13:14

Ошибка при получении значения атрибута контекста (Результат)
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(45)}:ТаблицаДанных = ПостроительЗапроса.Результат.Выгрузить();
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(25)}:EXCELВТаблицуЗначений(ДвоичныеДанные, Файл.Расширение);

по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"


См. также

Чтение файлов Excel в таблицу значений (автоматическое наименование столбцов)

Преобразовать массив структур в ТаблицуЗначений

Преобразовать строку таблицы значений в структуру

Преобразовать таблицу значений в массив

ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки (БСП)

mxl в таблицу значений

Как выбрать наибольшее значение из ТЗ

Записать таблицу значений в XML файл

Чтение файла (в таблицу значений) расширения .xlsx с помощью построителя запроса

Модератору