Управление Excel из 1С без знания команд Excel

Иногда требуется автоматически из 1С обработать некоторый файл Excel используя возможности самого Excel. Кажется, что надо кидаться в Гугл или Яндекс искать описание тех или иных функций Excel, но оказывается, что можно заставить Excel самому писать необходимые программы. Представим, что надо создать книгу Excel, заполнить первый лист номерами от 1 до 20 и сохранить файл. Что делаем:

Записываем макрос Excel

  1. Запускаем Excel, записываем макрос

e_1

2. В появившемся окне нажимаем «Ок» и запись макроса (программы) начата

e_2

3. Заполняем лист нужными нам данными — позиционируем на первую ячейку, в следующую водим формулу (предыдущая ячейка + 1)

e_3

4. Результат вычисления

e_4

5. Хватая за правый нижний угол, автоматически заполняем нижестоящие 18 ячеек

e_5

6. Все, что надо выполнено, останавливаем запись макроса

e_6

7. Для просмотра сгенерированного Excel кода заходим в макросы

 e_7

8. И открываем на редактирование созданный нами макрос

e_11

9.  Программный код макроса

e_8

Его можно напрямую скопировать в 1С, только понадобится немного изменить для совместимости, ниже приведен аналог кода в 1С, а в комментариях приведен код из Excel:

// Range(«A1»).Select
Лист.Range(«A1»).Select();
// ActiveCell.FormulaR1C1 = «1»
Эксель.ActiveCell.FormulaR1C1 = «1»;
//Range(«A2»).Select
Лист.Range(«A2»).Select();
//ActiveCell.FormulaR1C1 = «=1+R[-1]C»
Эксель.ActiveCell.FormulaR1C1 = «=1+R[-1]C»;
//Range(«A2»).Select
Лист.Range(«A2»).Select();
//Selection.AutoFill Destination:=Range(«A2:A20»), Type:=xlFillDefault
Эксель.Selection.AutoFill(Лист.Range(«A2:A20»), 0);
//Range(«A2:A20»).Select
Лист.Range(«A2:A20»).Select();

В качестве примечания следует добавить, что перед обращением к Excel следует создать соответствующий СОМ объект, книгу и лист:

Попытка
     Эксель = новый COMОбъект(«Excel.Application»);
Исключение
     Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
// добавить книгу
Книга = Эксель.WorkBooks.Add();
// добавить лист на книгу
Лист = Книга.WorkSheets.Add();

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

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