Прочесть excel в таблицу значений

23.04.2019

Получение таблицы значений из excel в 1С v8, без COM, внешних источников данных и т.д.
EXCELВТаблицуЗначений() — За 10 строчек кода!
Реализация протестирована на 1С 8.3.12.1714 (x64).

WARNING

Данная статья не претендует на оригинальность и не является конечным решением.

Подходы решения задач и примеры программного кода несут исключительно обучающий характер.

Существует масса подходов загрузки данных из EXCEL в 1С. Большинство решений основаны на COM или еще более сложных возможностях платформы.

Для себя разработал наиболее оптимальный вариант:
EXCEL -> Табличный документ -> Построитель запроса -> Таблица значений

Итак, приступим:

  1. Прочитать Excel файл на клиенте, для передачи на сервер: 
    &НаКлиенте
    Процедура ЗагрузитьEXCEL(Команда)
    
    Файл = Новый Файл(ПутьКEXCEL);
    Если НЕ Файл.Существует() Тогда
    Возврат;
    КонецЕсли;
    ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКEXCEL);
    ДокументРезультат = EXCELВТаблицуЗначений(ДвоичныеДанные, Файл.Расширение);
    ДокументРезультат.Показать();
    
    КонецПроцедуры
  1. Выполнить чтение Excel в таблицу значений: 
    &НаСервере
    Функция EXCELВТаблицуЗначений(ДвоичныеДанные, Расширение)
    
    ФайлEXCELНаСервере = ПолучитьИмяВременногоФайла(Расширение);
    ДвоичныеДанные.Записать(ФайлEXCELНаСервере);
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.Прочитать(ФайлEXCELНаСервере);
    УдалитьФайлы(ФайлEXCELНаСервере);
    ОбластьТаблицы = ТабличныйДокумент.Область(8, 1, ТабличныйДокумент.ВысотаТаблицы, ТабличныйДокумент.ШиринаТаблицы);
    
    ПостроительЗапроса = Новый ПостроительЗапроса;
    ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьТаблицы);
    ПостроительЗапроса.Выполнить();
    ТаблицаДанных = ПостроительЗапроса.Результат.Выгрузить();
    
    // теперь поссмторим что в Таблице
    Возврат ТаблицаЗначенийВТабличныйДокумент(ТаблицаДанных);
    
    КонецФункции 
  2. Визуализировать таблицу значений: 

    &НаСервереБезКонтекста
    Функция ТаблицаЗначенийВТабличныйДокумент(ТаблицаДанных)
    
    ПостроительОтчета = Новый ПостроительОтчета;
    ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаДанных);
    ДокументРезультат = Новый ТабличныйДокумент;
    Построительотчета.Вывести(ДокументРезультат);
    Возврат ДокументРезультат;
    
    КонецФункции

Описание преобразования данных:

  1. Получаем исходный файл на клиенте;
  2. На основании файла создаем двоичные данные и получаем расширение файла;
  3. Передаем двоичные данные на сервер;
  4. Создаем дубль файла excel на сервере;
  5. Читаем файл в новый табличный документ;
  6. Получаем область табличного документа, где находятся полезные данные (ТабличныйДокумент.Область(8, 1, ТабличныйДокумент.ВысотаТаблицы, ТабличныйДокумент.ШиринаТаблицы));
  7. Создаем новый построитель запроса и установим в качестве источника данных — область полезных данных;
  8. Выполним построитель и получим результат запроса;
  9. Результат запроса выгрузим в таблицу значений.

Плюсы реализации:

  • Скорость работы по сравнению с COM EXCEL
  • Возможно выполнять загрузку где EXCEL нет вообще (MAC | LINUX | etc…)
  • Простота реализации

 +3 

   

Распечатать

Иногда требуется разобрать данные из Excel в 1С.
Я считаю что легче и быстрей поместить все данные в ТаблицуЗначений и уже там ими манипулировать.

Пример 2-х функций которые я использую:

ИзExcelВТаблицу – Читает Excel в ТаблицуЗначений
ЭлементСправочника – Создает или находит элемент справочника.
Теперь сам код:

Код 1C v 8.х

 // Загрузка данных из Excel файла в ТаблицуЗначений 
