1С 8.3 Чтение Excel через Табличный документ - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Чтение 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 завершена!");

КонецПроцедуры // ФайлНачалоВыбора()

&НаСервере
Процедура Чтение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) Выгружаем в таблицу значений
   
ПЗ = Новый ПостроительЗапроса;
   
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблДок.Область());
   
ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
   
ПЗ.ЗаполнитьНастройки();
   
ПЗ.Выполнить();

   
ТаблицаЗначений = ПЗ.Результат.Выгрузить();

КонецПроцедуры
Прочитать выбранный файл Эксель (из комментария, для тонкого клиента) 1С 8.3:
&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

  АдресФайлаВоВременномХранилище = "";

  РежимДиалога = РежимДиалогаВыбораФайла.Открытие;
  ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалога);
  РасшФильтр = "(*.xls,*.xlsx)     |*.xls;*.xlsx;";
  Фильтр = НСтр("ru = 'Excel'; en = 'Excel'") + РасшФильтр;
  ВыборФайла.Фильтр = Фильтр;
  ВыборФайла.Заголовок = "Выберите файл Excel:";

  ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьДанныеЗавершение", ЭтотОбъект);
  НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаВоВременномХранилище,
  ВыборФайла, Истина, УникальныйИдентификатор);

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

&НаСервере
Процедура ЗагрузитьДанныеЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

  //Файл = ВыбранноеИмяФайла;
  ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
  Файл = ИмяФайла;

  ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
  ДвоичныеДанные.Записать(ИмяФайла);

КонецПроцедуры
6
комментарии
Евгений
04 апр 2023
Вот так работает на тонком клиенте
&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
АдресФайлаВоВременномХранилище = "";

РежимДиалога = РежимДиалогаВыбораФайла.Открытие;
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалога);
Фильтр = НСтр("ru = 'Excel'; en = 'Excel'")
+ "(*.xlsx)|*.xlsx";
ВыборФайла.Фильтр = Фильтр;
ВыборФайла.Заголовок = "Выберите файл:";

ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьДанныеЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаВоВременномХранилище, ВыборФайла, Истина, УникальныйИдентификатор);

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

&НаСервере
Процедура ЗагрузитьДанныеЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
//Файл = ВыбранноеИмяФайла;
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
Файл = ИмяФайла;

ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ДвоичныеДанные.Записать(ИмяФайла);

КонецПроцедуры
Илья
16 сен 2022
Код будет работать либо в файловой базе, или в серверной, когда клиент и сервер это 1 компьютер. И 3 вариант когда файл находится в сети. В остальных случаях ошибка.
Вы передаете "путь к файлу" на сервер. На сервере файла с таким путем может и не быть.
АА
29 июн 2022
А когда нельзя вызвать сервер с клиента?
independ
30 окт 2021
Repey: мы передаем имя, а читаем на сервере
Санчез
30 окт 2021
Repey, только, что скопировал и запустил у себя. Всё работает!
Repey
30 окт 2021
Этот код не должен работать.
Путь к файлу получаем на клиенте, а читаем на сервере.
____________________
Copyright©, «Программист 1С в г.Минске», 11.04.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому