Работа с MS Excel в 1С
Ниссенбаум А.
12.02.2018
1 понравилось
25 просмотров

Работа с MS Excel в 1С

В 1С существует 2 способа работы с файлами MS Excel, через COM-объект и встроенными средствами 1С с помощью объекта табличный документ. Разберем оба эти способа поподробнее.

1. Работа через COM-объект.

Для этого способа необходим установленный MS Excel, притом если вы работаете с файлом на сервере, то соответственно MS Excel должен быть установлен на сервере, если на клиенте - то на клиентской стороне так же необходим  MS Excel.

Пример (в конце статьи можно посмотреть в текстовом виде):

Надо заметить, что все объекты , методы и свойства, предоставляемые COM-объектом "Excel.Application" - это объекты , методы и свойства VBA, языка программирования MS Office.

Примечание:

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

Пример:

2. Работа через ТабличныйДокумент 1С.

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

Пример записи очень простой и не требует особого внимания:

Однако здесь у нас возникает  проблема. При записи из 1С в книге Excel по умолчанию отключено отображение имен листов.

Эту проблему можно решить 2 способами, 1 - в самой книге в настройках включить отображение листов (не все пользователи будут согласны это делать), 2 - сделать это через COM-объект ( нам опять нужен установленный MS Excel).

После этого небольшого дополнения,  в файле MS Excel будут видны ярлыки листов.

Чтение же MS Excel не настолько простая задача, поскольку метод прочитать доступен только на сервере или толстом клиенте. Для этого нам необходимо передать файл MS Excel на сервер.

Вот такими несложными методами можно читать, писать и изменять файлы MS Excel.

1.

&НаКлиенте

Процедура СозданиеДокумента()

               

                Попытка

                              

                               Эксель = Новый COMОбъект("Excel.Application");

                              

                Исключение

                              

                               Сообщить("Неудачная попытка подключения компоненты Excel. Возможно, программа Excel не установлена на данном компьютере!");

                              

                               Возврат;

                              

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

               

                Книга  = Эксель.WorkBooks.Add(); //Создаем новую книгу MS Excel

               

                Лист = Книга.WorkSheets.Add(); //Добавляем лист

               

                Лист.Name = "Пример из 1С"; //Задаем имя листа

               

                Лист.Cells (1,1).Value = "Давайте создадим формулу";

               

    Лист.Cells (2,1).Value = 1;

               

                Лист.Cells (2,2).Value = 2;

               

                Лист.Cells (2,3).Formula  = "=A2+B2";

               

                Лист.Cells (3,1).Value  = ТекущаяДата();

               

                Книга.SaveAs("C:\1\Test.xlsx");

               

                Книга.Close();

               

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

 

2. 

&НаСервере

Функция ПолучитьМакетСервер()

                Возврат РеквизитФормыВЗначение("Объект").ПолучитьМакет("ШаблонНаВыгрузку"); //Таким образом мы получаем макет внешней обработки;

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

 

&НаКлиенте

Процедура Работа()

               

                Попытка

                               Эксель = Новый COMОбъект("Excel.Application");

                Исключение

                               Сообщить("Неудачная попытка подключения компоненты Excel. Возможно, программа Excel не установлена на данном компьютере!");

                               Возврат;

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

               

               

                Макет = ПолучитьМакетСервер();

               

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

               

                Макет.Записать(ИмяВременногоФайла);

               

У вас есть вопрос, нужна помощь консультанта?

Оставьте номер телефона и мы перезвоним!

                Книга  = Эксель.WorkBooks.Open(ИмяВременногоФайла);

               

                ЛистШаблона = Книга.WorkSheets(1);

 

    ЛистШаблона.Cells (6,1).Value = "Дата:";

               

                ЛистШаблона.Cells (6,2).Value = ТекущаяДата();

               

                ЛистШаблона.NumberFormat = "dd/mm/yy;@";         // Дадим формат даты, этот формат получен записью макроса в MS Excel

                              

                ЛистШаблона.Columns("B:B").EntireColumn.AutoFit; // Растянем колонку, чтобы дата точно помещалась

               

                Книга.SaveAs(ИмяФайла);

               

                Книга.Close();

               

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

3.

&НаКлиенте

Процедура ЗаписатьТабличныйДокумент()

               

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

               

                ТабличныйДокумент.Область("R1C1").Текст = "Пример записи в MS Excel из 1С";

               

                ТабличныйДокумент.Записать("C:\1\Test2.xls",ТипФайлаТабличногоДокумента.XLSX);

               

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

4.

&НаКлиенте

Процедура ЗаписатьТабличныйДокумент()

               

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

               

                ТабличныйДокумент.Область("R1C1").Текст = "Пример записи в MS Excel из 1С";

               

                ТабличныйДокумент.Записать("C:\1\Test2.xls",ТипФайлаТабличногоДокумента.XLSX);

               

                Excel = Новый COMОбъект("Excel.Application");

               

                Excel.WorkBooks.Open("C:\1\Test2.xls");

               

                Excel.Visible = 0;

               

                Excel.ActiveWindow.DisplayWorkbookTabs = 1;

               

                Excel.ActiveWindow.TabRatio = 0.6;        

               

                Excel.ActiveWorkbook.Save();

               

                Excel.Application.Quit()               

               

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

5.

&НаКлиенте

Процедура ПрочитатьФайлExcel()

               

                ДвоичныеДанные = Новый ДвоичныеДанные("C:\1\test2.xlsx");

               

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

               

                ТабличныйДокумент = ЗагрузитьНаСервере(Адрес);

               

                ТабличныйДокумент.Показать();

               

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

 

&НаСервере

Функция ЗагрузитьНаСервере(Адрес)

               

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

               

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

               

                ДанныеФайла.Записать(ИмяВременногоФайла);

               

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

               

                ТабличныйДокумент.Прочитать(ИмяВременногоФайла);

               

                Возврат ТабличныйДокумент;

                              

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

Эта статья помогла вам?