// Возвращает ТаблицуЗначений с данными
// ПутьДоExcel - путь до Excel файла
// НомерСтраницы - Номер страницы в Excel
// ПерСтрокаЗаголовок - первая строка Excel содержит имена столбцов
// ФормаИндикатора - Стандартная форма прогресса работы
Функция ИзExcelВТаблицу(ПутьДоExcel, НомерСтраницы = 1, ПерСтрокаЗаголовок = Ложь , ФормаИндикатора = Неопределено)
Попытка
Док = ПолучитьCOMОбъект(ПутьДоExcel);
Исключение
Сообщить("Произошла ошибка при обращение к Excel:" + Символы.ПС + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;

ЗакрытьФормуИндиктаора = Ложь;
Если ФормаИндикатора = Неопределено тогда
ЗакрытьФормуИндиктаора = Истина;
ФормаИндикатора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
ФормаИндикатора.Открыть();
КонецЕсли;
ФормаИндикатора.КомментарийЗначения = "Загрузка данных из Excel...";

ТЗ = Новый ТаблицаЗначений();
Страница = Док.Sheets(НомерСтраницы);
МакСтрок = Страница.UsedRange.Rows.Count; // макс. колич. строк
МакСтолб = Страница.UsedRange.Columns.Count; // макс. колич. столбцов

Для Столбец = 1 по МакСтолб цикл
ИмяСтолбца = "Столбец_" + Столбец;
Если ПерСтрокаЗаголовок тогда
ИмяСтолбца = Страница.Cells(1,Столбец).Value;
ИмяСтолбца = СокрЛП(ИмяСтолбца);
ИмяСтолбца = СтрЗаменить(ИмяСтолбца," ","_");
КонецЕсли;
ТЗ.Колонки.Добавить(ИмяСтолбца, Новый ОписаниеТипов("Строка"));
КонецЦикла;

НачальнаяСтрока = 1;
Если ПерСтрокаЗаголовок тогда
НачальнаяСтрока = 2;
КонецЕсли;

Для НомСтрока = НачальнаяСтрока по МакСтрок цикл
СтрТЗ = ТЗ.Добавить();
Для НомСтолбец = 1 по МакСтолб цикл
Данные = Страница.Cells(НомСтрока,НомСтолбец).Value;
СтрТЗ[НомСтолбец-1] = Данные;
КонецЦикла;

ФормаИндикатора.ЭлементыФормы.Индикатор.Значение = НомСтрока/МакСтрок * 100;
КонецЦикла;

Если ЗакрытьФормуИндиктаора тогда
ФормаИндикатора.Закрыть();
КонецЕсли;

Возврат ТЗ;
КонецФункции

Пример вызова:
Код 1C v 8.х

 ФормаИндикатора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
ФормаИндикатора.НаименованиеОбработкиДанных = "Загрузка данных...";
ФормаИндикатора.Открыть();

ТЗ = ИзExcelВТаблицу(ФайлExcel,1,Истина,ФормаИндикатора);
Если ТЗ = Неопределено тогда
ФормаИндикатора.Закрыть();
Возврат;
КонецЕсли;

ФормаИндикатора.Закрыть();

или

Код 1C v 8.х

 ТЗ = ИзExcelВТаблицу(ФайлExcel);        
Если ТЗ = Неопределено тогда
Возврат;
КонецЕсли;

Теперь функция которой я использую когда надо создать элемент справочника из полученных данных.
Код 1C v 8.х

 // Создаем в справочнике "ИмяСправочника" элемент
// ИмяЭлемента - Имя созданного элемента в справочнике "ИмяСправочника"
// ИмяРодителя - Имя родительского элемента (отсутствует если не древовидный).
// Разделитель \ позволяет писать древовидный путь родителя из нескольких элементов
// Параметры - Соответствие содержащие список параметров для элемента
// СоздатьЕслиНетЭлемента - Создает элемент если нет. Иначе ищет и обновляет
Функция ЭлементСправочника(ИмяСправочника = "",ИмяЭлемента, ИмяРодителя = Неопределено, Параметры = Неопределено, СоздатьЕслиНетЭлемента=Истина)
Если ИмяСправочника = "" тогда
Сообщить("Укажите имя спрачоника - ЭлементСправочника()");
Возврат Неопределено;
КонецЕсли;

Если ПустаяСтрока(ИмяЭлемента) тогда
Возврат Неопределено;
КонецЕсли;

// Создаем или ищем родителя
Родитель = Неопределено;
Если ИмяРодителя <> Неопределено тогда

ОбрабатИмяРодителя = ИмяРодителя;
РодительГруппы = Справочники[ИмяСправочника].ПустаяСсылка();

Пока НЕ ПустаяСтрока(ОбрабатИмяРодителя) цикл

ПозРазделителя = Найти(ОбрабатИмяРодителя,"\");
Если ПозРазделителя = 0 тогда
ИмяГруппы = ОбрабатИмяРодителя;
ОбрабатИмяРодителя = ""
Иначе
ИмяГруппы = Сред(ОбрабатИмяРодителя,1, ПозРазделителя-1);
ОбрабатИмяРодителя = Сред(ОбрабатИмяРодителя,ПозРазделителя+2);
КонецЕсли;

ТексЗапроса = "ВЫБРАТЬ
| Данные.Ссылка
|ИЗ
| Справочник."+ИмяСправочника+" КАК Данные
|ГДЕ
| Данные.Родитель = &Родитель
| И Данные.Наименование = &Наименование
| И Данные.ЭтоГруппа";

ЗапросРодителя = Новый Запрос(ТексЗапроса);
ЗапросРодителя.УстановитьПараметр("Родитель", РодительГруппы);
ЗапросРодителя.УстановитьПараметр("Наименование", ИмяГруппы);
РезультатРодителя = ЗапросРодителя.Выполнить().Выгрузить();

// Создаем родителя в случае необходимости
Если РезультатРодителя.Количество() <> 0 тогда
РодительГруппы = РезультатРодителя[0].Ссылка
Иначе
ОбъектРодитель = Справочники[ИмяСправочника].СоздатьГруппу();
ОбъектРодитель.Родитель = РодительГруппы;
ОбъектРодитель.Наименование = ИмяГруппы;
ОбъектРодитель.Записать();
РодительГруппы = ОбъектРодитель.Ссылка;
КонецЕсли;
КонецЦикла;
Родитель = РодительГруппы;
КонецЕсли;

// Создаем или ищем элемент
Элемент = Справочники[ИмяСправочника].НайтиПоНаименованию(ИмяЭлемента);
ОбъектЭлемент = Неопределено;

Если Элемент.Пустая() тогда
Если СоздатьЕслиНетЭлемента тогда
ОбъектЭлемент = Справочники[ИмяСправочника].СоздатьЭлемент();
ОбъектЭлемент.Наименование = ИмяЭлемента;
Иначе
Элемент = Неопределено
КонецЕсли;
Иначе
ОбъектЭлемент = Элемент.ПолучитьОбъект();
КонецЕсли;

Если ОбъектЭлемент <> Неопределено тогда
// Устанвалвиаем доп. параметры
Если Параметры <> Неопределено тогда
Для каждого СтрПараметр из Параметры цикл
ОбъектЭлемент[СтрПараметр.Ключ] = СтрПараметр.Значение;
КонецЦикла;
КонецЕсли;

Если Родитель <> Неопределено тогда
ОбъектЭлемент.Родитель = Родитель;
КонецЕсли;

ОбъектЭлемент.Записать();
Элемент = ОбъектЭлемент.Ссылка;
КонецЕсли;

Возврат Элемент;
КонецФункции

Автор: borismor

Работа с Эксель. Прочитать Эксель и загрузить в таблицу значений

Я
   BenDiget

14.12.22 — 12:06

Всем привет. Нашел потрясающий метод, как прочитать Эксель без всяких там переборов и прочего это великолепно:

Код:

&НаКлиенте

Процедура ФайликНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    Режим = РежимДиалогаВыбораФайла.Открытие;

    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);

    ДиалогОткрытияФайла.ПолноеИмяФайла = «»;

    Фильтр = «Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx»;

    ДиалогОткрытияФайла.Фильтр = Фильтр;

    ДиалогОткрытияФайла.Заголовок = «Выберите файл товарной накладной!»;

    
    Если ДиалогОткрытияФайла.Выбрать() Тогда

        
        Файлик = ДиалогОткрытияФайла.ПолноеИмяФайла;

        
    Иначе

        Файлик = «»;

    КонецЕсли;

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

&НаСервере

Процедура ЗагрузитьИзФайлаНаСервере2022()

Табл.Очистить();

ТаблДок.Очистить();

ТабДок = Новый ТабличныйДокумент;

ТабДок.Прочитать(СокрЛП(Файлик), СпособЧтенияЗначенийТабличногоДокумента.Значение);

ОбластьЯчеек = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);

ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);

ПостроительОтчета = Новый ПостроительОтчета;

ПостроительОтчета.ИсточникДанных = ИсточникДанных;

ПостроительОтчета.Выполнить();

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

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

   sirbure

1 — 14.12.22 — 12:07

Так, и? Делитесь радостью?

   Dmitry1c

2 — 14.12.22 — 12:08

(0) возьми с полки пирожок, их там два, твой тот что посередине

   1Сергей

3 — 14.12.22 — 12:09

[:|||||||||||||||||:]

   Kassern

4 — 14.12.22 — 12:10

(3) Да ладно вам, может кто и не знал.

   ass1c

5 — 14.12.22 — 12:10

(0) осталось еще найти НачатьПомещениеФайловНаСервер и ПараметрыДиалогаПомещенияФайлов

   kubik_live

6 — 14.12.22 — 12:16

(0) А если 100 листов в таблице и надо прочитать 56-й, как будешь?

   kubik_live

7 — 14.12.22 — 12:16

В книге

   timurhv

8 — 14.12.22 — 12:18

(0) а если сервер в кукуево находится?

   FirstLineSupport

9 — 14.12.22 — 12:19

теперь осталось ТабЗначений тоже куда-нито загрузить, без переборов

   Новый1сник2

10 — 14.12.22 — 12:21

(0) а названия колонок как определяются ?

   timurhv

11 — 14.12.22 — 12:22

   FirstLineSupport

12 — 14.12.22 — 12:24

(10) скармливаешь ТЗ ИИ, он возвращает название колонок и назначение документа

   Garykom

13 — 14.12.22 — 12:25

(0)

1. Скажи а что будешь делать если имена/заголовки колонок не в первой строке а в 10?

2. Скажи а что будешь делать если имена/заголовки колонок поменяют в файлике новом?

   Garykom

14 — 14.12.22 — 12:26

(13)+

3. см (6)

   Гипервизор

15 — 14.12.22 — 12:26

(0) Странный выбор кода, которым с нами поделились.

К сути потрясающего метода процедура начала выбора файла не относится.

Зато передачу с клиента на сервер не рассмотрели.

   Kassern

16 — 14.12.22 — 12:30

(14) (6) Вот налетели как коршуны))

ТС просто описал вариант, когда нужна ТЗ и документ в определенном формате (шапка в нужном месте). например дальше это дело пихается в внешний источник данных и соединяется в СКД с другими таблицами. В этом случае почему бы и нет.

Во всех остальных случаях вы можете по старинке обойти строки ТД и выбрать нужные.

   Kassern

17 — 14.12.22 — 12:31

(15) я думаю, что можно было вообще вырезать передачу файла, а ТС делился именно «ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек); »

А так да, лучше бы поместил во временное хранилище ДД файла, а потом на сервере бы их прочитал

   Garykom

18 — 14.12.22 — 12:34

(17) дада а на сервере из дд через поток прямо в табдок ;)

без сохранения во временный файл да?

   Garykom

19 — 14.12.22 — 12:34

(18)+ иногда недоделки в 1С просто смешные

   Kassern

20 — 14.12.22 — 12:35

(18) эх если бы, может в новых релизах завезут, а пока через временный файл приходится

   BenDiget

21 — 14.12.22 — 12:44

(1) Можно и так сказать, вдруг кто по запросу в яндексе найдет. потому что мне только перебором строк все время попадались решения. Это дико

   BenDiget

22 — 14.12.22 — 12:45

(6) если бы да ка бы — выросли во рту грибы. Знаете такое? Со слов если, можно даже и не начинать что-то делать

   Garykom

23 — 14.12.22 — 12:56

(21) эээ

ты думаешь внутри «Новый ПостроительОтчета» нет перебора строк?

   Kassern

24 — 14.12.22 — 12:58

(23) его хотя бы не нужно описывать)

   Garykom

25 — 14.12.22 — 13:01

(24) А потом хренак и все падает

Потому что файлик ёкселя слегка кривоватый и последнюю строку определил как  1 048 576

   vicof

26 — 14.12.22 — 14:17

(22) Но ты же делаешь. Мог бы и не начинать делать и не создавать глупых тем.

«Если ДиалогОткрытияФайла.Выбрать() Тогда

        
    Файлик = ДиалогОткрытияФайла.ПолноеИмяФайла;

        
Иначе

    Файлик = «»;

КонецЕсли;»

   mikecool

27 — 14.12.22 — 14:32

как хорошо, что автору доставляет столько удовольствия новый метод…

