Импорт данных из Excel в 1С. Получение списка листов (имен листов) из Excel (xls, xlsx)

Из Excel в 1С, список листов (имя листа) Excel

Все последние версии 1С:Предприятия имеют возможность открывать и использовать com-объекты из встроенного языка программирования 1С. Операционная система Windows и установленные в ней программы предлагают богатый набор таких объектов, в том числе интерфейсы для доступа к различным базам данных при помощи технологии ADO (ActiveX Data Objects)

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

Зачем нужна функция чтения списка листов из Excel в 1С ? Дело в том, что при работе в 1С постоянно требуются данные, предоставляемые в файлах формата Excel, какие-то отчеты, прайсы и прочее, но сама 1С:Предприятие не содержит встроенных функций по импорту данных Excel.

Экспорт данных, выгрузка в Excel при помощи встроенных функций возможна - для этого используются методы объекта ТабличныйДокумент.Записать(), который позволяют записать содержимое документа в формате рабочей книги Microsoft Excel. Но вот обратного импорта, кроме ручного копирования столбцов и строк через клипборд - не предусмотрено.

Минуточку! :) Если Вам была хоть какая-то польза... от моих статей на этом сайте fast-soft.ru, пожалуйста, оставьте свое мнение в комментариях или поделитесь с друзьями, нажав кнопочки социальных сетей - на этой странице. Этим Вы поможете мне, скромному программисту, в развитии сайта. Спасибо! :)

Данная функция, рассматриваемая в этой статье, функция чтения списка листов из книги Excel в 1С является "подготовительной" для следующей, универсальной функции импорта данных из Excel в 1С. Эта функция импорта будет описана на нашем сайте fast-soft.ru в следующей статье.

Я не нашел в интернете "внятного" и универсального примера функции импорта данных из файлов Excel. Некоторые примеры имелись, но были привязаны к структуре конкретного xls-файла, с заранее известными именами листов, а так же требовали наличия установленной копии Microsoft Excel.

Для своей работы такие примеры использовали com-объект "Excel.Application", что во многих случаях просто неудобно, так как инициализация такого объекта требует больших ресурсов компьютера, да и не всегда имеется возможность купить и установить пакет Microsoft Office (в который входит Excel) на каждой машине, где это требуется.

Из Excel в 1С, схема базы данных, список таблиц (имена листов)Мы пойдем другим путем. Для получения данных их файлов Excel (при помощи ADO и драйверов OLE DB) не обязательно иметь на компьютере установленный Microsoft Excel, так как один из драйверов OLE DB позволяет интерпретировать файл Excel (а именно, рабочую книгу Excel (Workbook) - как типовую базу данных и производить с ней различные операции.

Таблицами в такой "базе данных" являются листы рабочей книги. В этой, как и в любой другой базе данных (БД), помимо манипуляции с самими данными, как таковыми, существует возможность получить некоторую информацию о структуре самой БД. Инфомацию о структуре объектов базы данных и связей между ними зачастую принято называть "схемой базы данных"

При помощи функций получения схемы БД у объекта "ADODB.Connection" мы сможем получить перечень, список листов (в терминах БД - таблиц) из файла Excel.

Ниже я привожу код функции, получающей на входе полное имя файла Excel, содержащее путь к файлу, и имя с расширением файла (*.xls, *.xlsx) и возвращающей объект-массив 1С, который в качестве своих элементов содержит строки с именами листов исходного файла. Если чтение списка листов файла не удалось, то функция возвращает значение "Неопределено"

// функция возвращает массив, содержащий имена листов книги из указанного файла Excel (формат Excel 97-2010) или Неопределено,
// если попытка чтения списка листов не удалась
// <ИмяФайла> - полное имя файла (путь к файлу с именем файла и расширением файла xls или xlsx)
// Пример вызова: Список = ФайлExcel_ПолучитьСписокЛистов("c:\Отчеты\Прайс.xlsx")
// <Список> содержит массив строк, с именами листов в файле "Прайс.xlsx", например: Лист1$, Лист2$, Лист3$
Функция ФайлExcel_ПолучитьСписокЛистов(ИмяФайла)
  adSchemaTables = 20;
  adFalse = 0;
  // формируем строку соединения для использования нашего файла Excel
  СтрокаСоединения = ФорматСтроки("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%1; Extended Properties=""Excel 12.0;""", ИмяФайла);
  // если готовый объект Connection не был передан в функцию, тогда создаем его сами
  Попытка
    AdoConnection = Новый COMОбъект("ADODB.Connection");
  Исключение
    Сообщить(ОписаниеОшибки()); // если была ошибка в блоке, то сообщаем о ней и выходим
    Возврат Неопределено;
  КонецПопытки;
  СписокЛистов = Новый Массив;
  // получаем схему базы данных и заносим список таблиц(листов) в массив
 
  Попытка
 
    AdoConnection.Open(СтрокаСоединения);
    // получаем recordset, содержащий схему таблиц базы даннных
    // поля таблицы-схемы: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, TABLE_GUID, DESCRIPTION, TABLE_PROPID, DATE_CREATED, DATE_MODIFIED
    // из них заполнены: TABLE_NAME, TABLE_TYPE
    SchemaRecordset = AdoConnection.OpenSchema(adSchemaTables);
    // в цикле "перебираем" все записи в объекте SchemaRecordset
    Пока SchemaRecordset.EOF() = adFalse Цикл
       // добавляем имя таблицы (листа) в массив
      СписокЛистов.Добавить(SchemaRecordset.Fields("TABLE_NAME").Value);
      // переход на следующую запись SchemaRecordset
      SchemaRecordset.MoveNext();
    КонецЦикла;  
 
  Исключение
 
    Сообщить(ОписаниеОшибки()); // если была ошибка в блоке, то сообщаем о ней и выходим
    Возврат Неопределено;
 
  КонецПопытки;
 
  Возврат СписокЛистов;
КонецФункции

Пояснения к функции чтения списка листов из Excel в 1С даны во встроенных комментариях в приведенном выше коде 1С.  Если возникнут вопросы, то задавайте их в комментариях к статье.

Важно: Драйвер, при помощи которого мы получаем возможность работы через OLE DB с файлами Excel должен  быть установлен на компьютере.  Если функция не работает, скачайте и установите пакет, содержащий все необходимые компоненты (MDAC  и дополнительные драйвера OLE DB)  с этой страницы сайта Microsoft 

Изнутри функции ФайлExcel_ПолучитьСписокЛистов() вызывается функция ФорматСтроки(). Ее текст можно посмотреть на нашем сайте - ФорматСтроки()

С уважением, Дегтярев Роман.

Как научиться программировать в 1С с нуля?

Как работать программистом 1С и получать до 150 000 рублей в месяц?

ЗАПИШИСЬ НА БЕСПЛАТНЫЙ

2-НЕДЕЛЬНЫЙ КУРС

"ПРОГРАММИРОВАНИЕ в 1С ДЛЯ НОВИЧКОВ"

Курс придет на электронную почту. Стань программистом, выполняя пошаговые задания.

Для участия нужен только компьютер и интернет

Бесплатный доступ на курс:



Комментарии для тех, кто VKontakte


1 комментарий: Функции 1С. Из Excel в 1С. Получение списка листов (имен листов) из файла Excel

  • Владимир говорит:

    Спасибо. То что надо работа через OLE DB

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Интернет-курс "Программирование в 1С с нуля"

Учись программировать и зарабатывать до
150 000 руб. в месяц! ТОЛЬКО СЕГОДНЯ - БЕСПЛАТНЫЙ ДОСТУП К КУРСУ!

Присоединяйся, тут все свои!