Профессия — 1С

Рукопашный бой Карташ

Категории

Работа с файлами Excel через Excel.Application

рубрики: Excel | Дата: 19 Июнь, 2017
Скачать обработку с примерами из статьи: professia1c_ExcelApplication.epf
Платформа: 8.3; Тип формы: управляемая.

Одним из самых распространенных методов при работе с файлами Excel из 1С является использование COM соединения, т.е создание объекта Excel.Application и дальнейшая работа с ним средствами встроенного в ексель языка VBA. При помощи этого метода можно как записывать данные в файл Excel, так и читать их из файла.




Рассмотрим обе эти возможности на небольших примерах.

Запись данных в 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

Теперь посмотрим как реализуется обратная задача по чтению данных из файла 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 работает гораздо быстрее.

Добавить комментарий

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

   

2018г. Профессия — 1С. Обмен опытом по программированию в 1С