я тоже недавно обнаружил какой-то, доселе мною не используемый, но это не доставило мне столько рабости

   Timon1405

28 — 14.12.22 — 14:36

(0) код хорошо решает задачу «подкинуть из экселя данные в запрос и сравнить с данными базы».

в консоли запросов ИР есть код перед выполнением запроса, более того, здесь же можно прочитанную ТЗ обойти и привести типы/еще как-то обработать их. читаем в ТЗ, подкидываем тз параметром. итого с околонулевым усилием у нас в запросе есть ТЗ, которую можно крутить дальше.

   vicof

29 — 14.12.22 — 14:38

(27) просто ты стар

   Kassern

30 — 14.12.22 — 14:38

(25) Ну упало и упало. Поднимем, отряхнем и снова в продакшен)

Вы с тем же успехом можете получить последнюю строку как 1 048 576 и в цикле это дело обходить до посинения.

Вообще, когда речь идет про внешние источники данных, то прилететь может что угодно и положить приложение, если заранее не позаботиться.

   MishaD

31 — 14.12.22 — 15:27

Только этим методом и гружу в эксель

   Garykom

32 — 14.12.22 — 15:27

(30) При обходе в цикле можно юзеру полоску прогресса показывать

И сделать прерывание

А повисший ПостроительОтчета только вместе с сеансом убивать, да еще и на сервере тоже

   Garykom

33 — 14.12.22 — 15:29

Имхо в продакшен через ПостроительОтчета можно только когда форматы файлов (шаблоны) надежные и не меняются

А лучше когда не любой юзер а только опытный пользует

Если там может быть что угодно и грузить кто угодно то нафик-нафик, лучше циклами

   Kassern

34 — 14.12.22 — 15:30

(32) Можно сделать ограничение на стороне кластера и тогда так же прервется выполнение и выйдет ошибка юзверу

   tesei

35 — 15.12.22 — 08:47

Я работаю с текстовиками csv: открываются нативно в экселе, легко прочитать, записать, загрузить в таблицу значений / выгрузить. Эксель аппликейшн не нужен.

   BenDiget

36 — 15.12.22 — 12:43

(27) :))) Ты прав, это и правда доставило мне радость) До сих пор рад)

  

BenDiget

37 — 19.12.22 — 11:36

(30) Привет. Посмотри пожалуйста эту мою тему, там вроде все просто, но я что-то не понимаю. Нужен просто пример. Задача.ОсновнойОбъектАдресации ERP 1С

В статье рассмотрены варианты загрузки файлов Excel и табличных документов в объекты 1С, на примере таблиц значений. Если вам нужно загрузить файл Excel с одним или несколькими листами (не важно, xls или xlsx, или даже ods), или прочитать средствами 1С табличный документ mxl – читайте эту статью. Приводятся примеры кода, которые вы можете адаптировать под ваши задачи. Материал вышел большой, для удобства пользуйтесь навигацией по содержанию.

Содержание

Зачем писать свою загрузку? Ведь есть же типовые?

Во многих типовых конфигурациях на базе БСП имеется подсистема “Загрузка данных из файла”, кроме того, на ИТС можно найти обработку загрузки данных из табличного документа. Они позволяют загружать из внешних файлов данные во многие объекты: табличные части документов, справочники, регистры сведений. Кроме того, у этих обработок достаточно мощный функционал по сопоставлению данных из файла с объектами в базе 1С, разнообразные настройки, возможность создания элементов, в случае если они не найдены…

Так в чем же необходимость “изобретать велосипед”? На то несколько причин.

  • Излишняя сложность. Ради универсальности приходится жертвовать простотой, и для рядового пользователя универсальные обработки могут оказаться сложнее, чем узкоспециализированная обработка, написанная под конкретный формат файла.
  • Как ни странно, не стопроцентная универсальность. Действительно, как быть, если нам нужно загрузить не справочники, а планы видов характеристик? Или план расчета? Или на основании одного файла заполнить сразу несколько документов?
  • Необходимость в специфичных алгоритмах. Например, при создании контрагента создавать также строго определенные договоры, или при загрузке в документ выполнять заполнение дополнительных, рассчетных колонок
  • Сложные форматы исходных файлов. Например, исходный файл содержит несколько листов, и каждый из этих листов следует отдельно обработать. Второй пример – данные на листе сложно структурированы, и на одном листе могут содержаться несколько табличных частей, разделенных пустыми строками или колонками. Такие форматы встречаются, в частности, в отчетах зарубежных брокеров. На одном листе содержится информация и о сделках с финансовыми инструментами, и о движении денежных средств, и информация о ценных бумагах, и т.д.

В каком случае хороши универсальные загрузки из табличного документа?

Различные обработки загрузки из табличного документа отлично подходят, когда формат загружаемого файла не слишком сложный, а загрузка не предполагает множества дополнительных действий. Типичные примеры: загрузка прайс-листов, загрузка заказов, загрузка начальных остатков.

Подходящих случаев использования универсальных механизмов загрузки действительно много, иначе их не стали бы включать в библиотеку стандартных подсистем. Но если функциональности стандартных средств недостаточно, всегда можно создать свою собственную обработку. Ниже рассмотрены несколько приемов, которые можно использовать при загрузке файлов Excel и других табличных документов в 1С.

Особенности загрузки из файлов Excel с несколькими листами

При использовании метода табличного документа Прочитать(), файл Excel с несколькими листами читается так, что каждый лист помещается в отдельную именованную область ячеек, но при этом весь файл выводится в один табличный документ.

&НаКлиенте
Процедура ПрочитатьФайл(Команда)
	
ОбработкаОкончанияПомещения = Новый ОписаниеОповещения("ОбработчикОкончанияПомещения", ЭтотОбъект);
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
ПараметрыДиалога.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx";
НачатьПомещениеФайлаНаСервер(ОбработкаОкончанияПомещения, , , АдресВХ, ПараметрыДиалога, ЭтотОбъект.УникальныйИдентификатор);
	
