Выбрать Файл Excel и преобразовать в пустую Таблицу значений, без колонок Колонки из файла
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выбор файла";
Диалог.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx";
Диалог.ИндексФильтра = 0;
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.ПроверятьСуществованиеФайла = Истина;
Диалог.МножественныйВыбор = Ложь;
Диалог.ПолноеИмяФайла = Объект.ПутьКФайлу;
Если Диалог.Выбрать() Тогда
Объект.ПутьКФайлу = Диалог.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьФайлEXEL(Команда)
Файл = Новый Файл(Объект.ПутьКФайлу);
Если НЕ Файл.Существует() Тогда
Возврат;
КонецЕсли;
ДвоичныеДанные = Новый ДвоичныеДанные(Объект.ПутьКФайлу);
EXCELВТаблицуЗначений(ДвоичныеДанные, Файл.Расширение);
КонецПроцедуры
&НаСервере
Процедура EXCELВТаблицуЗначений(ДвоичныеДанные, Расширение)
ФайлEXCELНаСервере = ПолучитьИмяВременногоФайла(Расширение);
ДвоичныеДанные.Записать(ФайлEXCELНаСервере);
ФайлEXCELНаСервере = ПолучитьИмяВременногоФайла(Расширение);
ДвоичныеДанные.Записать(ФайлEXCELНаСервере);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Прочитать(ФайлEXCELНаСервере);
УдалитьФайлы(ФайлEXCELНаСервере);
ОбластьТаблицы = ТабличныйДокумент.Область();
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьТаблицы);
ПостроительЗапроса.Выполнить();
ТаблицаДанных = ПостроительЗапроса.Результат.Выгрузить();
ДобавитьКолонкуНаСервере(ТаблицаДанных);
КонецПроцедуры
&НаСервере
Процедура ДобавитьКолонкуНаСервере(Таблица)
// добавим таблицу: сначала саму таблицу, потом колонку.
Реквизиты = Новый Массив;
Реквизиты.Добавить(Новый РеквизитФормы("ТаблицаНаФорме", Новый ОписаниеТипов("ТаблицаЗначений")));
Для Каждого Ст ИЗ Таблица.Колонки Цикл
Реквизиты.Добавить(Новый РеквизитФормы(Ст.Имя, Ст.ТипЗначения, "ТаблицаНаФорме"));
КонецЦикла;
// добавим реквизиты на форму
ИзменитьРеквизиты(Реквизиты);
// добавим элементы формы
Таб = Элементы.Добавить("ТаблицаНаФорме", Тип("ТаблицаФормы"));
Таб.ПутьКДанным = "ТаблицаНаФорме";
// запретим менять положение строк и сами строки, отключим командную панель
Таб.ИзменятьСоставСтрок = Ложь;
Таб.ИзменятьПорядокСтрок = Ложь;
Таб.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
Для Каждого Ст ИЗ Таблица.Колонки Цикл
Рек = Элементы.Добавить("Колонка" + Ст.Имя, Тип("ПолеФормы"), Таб);
Рек.Вид = ВидПоляФормы.ПолеНадписи;
Рек.ПутьКДанным = "ТаблицаНаФорме" + "." + Ст.Имя;
Рек.Заголовок = Ст.Имя;
КонецЦикла;
// заполним таблицу
ЗначениеВРеквизитФормы(Таблица, "ТаблицаНаФорме");
Элементы.ПроверитьДанные.Видимость = ИСТИНА;
КонецПроцедуры
Чтение файлов Excel в таблицу значений (автоматическое наименование столбцов)
Преобразовать массив структур в ТаблицуЗначений
Преобразовать строку таблицы значений в структуру
Преобразовать таблицу значений в массив
ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки (БСП)
Преобразование отчета на СКД в таблицу значений на табличном документе
#1, 04 августа 2023 13:14
Ошибка при получении значения атрибута контекста (Результат)
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(45)}:ТаблицаДанных = ПостроительЗапроса.Результат.Выгрузить();
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(25)}:EXCELВТаблицуЗначений(ДвоичныеДанные, Файл.Расширение);
по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"