Компанія ITGood

18/01/2019

РОБОТА З ФАЙЛАМИ EXCEL БЕЗ ІНСТАЛЬОВАНОГО OFFICE

Потрібно розробити завантаження даних із файлу Excel за умови, що на комп’ютерах не інстальовано Office. Не біда. Ми розповімо і покажемо на прикладі, як це зробити без особливих зусиль.

Досить часто програмістам доводиться стикатися з тим, що необхідно завантажити з файлу Excel якісь дані, але на комп’ютері користувача не встановлений Microsoft Office. Я хочу розповісти, як це можна зробити за допомогою бібліотеки ADODB. У цій статті розглянемо на прикладі завантаження із файлу, а також основні методи ADODB.

Основи роботи з ADODB

Для початку розповім про методи та об’єкти, які будемо використовувати. Для роботи нам знадобиться COMОб’єкт – ADODB.Connection.

 Connection = Новый COMОбъект(“ADODB.Connection”);

За допомогою методу Open, який має один параметр ConnectionString, ми встановимо зв’язок з даними.

ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source= “ + ИмяФайла + “;Extended Properties=”“Excel 12.0;HDR=NO; IMEX=1;”“”;

Connection.Open(ConnectionString);

Для вибірки та отримання даних використовується метод Execute, як параметр передається запит.

СтрЗапроса = “SELECT * FROM [” + ИмяЛиста+ “]“;

Connection.Execute(СтрЗапроса);

Цей метод повертає набір даних, що називається RecordSet. За допомогою цього об’єкта можна отримувати, змінювати, видаляти та додавати дані.

Завантаження даних

Наприклад візьмемо файл Excel, що складається з 3-х колонок Прізвище, Ім’я, По батькові та заповненими значеннями. Створимо обробку в 1С. На формі розмістимо Табличне поле з типом даних Таблиця значень і додамо колонки такі як у файлі. Додамо також кнопку, за якою безпосередньо виконуватиметься завантаження даних із файлу в таблицю.

В обробнику кнопки напишемо наступний код:

ИмяФайла = “C:\Temp\ФИО сотрудников.xlsx”;

ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;

|Data Source= “ + СокрЛП(ИмяФайла) + “;

|Extended Properties=”“Excel 12.0;

|HDR=NO;

|IMEX=1;”“”;

Connection = Новый COMОбъект(“ADODB.Connection”);

Connection.Open(ConnectionString);

ИмяЛиста = “Лист1$”;

СтрЗапроса = “SELECT * FROM [“ + ИмяЛиста+ “]”;

RecordSet = Connection.Execute(СтрЗапроса);

Пока НЕ RecordSet.EOF() Цикл

НовСтр = Данные.Добавить();

НовСтр.Фамилия = RecordSet.Fields(0).value;

НовСтр.Имя = RecordSet.Fields(1).value;

НовСтр.Отчество = RecordSet.Fields(2).value;

RecordSet.MoveNext();

КонецЦикла;

Connection.Close();

Як говорили вище, ConnectionString – це рядок підключення. Розберемо кожен його параметр окремо:

Provider – ім’я драйвера джерела даних. Необхідно перевірити версію встановлених драйверів (Панель керування – Адміністрація – Джерела даних ODBC), яка повинна збігатися з версією, зазначеною в цьому параметрі.

Data Source – шлях до файлу.

HDR – використання заголовків у файлі. Приймає значення YES – є заголовки та NO – немає заголовків.

Створюємо новий COM-об’єкт та за допомогою методу Open – відкриваємо з’єднання. Далі нам потрібно звернутися до аркушів файлу, для цього створюємо запит. У моєму випадку вибираємо всі дані з Листа 1.

ИмяЛиста = “Лист1$”;

СтрЗапроса = “SELECT * FROM [“ + ИмяЛиста+ “]”;

Для того, щоб вибрати певні значення необхідно використовувати конструкцію WHERE. Для прикладу виберемо всі рядки, де у другій колонці зустрічається ім’я Владислав, запит матиме такий вигляд:

СтрЗапроса = “SELECT * FROM[” + ИмяЛиста+ “] where [F2] = ‘Владислав’“;

В результаті виконання запиту ми отримуємо об’єкт RecordSet. За допомогою циклу Поки Цикл КінецьЦикла та методу EOF (показує кінець вибірки) обходимо всі записи. Для того щоб отримати наступний запис використовуємо спосіб MoveNext.

Щоб отримати значення колонки потрібно звернутися до неї за допомогою конструкції RecordSet.Fields(0).Value, де Fields(0) – це номер колонки і починається завжди з 0. Далі типовим механізмом додаємо значення необхідних колонок в таблицю значень.

В результаті на формі ми бачимо дані з файлу Excel, які знаходяться у таблиці значень.

Підпишіться на розсилку!

Хочете першими отримувати наші новини і цікаві матеріали? Підпишіться на розсилку прямо зараз!