КонецПроцедуры

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

&НаСервере
Процедура ПрочитатьИзВХНаСервере(АдресВХ)
	
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");

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

СпособЧтения = СпособЧтенияЗначенийТабличногоДокумента.Текст;

//Рассмотрим пример, когда загружаем в 1С файл xlsx с листами
// Лист1, Лист2, Лист3, Лист4, Лист5
Попытка
	ТабДок.Прочитать(ИмяВременногоФайла, СпособЧтения);
	МассивИмен = Новый Массив;
	Для Каждого Область Из ТабДок.Области Цикл
		МассивИмен.Добавить(Область.Имя);
	КонецЦикла;
	Элементы.ИмяЛиста.СписокВыбора.ЗагрузитьЗначения(МассивИмен);
Исключение
КонецПопытки;
	
КонецПроцедуры

1С загрузка xlsx несколько листов

Загрузка с обходом строк и колонок

Для первого примера используем решение “в лоб”. Предположим, что количество и порядок колонок в файле известно заранее, и не меняется. Также будем считать постоянной и известной заранее первую строку, с которой следует начинать загрузку. Тогда нам достаточно в цикле пройти от первой строки до конца табличного документа.

Не следует путать методы табличного документа Область() и ПолучитьОбласть(). Первый возвращает область ячеек, а второй – новый табличный документ.

Если структура колонок таблицы, в которую мы загружаем, полностью идентична структуре колонок файла, мы можем загрузить данные, используя индексы.

&НаСервере
Процедура ПрочитатьВТаблицуЗначенийНаСервере()
	
//Работает и на сервере, и в тонком клиенте, возвращает область ячеек
ОбластьТЗ = ТабДок.Области.Лист2;
ОбластьТЗ = ТабДок.Область("Лист2");
//Работает только на сервере, возвращает табличный документ
Лист2 = ТабДок.ПолучитьОбласть("Лист2");

ТаблицаЗначений.Очистить();
ТЗ = ТаблицаЗначений.Выгрузить();
Для НомерСтроки = 6 По Лист2.ВысотаТаблицы Цикл
	СтрТЗ = ТЗ.Добавить();
	Для НомерКолонки = 2 По Лист2.ШиринаТаблицы Цикл
		СтрТЗ[НомерКолонки-2] = Лист2.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки).Текст;
	КонецЦикла;
КонецЦикла;
ТаблицаЗначений.Загрузить(ТЗ);
			
КонецПроцедуры

Если же состав колонок отличается, предпочтительнее использовать имена колонок. Обратите внимание, что при получении текста области, мы используем четыре параметра, чтобы получить область в виде конкретной ячейки. Но также можно указывать два параметра, если вы уверены, что в файле не будет объединенных ячеек, либо наоборот, указывать прямоугольную область объединенных ячеек – все зависит от конкретной задачи.

ТаблицаЗначений.Очистить();
ТЗ = ТаблицаЗначений.Выгрузить();
Для НомерСтроки = 6 По Лист2.ВысотаТаблицы Цикл
	СтрТЗ = ТЗ.Добавить();
	Наименование = Лист2.Область(НомерСтроки, 2, НомерСтроки, 2).Текст;
	Количество = Лист2.Область(НомерСтроки, 3, НомерСтроки, 3).Текст;
	Цена = Лист2.Область(НомерСтроки, 4, НомерСтроки, 4).Текст;
	Сумма = Лист2.Область(НомерСтроки, 5, НомерСтроки, 5).Текст;
	СтрТЗ.Наименование = Наименование;
	СтрТЗ.Количество = Количество;
	СтрТЗ.Цена = Цена;
	СтрТЗ.Сумма = Сумма;
КонецЦикла;
ТаблицаЗначений.Загрузить(ТЗ);

С полученными данными можно дальше работать как угодно. Например, выполнить поиск  товара по наименованию, и если он не найден – создать такой товар. Либо наоборот – вывести пользователю ошибку, что товар не удалось найти. Выбор подходящей бизнес-логики выходит за рамки данной статьи.

Загрузка файла Excel в таблицу значений 1С

Загрузка табличного документа при помощи построителя отчета

В случае, когда у загружаемого файла есть строка с заголовками, можно выполнить загрузку из файла Excel, используя построитель отчета. В этом случае следует задать прямоугольную область ячеек, включая строку заголовков. В результате получится объект РезультатЗапроса, который далее можно обрабатывать как обычно – например, выгрузить в таблицу значений, поместить во временную таблицу и использовать в других запросах, и т.д.

&НаСервере
Процедура ПрочитатьПриПомощиПостроителяНаСервере()
	
Лист3 = ТабДок.ПолучитьОбласть("Лист3");
ОбластьЯчеек = Лист3.Область(5, 2, Лист3.ВысотаТаблицы, Лист3.ШиринаТаблицы);
ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
ПостроительОтчета = Новый ПостроительОтчета; 
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
ТЗ = ПостроительОтчета.Результат.Выгрузить();
ТаблицаЗначений2.Загрузить(ТЗ);
	
КонецПроцедуры

1С табличный документ в таблицу значений

Важно! В случае, если заголовки колонок в файле не соответствуют правилу именования переменных в 1С, они будут изменены компоновщиком – некорректные символы и пробелы будут заменены на знак подчеркивания “_”.

1С прочитать табличный документ с помощью построителя отчетов

1С загрузить табличный документ через построитель отчетов

Динамическое сопоставление данных при загрузке

Предыдущие примеры ориентированы на работу с известным и неизменным составом колонок в исходном файле. Но что, если формат файла может меняться? Чтобы каждый раз не переписывать код, можно сделать его более гибким. Рассмотрим более сложный пример.

Предположим, есть несколько прайс-листов от разных поставщиков. Эти файлы имеют похожие, но не одинаковые форматы. Колонки могут располагаться в разном порядке, по-разному называться, шапка файла также имеет разное количество строк. В этом случае можно создать обработку, которая пусть и не будет универсальной, но будет достаточно гибко настраиваемой.

Добавим реквизит для указания имени области (чтобы можно было выбирать конкретный лист для чтения). Также добавим реквизит для указания пользователем номера первой строки. И основная часть настроек – таблица сопоставления колонок. Минимально достаточно будет сделать две колонки – номер исходный и номер принимающий. Такой прием распространен достаточно широко, и называется маппингом. Кроме маппинга по номерам существуют и другие варианты маппинга – например, по именам колонок.

Прочитать файл xls в 1С

&НаСервере
Процедура ПрочитатьСДинамическимиНастройкамиНаСервере()
	
НужныйЛист = ТабДок.ПолучитьОбласть(ИмяЛиста);

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

Для НомерСтроки = НомерПервойСтроки По НужныйЛист.ВысотаТаблицы Цикл
	СтрТЗ = ТЗ.Добавить();
	Для Каждого СтрСопоставления Из ТаблицаСопоставления Цикл
		НомерКолонки = СтрСопоставления.НомерКолонкиИсходный;
		СтрТЗ[СтрСопоставления.НомерКолонкиПринимающий-1] = НужныйЛист.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки).Текст;
	КонецЦикла;
КонецЦикла;
ТаблицаЗначений3.Загрузить(ТЗ);

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

Более сложные сценарии

Не всегда форматы получаемых файлов удобны для загрузки. И не всегда есть возможность попросить передающую сторону обработать файл перед отправкой. Например, файл формируется каким-нибудь веб-ресурсом, либо присылается брокером по электронной почте. Можно конечно, посадить отдельного человека на обработку таких файлов и приведение их к единому формату – но это не самое рациональное и экономически оправданное решение.

Универсального “рецепта” нет, и далее будут только мои рекомендации и подходы, которые сформировались за годы практики.

Загрузка Excel в 1С

Выше приведен специально усложненный формат файла, но на практике встречаются гораздо более неудобные файлы excel, которые нужно загрузить в 1С. Итак, с чем можно столкнуться, и что можно попробовать предпринять?

  • “Плавающая” шапка. В зависимости от каких-нибудь условий, первая строка значимой информации может изменяться. Решение – динамически определять начало таблицы для загрузки – по тексту шапки таблицы, по цвету ячеек, и т.п.
  • Несколько таблиц на одном листе. Решение – динамически определять начало и окончание каждой таблицы. В качестве окончания могут служить строки с текстом “Итого”, “Всего”. Также определять начало следующей таблицы и отнимать определенное количество строк, которое разделяет одну и другую таблицы в файле.
  • Неподходящий формат ячеек. Текст “100 500.50” не является числом, и необходимо выполнить ряд действий, чтобы преобразовать его к числу – удалить разделитель разрядов, заменить точку на запятую, при необходимости удалить символ валюты, если он также присутствует в ячейке.
  • Объединенные ячейки. Решение – анализируйте формат, используйте соответствующие параметры при задании области ячеек.
  • Пустые строки, пустые колонки. Встречаются решения, когда файл анализируется с определенной строки и до первой встретившейся пустой ячейки – предполагается, что достигнут конец файла. Но такой подход не всегда корректен. Возможны случаи, когда после пустой строки или колонки продолжаются значимые строки. Решение – использовать более точный способ определения конца таблицы: метод ВысотаТаблицы, ячейки с ключевыми словами, ячейки с ключевым оформлением цветом.

Если вас не испугал последний раздел, и вы дочитали до конца – поздравляю и благодарю! Мне доводилось загружать файлы excel на китайском языке, загружать отчеты брокеров с самыми дикими форматами, загружать xls-файлы, полученные путем распознавания отсканированного изображения, и бороться с кучей ошибок.
Верьте в себя, не опускайте руки перед лицом проблем, и все получится!

&НаСервере
Функция Конвертация_Excel_в_ТЗ(АдресВХранилище)ИмяФайлаExcel = ПолучитьИмяВременногоФайла(«.xlsx»); // или реквизит с выбором файла .xlsx
   
ФайлИмпортаExcel = ПолучитьИзВременногоХранилища(АдресВХранилище);
   
ФайлИмпортаExcel.Записать(ИмяФайлаExcel);ТабличныйДокумент = Новый ТабличныйДокумент;
    Попытка
       
ТабличныйДокумент.Прочитать(ИмяФайлаExcel, СпособЧтенияЗначенийТабличногоДокумента.Текст);
    Исключение
       
Сообщение = Новый СообщениеПользователю;
       
Сообщение.Текст = ОписаниеОшибки();
       
Сообщение.Сообщить();
    КонецПопытки;
//Автоматически именует столбцы таблицы по первой строке файла. Пробелы заменяются на «»
   
ПЗ = Новый ПостроительЗапроса;
   
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());
   
ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
   
ПЗ.ЗаполнитьНастройки();
   
ПЗ.Выполнить();ТаблицаСДанными = ПЗ.Результат.Выгрузить();

    Возврат

ТаблицаСДанными;

КонецФункции

Данная статья не претендует на оригинальность и не является конечным решением.

Подходы решения задач и примеры программного кода несут исключительно обучающий характер.

Существует масса подходов загрузки данных из EXCEL в 1С. Большинство решений основаны на COM или еще более сложных возможностях платформы.

Для себя разработал наиболее оптимальный вариант:
EXCEL -> Табличный документ -> Построитель запроса -> Таблица значений

Выполнить чтение Excel в таблицу значений:

Визуализировать таблицу значений:

Описание преобразования данных:

  1. Получаем исходный файл на клиенте;
  2. На основании файла создаем двоичные данные и получаем расширение файла;
  3. Передаем двоичные данные на сервер;
  4. Создаем дубль файла excel на сервере;
  5. Читаем файл в новый табличный документ;
  6. Получаем область табличного документа, где находятся полезные данные (ТабличныйДокумент.Область(8, 1, ТабличныйДокумент.ВысотаТаблицы, ТабличныйДокумент.ШиринаТаблицы) );
  7. Создаем новый построитель запроса и установим в качестве источника данных — область полезных данных;
  8. Выполним построитель и получим результат запроса;
  9. Результат запроса выгрузим в таблицу значений.
  • Скорость работы по сравнению с COM EXCEL
  • Возможно выполнять загрузку где EXCEL нет вообще (MAC | LINUX | etc…)
  • Простота реализации

Источник

Ваш браузер устарел, пожалуйста обновите ваш браузер пройдя по ссылке www.microsoft.com/download

Шаблон загрузки из Excel штатными средствами платформы 8.3 (без com, ado, Excel Application) (обычные и управляемые формы)

Шаблон для быстрой загрузки различных файлов Excel.

В новых версиях платформы, у табличного документа можно воспользоваться методом Прочитать(ИмяФайла, СпособЧтенияЗначений) для загрузки данных из файлов *.xls, *.xlsx, причем необязательно указывать формат загружаемого файла (второй необязательный параметр).

СпособЧтенияЗначений — Определяет, каким образом нужно интерпретировать значения, считываемые из исходного документа XLS, XLSX или ODS.

Принцип работы обработки

1) Загрузка данных из файла Excel в новый табличный документ:

2) Загружаем в построитель отчета как источник данных

3) Выгружаем результат построителя в ТЗ

При этом имена колонок формируются по первой строке таблице (заголовки), преобразуя текст в ячейке по правилам именования (пример: «Дата рождения» преобразуется «ДатаРождения».

Важно: метод Прочитать() не работает на клиенте, поэтому при работе на управляемых формах в клиент-серверной базе, необходимо будет передать сам файл с клиента через временное хранилище на сервер.

В дальнейшем можно работать непосредственно с таблицей значений.

В Обработке — пример реализации шаблона, для обычных и управляемых форм (одна обработка с двумя формами), при этом:

1) диалог выбора файла Excel,

2) для управляемых форм — передача через временное хранилище файла с клиента на сервер,

3) автоматическое создание колонок, реквизитов и вывод на форму вновь загруженной таблицы значений.

Тестировалось на платформе 8.3.12.1567, на конфигурациях УТ 10.3 и ЗУП 3.1.

Источник

Как прочитать файл Excel в 1С 8.3

Весьма частая задача, с которой сталкивается 1С разработчик – это чтение файлов Excel и загрузка их в 1С. Есть как минимум два способа прочитать файл Excel – средствами платформы 1С, или используя COM-объект приложения MS Excel. В статье рассматривается чтение файлов xls, xlsx при помощи табличного документа.

Содержание

Общая информация

В платформе 1С 8 существует объект ТабличныйДокумент, который позволяет формировать и выводить на экран печатные формы в табличном виде. Но у табличного документа есть еще одно применение – чтение данных из табличных файлов. Поддерживаются форматы xls, xlsx и ods. Т.е. можно загружать табличные файлы, созданные в пакете MS Office или OpenOffice Calc.

Значения типа Число или Дата, содержащиеся в ячейках исходного табличного файла, можно считать двумя способами – как значение, либо как текст. Рассмотрим пример: пусть в ячейке содержится число 123,456, и установлен формат с округлением до целого числа; в этом случае отображаться будет текст “123”, а значение будет храниться 123,456

  1. Если прочитать с указанием способа чтения как “Значение”, в табличный документ 1С будет прочитано исходное значение 123,456
  2. Если прочитать с указанием способа чтения как “Текст”, значение будет потеряно, и в табличный документ прочитается текст “123”

Использование объекта ВременноеХранилище

Вспомогательные процедуры — диалог выбора файла

Следующий код не является обязательным для решения задачи – путь к исходному файлу можно указать в коде, ввести вручную, скопировать из адресной строки ОС или прочитать из БД – вариантов очень много. Мы же рассмотрим пример, когда пользователь сам указывает файл на клиентском компьютере, и путь к этому файлу помещается в реквизит. В примере будем использовать реквизит формы ПутьКФайлу

Создадим обработчик события НачалоВыбора:

Для того чтобы код был универсальным, и работал в случае отказа от модальных синхронных методов, нам понадобится создать асинхронную процедуру ВыбратьФайлНаКлиенте(). В ней мы создаем диалог выбора для открытия файла, указываем фильтр с нужными форматами – xls и xlsx, а также отключаем множественный выбор файлов. Перед методом ВыбратьАсинх добавляем ключевое слово Ждать, с тем чтобы дальнейший код дождался возвращаемого значения.

Двоичные данные во временное хранилище

Логика кода будет следующая. Нам понадобятся двепроцедуры – клиентский обработчик команды, и серверный метод который и будет непосредственно считывать переданный файл.

  1. проверяем, указан ли путь к файлу. Если не указан – прекращаем выполнение
  2. Получаем двоичные данные из файла по указанному пути
  3. Помещаем эти двоичные данные во временное хранилище
  4. Далее передаем на сервер адрес этого временного хранилища
  1. Создаем временный файл с нужным расширением (в примере – xlsx)
  2. Получаем двоичные данные из временного хранилища
  3. Записываем во временный файл
  4. Определяем вариант чтения файла – читать значения табличного документа как текст, или как значения
  5. Далее используем метод Прочитать, и считываем из временного файла данные в табличный документ

Метод Прочитать лучше делать в попытке, и отдельно продумать и написать код обработки исключения. для упрощения примера мы это исключение никак не обрабатываем. В случае, если передан поврежденный файл, или его невозможно прочитать по какой-то другой причине, он просто не считается в табличный документ.

Рассмотренный пример является достаточно универсальным – процедуру ПрочитатьИзВХНаСервере() можно использовать с любыми двоичными данными, помещенными во временное хранилище. Это могут быть двоичные данные, полученные с веб-сервиса, считанные из базы данных, полученные из макета, созданного в конфигураторе – код от этого не изменится.

Помещение файла на сервер в 1С

Более простой, но менее универсальный способ, предназначенный исключительно для передачи файла с клиента на сервер – это использование метода НачатьПомещениеФайлаНаСервер. В платформе предусмотрено несколько методов для помещения файлов – как одиночных, так и нескольких одновременно. Эти методы делятся на синхронные и асинхронные. Начиная с версии 8.3.18 появились методы, использующие ключевые слова Асинх и Ждать. Аналогичный метод мы рассмотрели при работе с диалогом. Далее разберем “классический” вариант с обработкой оповещения.

Логика кода следующая:

  1. Создаем описание оповещения и указываем в нем процедуру, которая будет вызвана после окончания помещения файла на сервер
  2. Указываем параметры диалога выбора файла и добавляем фильтр
  3. Вызываем помещение файла на сервер
  4. После того как файл помещен во временное хранилище, используем ту же процедуру, которую мы реализовали в первом примере – ПрочитатьИзВХНаСервере. В этом примере мы для разнообразия используем способ чтения значений как “Текст”.

Источник

Можно ли прочитать Excel через АДО без экселя?

Если есть мс скл, и конкретный файл — можно его (мс скл) задействовать. Например подключить файл-источник как связанный сервер и дальше дергать данные через ADO или даже ВИД (по идее должно работать, но не уверен).
https://docs.microsoft.com/ru-ru/sql/relational-databases/import-export/import-data-from-excel-to-sql?view=sql-server-ver15

Это если не подойдет нативный 1сный метод из (2))

Нужно смотреть, что в этом большом объеме: большое количество данных, сложенных в один или несколько листов или это файл с некими сложными тяжеловесными элементами.

многостраничные xls/xlsx читаются.

(2) Была таблица с 3-мя листами,
Надо было прочитать только 1 лист (независимо от имени)

ТабличныйДокумент тупо прочитал все листы.
Отказался в сторону ADO.. или ЧЯНТД?

а можно не париться и воспользоваться построителем запроса. наличие экселя вообще не обязательно. имена колонок будут взяты по первой строке.

&НаКлиенте
Процедура ПрочитатьФайл(Команда)

АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКФайлу), ЭтаФорма.УникальныйИдентификатор);
ПрочитатьФайлНаСервере(АдресВременногоХранилища);

&НаСервере
Процедура ПрочитатьФайлНомеровНаСервере(АдресВременногоХранилища)

Если БинДанные <> Неопределено Тогда
ИмяФайла = ПолучитьИмяВременногоФайла(«xlsx»);
БинДанные.Записать(ИмяФайла);
Иначе
УдалитьФайлы(ИмяФайла);
ВызватьИсключение «Проблемы с файлом»;
КонецЕсли;

ФайлНаДиске = Новый Файл(СокрЛП(ИмяФайла));
Если Не ФайлНаДиске.Существует() Тогда
Возврат;
КонецЕсли;

ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Очистить();
ТабличныйДокумент.Прочитать(ИмяФайла);

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

Источник

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

1С 8.3 Чтение Excel через Табличный документ

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

Диалог = Новый ДиалогВыбораФайла ( РежимДиалогаВыбораФайла . Открытие );
Диалог . Заголовок = «Выберите файл 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 в таблицу значений, автоматически именует столбцы таблицы по первой строке файла. Пробелы заменяются на «».

&НаСервере
Функция ПодготовитьТаблицуСДанными(ФайлАдресВХранилище)
	
	ИмяФайлаСервер = ПолучитьИмяВременногоФайла(".xlsx");
	ФайлИмпорта = ПолучитьИзВременногоХранилища(ФайлАдресВХранилище);
	ФайлИмпорта.Записать(ИмяФайлаСервер);
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	Попытка
		ТабличныйДокумент.Прочитать(ИмяФайлаСервер, СпособЧтенияЗначенийТабличногоДокумента.Текст);
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = ОписаниеОшибки();
		Сообщение.Сообщить();
	КонецПопытки;	
	
	ПЗ = Новый ПостроительЗапроса;
	ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());
	ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
	ПЗ.ЗаполнитьНастройки();
	ПЗ.Выполнить();
	
	ТаблицаПромежуточныхДанных = ПЗ.Результат.Выгрузить();
	
	Возврат	ТаблицаПромежуточныхДанных;
	
КонецФункции

Комментарии

Функция считывает содержимое страницы файла Excel в таблицу значений, автоматически именует столбцы таблицы по первой строке файла. Пробелы заменяются на «».

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

&НаСервере

Функция ПодготовитьТаблицуСДанными(ФайлАдресВХранилище)

ИмяФайлаСервер = ПолучитьИмяВременногоФайла(«.xlsx»);

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

ФайлИмпорта.Записать(ИмяФайлаСервер);

ТабличныйДокумент = Новый ТабличныйДокумент;

Попытка

ТабличныйДокумент.Прочитать(ИмяФайлаСервер, СпособЧтенияЗначенийТабличногоДокумента.Текст);

Исключение

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = ОписаниеОшибки();

Сообщение.Сообщить();

КонецПопытки;

ПЗ = Новый ПостроительЗапроса;

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

ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;

ПЗ.ЗаполнитьНастройки();

ПЗ.Выполнить();

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

Возврат ТаблицаПромежуточныхДанных;

КонецФункции

Источник

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Пстр excel как использовать
  • Прочерки вместо ноля в excel
  • Пстр excel до конца строки
  • Процплат в excel примеры
  • Психрометрическая таблица в excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии