рубрики: Excel | Дата: 19 июня, 2017
Скачать обработку с примерами из статьи: professia1c_ExcelApplication.epf
Платформа: 8.3; Тип формы: управляемая.
Одним из самых распространенных методов при работе с файлами Excel из 1С является использование COM соединения, т.е создание объекта Excel.Application и дальнейшая работа с ним средствами встроенного в ексель языка VBA. При помощи этого метода можно как записывать данные в файл Excel, так и читать их из файла.
Рассмотрим обе эти возможности на небольших примерах.
В прошлой статье про формирование файла Excel из табличного документа был показан пример записи в файл вот такой простенькой таблицы
Товар | Количество |
---|---|
Яблоки | 5 |
Груши | 10 |
Проделаем то же самое (запишем таблицу значений в файл ексель), но уже с использованием объекта Excel.Application. Сделать это можно с помощью следующей процедуры
&НаСервере
Процедура ЗаписатьТаблицуЗначенийВФайлЕксель(Таблица)
ДокументЕксель = Новый COMОбъект("Excel.Application");
КнигаЕксель = ДокументЕксель.WorkBooks.Add(); //Создаем книгу ексель
ЛистЕксель = КнигаЕксель.WorkSheets(1); //Позиционируемся на 1-м листе
КоличествоКолонок = Таблица.Колонки.Количество();
//Формируем строку с заголовками
Для Счетчик = 1 По КоличествоКолонок Цикл
ТекущаяКолонка = Таблица.Колонки[Счетчик - 1];
ЛистЕксель.Cells(1, Счетчик).Value = ТекущаяКолонка.Имя;
КонецЦикла;
//Добавляем строки из таблицы
НомерСтроки = 2;
Для каждого СтрокаТаблицы Из Таблица Цикл
Для НомерКолонки = 1 По КоличествоКолонок Цикл
ЛистЕксель.Cells(НомерСтроки, НомерКолонки).Value = Строка(СтрокаТаблицы[НомерКолонки - 1]);
КонецЦикла;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
КнигаЕксель.SaveAs("D:\musor\Test.xlsx"); // Сохраняем файл ексель
ДокументЕксель.Application.Quit(); // Закрываем COM соединение
КонецПроцедуры
Здесь необходимо сделать несколько пояснений. Поскольку процедура серверная (клиентскую в данном случае сделать не получиться, т.к. тонкий клиент не работает с таблицей значений) необходимо понимать, что Excel должен быть установлен на сервере, т.е. там же где установлен сервер 1С:Предприятия. В других ситуациях запись файла ексель возможна и на клиенте. И тут уже Excel должен быть установлен на каждой клиентской машине, где будет выполняться эта процедура.
Для простоты кода не стал использовать конструкции Попытка — Исключение. Хотя в реальном коде они конечно же должны использоваться при создании COM объекта и т.д. В случае выполнения кода на клиенте мы можем после сохранения файла, дать возможность пользователю просмотреть его и при необходимости отредактировать. Для этого достаточно установить видимость объекта Excel в 1. Закрывать программно объект в этом случае не требуется. Его потом закроет пользователь вручную.
КнигаЕксель.SaveAs("D:\musor\Test.xlsx"); // Сохраняем файл ексель
ДокументЕксель.Visible = 1;
//ДокументЕксель.Application.Quit(); // Закрываем COM соединение
Теперь посмотрим как реализуется обратная задача по чтению данных из файла Excel. Для этого воспользуемся файлом созданным в первом примере и прочитаем его в табличный документ с помощью вот такой процедуры:
&НаКлиенте
Процедура ПрочитатьФайлЕксель(Команда)
ДокументЕксель = Новый COMОбъект("Excel.Application");
КнигаЕксель = ДокументЕксель.WorkBooks.Open("D:\musor\Test.xlsx"); //Открываем файл ексель
ЛистЕксель = КнигаЕксель.WorkSheets(1); //Позиционируемся на 1-м листе
ТабДок = Новый ТабличныйДокумент;
Для НомерСтроки = 1 По ЛистЕксель.UsedRange.Rows.Count Цикл
Для НомерКолонки = 1 По ЛистЕксель.UsedRange.Columns.Count Цикл
ТабДок.Область("R" + НомерСтроки + "C" + НомерКолонки).Текст = ЛистЕксель.Cells(НомерСтроки, НомерКолонки).Value;
КонецЦикла;
КонецЦикла;
ТабДок.Показать();
ДокументЕксель.Application.Quit(); // Закрываем COM соединение
КонецПроцедуры
Как видим на клиенте можно также успешно создавать объект Excel.Application. А для подсчета количества строк и колонок на листе применяем свойство UsedRange — используемый диапазон.
Таким образом при необходимости записать данные в файл Excel или наоборот прочитать их из файла и при минимальном знании VBA мы можем воспользоваться COM объектом Excel.Application. Конечно сейчас были рассмотрены самые примитивные свойства и методы, но при необходимости можно воспользоваться справкой по VBA в Excel и программно создать файл с достаточно сложным оформлением. Хотя в этом случае наверное проще будет заранее создать файл с шаблоном и заполнять уже его. Данный метод требует установленного приложения Excel и является не очень производительным. По крайней мере чтение и запись в Excel c помощью ADO работает гораздо быстрее.
Добавить комментарий