Выбрать Файл Excel и преобразовать в Таблицу значений
Теги: 1С,преобразовать,ТаблицаЗначений,Excel,Таблица значений

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

# Код реализации

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

	Если Диалог.Выбрать() Тогда
		Объект.ПутьКФайлу = Диалог.ПолноеИмяФайла;
	КонецЕсли;
	КонецПроцедуры

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

&НаСервере
Процедура EXCELВТаблицуЗначений(ДвоичныеДанные, Расширение)

	ФайлEXCELНаСервере = ПолучитьИмяВременногоФайла(Расширение);
	ДвоичныеДанные.Записать(ФайлEXCELНаСервере);

	ФайлEXCELНаСервере = ПолучитьИмяВременногоФайла(Расширение);
	ДвоичныеДанные.Записать(ФайлEXCELНаСервере);

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

	ПостроительЗапроса.Выполнить();
	ТаблицаДанных = ПостроительЗапроса.Результат.Выгрузить();

	ДобавитьКолонкуНаСервере(ТаблицаДанных);

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

&НаСервере
Процедура ДобавитьКолонкуНаСервере(Таблица)
	// добавим таблицу: сначала саму таблицу, потом колонку.
	Реквизиты = Новый Массив;
	Реквизиты.Добавить(Новый РеквизитФормы("ТаблицаНаФорме", Новый ОписаниеТипов("ТаблицаЗначений")));

	Для Каждого Ст ИЗ Таблица.Колонки Цикл
		Реквизиты.Добавить(Новый РеквизитФормы(Ст.Имя, Ст.ТипЗначения, "ТаблицаНаФорме"));
	КонецЦикла;

	// добавим реквизиты на форму
	ИзменитьРеквизиты(Реквизиты);

	// добавим элементы формы
	Таб = Элементы.Добавить("ТаблицаНаФорме", Тип("ТаблицаФормы"));
	Таб.ПутьКДанным = "ТаблицаНаФорме";

	// запретим менять положение строк и сами строки, отключим командную панель
	Таб.ИзменятьСоставСтрок = Ложь;
	Таб.ИзменятьПорядокСтрок = Ложь;
	Таб.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;

	Для Каждого Ст ИЗ Таблица.Колонки Цикл
		Рек = Элементы.Добавить("Колонка" + Ст.Имя, Тип("ПолеФормы"), Таб);
		Рек.Вид = ВидПоляФормы.ПолеНадписи;
		Рек.ПутьКДанным = "ТаблицаНаФорме" + "." + Ст.Имя;
		Рек.Заголовок = Ст.Имя;
	КонецЦикла;

	// заполним таблицу
	ЗначениеВРеквизитФормы(Таблица, "ТаблицаНаФорме");

	Элементы.ПроверитьДанные.Видимость = ИСТИНА;
КонецПроцедуры
```

# Примечания

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