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 завершена!");
КонецПроцедуры // ФайлНачалоВыбора()
&НаСервере
Процедура ЧтениеExcel_через_ТЗ(АдресДанных, РасширениеФайла)
ПутьКфайлу = ПолучитьИмяВременногоФайла(РасширениеФайла);
Данные = ПолучитьИзВременногоХранилища(АдресДанных);
Данные.Записать(ПутьКфайлу);
ТаблДок = Новый ТабличныйДокумент;
Попытка // чтение данных из файла в табличный документ
ТаблДок.Прочитать(ПутьКфайлу);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать файл Excel, по причине: " + ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
// построение запроса к области ячеек табличного документа
// с помощью объекта встроенного языка ПостроительЗапроса
ПЗ = Новый ПостроительЗапроса;
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблДок.Область());
ПЗ.ЗаполнитьНастройки();
// выполнение запроса (результат записывается в свойство "Результат")
ПЗ.Выполнить();
// выгрузка результата построителя запроса в таблицу значений
ТаблицаЗначений = ПЗ.Результат.Выгрузить();
// загрузка данных в таблицу на форме
ТаблицаНаФорме.Загрузить(ТаблицаЗначений);
КонецПроцедуры // ЧтениеExcel_через_ТЗ()
Асинх Процедура ФайлНачалоВыбора(Команда)
Диалог = Новый ПараметрыДиалогаПомещенияФайлов;
Диалог.Заголовок = "Выберите файл Excel";
Диалог.Фильтр = "(*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";
ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,Диалог);
Если ОписаниеФайла <> Неопределено Тогда
ЧтениеExcel_через_ТЗ(ОписаниеФайла.Адрес, ОписаниеФайла.СсылкаНаФайл.Расширение);
КонецЕсли;
ПоказатьОповещениеПользователя("Обработка файла Excel завершена!");
КонецПроцедуры // ФайлНачалоВыбора()
&НаСервере
Процедура ЧтениеExcel_через_ТЗ(АдресДанных, РасширениеФайла)
ПутьКфайлу = ПолучитьИмяВременногоФайла(РасширениеФайла);
Данные = ПолучитьИзВременногоХранилища(АдресДанных);
Данные.Записать(ПутьКфайлу);
ТаблДок = Новый ТабличныйДокумент;
Попытка // чтение данных из файла в табличный документ
ТаблДок.Прочитать(ПутьКфайлу);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать файл Excel, по причине: " + ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
// построение запроса к области ячеек табличного документа
// с помощью объекта встроенного языка ПостроительЗапроса
ПЗ = Новый ПостроительЗапроса;
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблДок.Область());
ПЗ.ЗаполнитьНастройки();
// выполнение запроса (результат записывается в свойство "Результат")
ПЗ.Выполнить();
// выгрузка результата построителя запроса в таблицу значений
ТаблицаЗначений = ПЗ.Результат.Выгрузить();
// загрузка данных в таблицу на форме
ТаблицаНаФорме.Загрузить(ТаблицаЗначений);
КонецПроцедуры // ЧтениеExcel_через_ТЗ()
Прочитать выбранный файл Эксель через Табличный документ из 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) Выгружаем в таблицу значений
ПЗ = Новый ПостроительЗапроса;
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблДок.Область());
ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
ПЗ.ЗаполнитьНастройки();
ПЗ.Выполнить();
ТаблицаЗначений = ПЗ.Результат.Выгрузить();
КонецПроцедуры
Прочитать выбранный файл Эксель (из комментария, для тонкого клиента) 1С 8.3:
&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
АдресФайлаВоВременномХранилище = "";
РежимДиалога = РежимДиалогаВыбораФайла.Открытие;
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалога);
РасшФильтр = "(*.xls,*.xlsx) |*.xls;*.xlsx;";
Фильтр = НСтр("ru = 'Excel'; en = 'Excel'") + РасшФильтр;
ВыборФайла.Фильтр = Фильтр;
ВыборФайла.Заголовок = "Выберите файл Excel:";
ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьДанныеЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаВоВременномХранилище,
ВыборФайла, Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьДанныеЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
//Файл = ВыбранноеИмяФайла;
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
Файл = ИмяФайла;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ДвоичныеДанные.Записать(ИмяФайла);
КонецПроцедуры
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
АдресФайлаВоВременномХранилище = "";
РежимДиалога = РежимДиалогаВыбораФайла.Открытие;
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалога);
РасшФильтр = "(*.xls,*.xlsx) |*.xls;*.xlsx;";
Фильтр = НСтр("ru = 'Excel'; en = 'Excel'") + РасшФильтр;
ВыборФайла.Фильтр = Фильтр;
ВыборФайла.Заголовок = "Выберите файл Excel:";
ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьДанныеЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаВоВременномХранилище,
ВыборФайла, Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьДанныеЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
//Файл = ВыбранноеИмяФайла;
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
Файл = ИмяФайла;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ДвоичныеДанные.Записать(ИмяФайла);
КонецПроцедуры
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
Этот код не должен работать.
Путь к файлу получаем на клиенте, а читаем на сервере.
Путь к файлу получаем на клиенте, а читаем на сервере.
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник