1С 8.3 Чтение Excel через Табличный документ
Данные > Примеры кода 1С > 1С 8.3 Excel
Перейти в раздел примеры кода 1С 8.3:

Прочитать выбранный файл Эксель через Табличный документ из 1С 8.3:
&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) //необходимо в событии "НачалоВыбора" поля ввода вызвать ДиалогВыбораФайла
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл Excel";
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.Фильтр = "(*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";
Если ЗначениеЗаполнено(Объект.Файл) Тогда
Диалог.ПолноеИмяФайла= Объект.Файл;
КонецЕсли;
Если Диалог.Выбрать() Тогда
ВыбранныйФайл = Диалог.ПолноеИмяФайла;
Объект.Файл = ВыбранныйФайл;
ЧтениеExcel_через_ТД(ВыбранныйФайл);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЧтениеExcel_через_ТД(ВыбранныйФайл)
//1) Выводим Excel в табличн.документ
ТаблДок = Новый ТабличныйДокумент;
ТаблДок.Прочитать(ВыбранныйФайл, СпособЧтенияЗначенийТабличногоДокумента.Значение);
//2) Выгружаем в таблицу значений
ПЗ = Новый ПостроительЗапроса;
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблДок.Область());
ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
ПЗ.ЗаполнитьНастройки();
ПЗ.Выполнить();
ТаблицаЗначений = ПЗ.Результат.Выгрузить();
КонецПроцедуры
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) //необходимо в событии "НачалоВыбора" поля ввода вызвать ДиалогВыбораФайла
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл Excel";
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.Фильтр = "(*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";
Если ЗначениеЗаполнено(Объект.Файл) Тогда
Диалог.ПолноеИмяФайла= Объект.Файл;
КонецЕсли;
Если Диалог.Выбрать() Тогда
ВыбранныйФайл = Диалог.ПолноеИмяФайла;
Объект.Файл = ВыбранныйФайл;
ЧтениеExcel_через_ТД(ВыбранныйФайл);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЧтениеExcel_через_ТД(ВыбранныйФайл)
//1) Выводим Excel в табличн.документ
ТаблДок = Новый ТабличныйДокумент;
ТаблДок.Прочитать(ВыбранныйФайл, СпособЧтенияЗначенийТабличногоДокумента.Значение);
//2) Выгружаем в таблицу значений
ПЗ = Новый ПостроительЗапроса;
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблДок.Область());
ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
ПЗ.ЗаполнитьНастройки();
ПЗ.Выполнить();
ТаблицаЗначений = ПЗ.Результат.Выгрузить();
КонецПроцедуры
6
отзывы
Евгений
04 апр 2023
Вот так работает на тонком клиенте
&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
АдресФайлаВоВременномХранилище = "";
РежимДиалога = РежимДиалогаВыбораФайла.Открытие;
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалога);
Фильтр = НСтр("ru = 'Excel'; en = 'Excel'")
+ "(*.xlsx)|*.xlsx";
ВыборФайла.Фильтр = Фильтр;
ВыборФайла.Заголовок = "Выберите файл:";
ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьДанныеЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаВоВременномХранилище, ВыборФайла, Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьДанныеЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
//Файл = ВыбранноеИмяФайла;
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
Файл = ИмяФайла;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ДвоичныеДанные.Записать(ИмяФайла);
КонецПроцедуры
&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
АдресФайлаВоВременномХранилище = "";
РежимДиалога = РежимДиалогаВыбораФайла.Открытие;
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалога);
Фильтр = НСтр("ru = 'Excel'; en = 'Excel'")
+ "(*.xlsx)|*.xlsx";
ВыборФайла.Фильтр = Фильтр;
ВыборФайла.Заголовок = "Выберите файл:";
ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьДанныеЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаВоВременномХранилище, ВыборФайла, Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьДанныеЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
//Файл = ВыбранноеИмяФайла;
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
Файл = ИмяФайла;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ДвоичныеДанные.Записать(ИмяФайла);
КонецПроцедуры
Илья
16 сен 2022
Код будет работать либо в файловой базе, или в серверной, когда клиент и сервер это 1 компьютер. И 3 вариант когда файл находится в сети. В остальных случаях ошибка.
Вы передаете "путь к файлу" на сервер. На сервере файла с таким путем может и не быть.
Вы передаете "путь к файлу" на сервер. На сервере файла с таким путем может и не быть.
АА
29 июн 2022
А когда нельзя вызвать сервер с клиента?
independ
30 окт 2021
Repey: мы передаем имя, а читаем на сервере
Санчез
30 окт 2021
Repey, только, что скопировал и запустил у себя. Всё работает!
Repey
30 окт 2021
Этот код не должен работать.
Путь к файлу получаем на клиенте, а читаем на сервере.
Путь к файлу получаем на клиенте, а читаем на сервере.
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник