Часть 3. Использование COM-серверов Microsoft Office
Основные объекты серверов Excel и Word
Объекты Excel
Объекты Word
Позднее связывание
Раннее связывание
Практика
показывает, что приложения Microsoft
Office (Excel,
Word, Power
Point и т.п.)
являются одними из наиболее часто
используемых Windows-приложений.
Каждое из них является СОМ-сервером, а
следовательно, любой входящий в него объект
может быть использован вашей программой
как собственный.
Существуют два способа обращения к методам и свойствам СОМ-объекта: путем ссылки
на его библиотеку типов (раннее связывание) и по имени (позднее связывание).
Для Object Pascal предпочтительным является раннее связывание, так как в этом
случае компилятор может проконтролировать правильность обращения к свойствам
и методам внешних объектов, а создаваемый им код исполняется, как правило, быстрее.
В то же время базовый язык обращения к серверам Microsoft Office — Visual Basic
for Application (VBA) не поддерживает работу с указателями и, следовательно,
не может использовать интерфейсы. Специально для такого рода языков (помимо
VBA c указателями не работают также языки JavaScript, SmallTalk и некоторые
другие) в технологию СОМ введены диспинтерфейсы, позволяющие обращаться к методам
и свойствам по имени, а не по адресу. При инсталлировании Office можно установить
справку по VBA, в которой детально описываются интерфейсы серверов Microsoft
Office с указанием назначения методов и свойств, а также параметров обращения
к ним. Фактически это единственные доступные программисту документы, на которые
ему следует опираться при программировании доступа к мощным возможностям серверов
Microsoft Office. Замечу, что при стандартном инсталлировании Microsoft Office
справки по VBA не устанавливаются. Если в каталоге Program Files | Microsoft
Office | Office вы не найдете файлов vbaxl8.hlp1
(справка по Excel), vbawrd8.hlp (справка по Word) и т. п., вы должны их
добавить с помощью аплета Пуск | Настройка | Панель управления | Установка и
удаление программ.
В версию 5 Delphi включены компоненты страницы Servers,
позволяющие обращаться к СОМ-объектам этих
серверов с помощью библиотек типов, однако
эти компоненты практически не
документированы. Более того, сами
библиотеки уже внедрены в пакет dclaxserver50,
так что с помощью этой версии Delphi
мне так и не удалось получить их тексты. Во
всех случаях изучение обширных текстов
библиотек (например, файл Excel_TLB.pas
содержит более 20 тыс. строк) мало что дает
даже опытному программисту.
В этом разделе приводятся краткое
описание основных объектов двух наиболее
популярных серверов — Excel
и Word, а
также примеры использования Excel
в стиле VBA
(по имени) и с помощью компонентов страницы Servers.
Поскольку специально для версии MS
Office 97
язык VBA
был существенно расширен, этот материал
нельзя использовать для работы с более
ранними версиями пакета.
Основные объекты серверов Excel и Word
В терминологии VBA
используются
понятия «объект» и «коллекция». Объект —
это обычный интерфейсный объект СОМ,
имеющий свойства, методы и события.
Коллекция — это группа однотипных объектов.
Например, главный объект сервера Excel
— Application
определяет основные свойства и методы
сервера, а коллекция Worksheets
представляет собой
набор табличных страниц в текущей рабочей
книге и т.д. Представленные ниже иерархии
объектов и коллекций взяты из файлов vbaXXX.hlp. В отличие от объектов VCL
они построены не по принципу наследования,
а по функциональной подчиненности.
Объекты Excel
Сервер Excel — это мощный табличный процессор,
реализующий размещение и обработку
различного рода данных (как числовых, так и
текстовых), в том числе построение
на их основе графиков и диаграмм. При работе
с Excel создается
так называемая рабочая книга (файл данных) с
одним или несколькими листами. Все листы
одной рабочей книги могут быть связаны друг
с другом, что позволяет организовать
совместные вычисления над размещенными на
них данными.
На рис. 1 представлена функциональная структура объектов
и коллекций Excel.
Объект Application имеет многочисленные свойства,
методы и события, управляющие сервером в
целом. Только с его помощью, например, можно
визуализировать полнофункциональное окно
текстового процессора. Его центральное
свойство Workbooks предоставляет доступ ко всем
открытым в процессоре рабочим книгам.
У каждой рабочей книги есть
свойства Worksheets
и Charts,
представляющие собой коллекции листов и
диаграмм. Первоначально коллекция Workbooks
пуста. Чтобы создать хотя бы одну рабочую
книгу, нужно обратиться к методу Workbook.Add,
который создает рабочую книгу с
количеством пустых листов, определяемым
значением свойства Application.SheetsInNewWorkbook. У
каждого рабочего листа есть свойство Cells(I,J), определяющее содержимое
ячейки, лежащей на пересечении I-го
ряда с J-м
столбцом (нумерация рядов и столбцов
начинается с 1). Если при обращении к Cells
номера столбца и ряда опущены, считается,
что речь идет о текущем диапазоне ячеек,
заданном значением свойства Worksheets.Range.
Если необходимо изменить умалчиваемые
свойства столбца или ряда, используются
объекты Worksheets.Columns и
Worksheets.Rows. Помимо рабочих листов с рабочей книгой
связывается объект Charts,
представляющий собой коллекцию диаграмм. С
каждой диаграммой связывается объект SeriesCollection,
хранящий данные, по которым строится
диаграмма.
Объекты Word
Текстовый процессор Word
является популярнейшим средством создания
и оформления (форматирования) текстовых
документов. При работе с Word
фундаментальными понятиями являются
документ, абзац и стиль. Документ
определяет файл данных. Абзац — это
совокупность символов, обрамленная
служебными символами конца строк, разрыва
колонки или разрыва раздела. Наконец, стиль
— это совокупность признаков оформления
текста: его шрифт, положение на странице,
выравнивание и т.п. Стиль — непременный
атрибут каждого абзаца, то есть изменение
стиля абзаца автоматически приводит к его
переформатированию. Однако стиль может
изменяться внутри абзаца — для выделения
группы символов шрифтом, цветом символов и (или)
фона и т.п.
На рис. 2 показана функциональная иерархия объектов Word.
Центральный объект Application
имеет такое же назначение, что и
одноименный объект Excel,
– он определяет свойства, методы и события
на уровне всего сервера. Его свойство Documents представляет собой коллекцию открытых
документов. Посредством метода Open этого объекта можно открыть ранее
созданный документ, а метода Add — создать новый документ, основанный на
стандартном шаблоне Normal.dot. Каждый документ имеет коллекцию абзацев
Paragraphs.
С помощью таких методов этого объекта, как Add, InsertParagraph,
InsertParagraphAfter,
InsertParagraphBefore,
можно вставить новый абзац в уже
существующий текст или добавить абзац в
конец документа. В свою очередь, каждый
абзац имеет многочисленные свойства,
позволяющие нужным образом
отформатировать текст. Как и в Excel,
важную роль в иерархии объектов Word
играет объект Range, определяющий диапазон абзацев. Свойство
Text этого объекта содержит текст диапазона.
Позднее связывание
Приведенный ниже пример взят из моей
практики и, думаю, сможет пригодиться и вам.
В нем прайс-лист крупного оптового
поставщика книг создается с помощью Excel.
Необходимость в обращении к Excel возникла по той причине, что прайс-лист
периодически (примерно раз в две недели)
рассылается многочисленным покупателям,
которые составляют на его основе заказы на
поставку книг. У получателей прайс-листов
нет средств прочтения отчетов в
стандартном для Delphi
формате Quick Report
(файлы с расширением qrp). Экспорт прайс-листов в файлы других
форматов не позволяет получать документы
высокого качества, поэтому я решил для
создания прайс-листов использовать
средства Excel.
На рис. 3 показан прайс-лист в окне Excel, а на рис.
4 — вид формы примера на этапе конструирования.
Перед началом работы над проектом следует скопировать все файлы BOOKS.*
в отдельную папку на жестком диске (потребуется чуть больше 800 Кбайт
свободного пространства) и связать с папкой псевдоним BDE BIBLDATA типа Standard.
Эту процедуру упростит программа SetupBooks.exe, расположенная в том же каталоге
CD-ROM.
Начните новый проект и поместите на форму компоненты Query1, Label1, Button1 и ProgressBar1.
Для компонента Query1 измените значение свойства Name на Books, свяжите его
с псевдонимом BIBLDATA и поместите в свойство SQL такой запрос:
SELECT BookID, bName, bAuthor, bPublish, bOpt, bPages, bYear FROM Books WHERE bQuan>0 ORDER BY
bName
Создайте для него все объекты-поля.
В свойство Caption
компонента Label1
поместите значение Щелкните по кнопке Пуск,
чтобы создать таблицу Excel,
в такое же свойство кнопки — значение Пуск и измените имя компонента ProgressBar1 на pb.
В окне кода в разделе private класса TForm1 поместите поле Excel типа Variant.
В предложении uses укажите ссылку на модуль COMObj и напишите следующий обработчик
события OnClick кнопки Button1 (см. листинг 1).
Теперь небольшие пояснения. Переменные Sheet и Range
введены только для сокращения текста
программы: везде вместо Sheet,
например, можно писать Excel.Workbooks[1].Sheets[1]. С версией Delphi 4 поставлялись файлы XLCONST.PAS и XLCONST.DCU, в которых определены используемые в
документации vbaxl8.hlp константы xlXXX.
С версией 5 эти файлы не поставляются,
поэтому я использую их числовые
эквиваленты. Ширина полей печатного
документа Excel
задается во внутренних единицах,
соответствующих приблизительно 3,5 мм, так
что указанные в операторах Sheet.PageSetup.ХХХMargin значения установят левое, нижнее и
правое поля шириной 1,1 см, а верхнее — 1,4 см.
Ширина столбца определяется в символах
текста, умещающегося в столбце без
отсечения.
Переменная Excel
определяет поле класса TForm1. При создании класса в него
автоматически помещается значение VarEmpty. После завершения работы с Excel
пользователь может закрыть его. Но в моей
программе Excel не визуализировался, его работа
проходила «за кулисами», а созданная
таблица записывалась в указанный
пользователем файл с помощью оператора Excel.Workbooks[1].SaveAs(FileName).
После этого Excel закрывался. Поскольку в нашем случае Excel
показывает свое окно, а пользователь может
его не закрыть, полезно написать такой
обработчик события OnDestroy формы:
procedure TForm1.FormDestroy(Sender: TObject); begin if not VarIsEmpty(Excel) then Excel.Quit end;
Запуская пример, помните, что
создание прайс-листа с помощью Excel
— процесс достаточно длительный. На моем
компьютере (400 МГц, 64 Мбайт) он занял около
минуты (для примера — аналогичный прайс-лист
средствами Quick Report
создается менее чем за 2 с). В конце
обработчика в метку lb
помещается общее время работы.
Раннее связывание
Следующий пример в функциональном плане повторяет предыдущий. В нем также с помощью Excel
создается прайс-лист, но на этот раз используется доступ непосредственно через
интерфейсы сервера. Вас ожидает «сюрприз»: время выполнения второго примера
на 40 с больше! Я не смог найти разумного объяснения этому феномену, но оба
примера находятся на сопровождающем диске, так что вы в любой момент можете
убедиться в этом сами.
Поскольку форма второго примера в точности повторяет форму первого, я не буду
объяснять, что нужно сделать для ее создания. Добавьте только на форму компонент
TExcelApplication и настройте его свойства: Name=Excel, AutoConnect=True, AutoQuit=True.
Если вы используете форму предыдущего примера как шаблон, не вставляйте поле
Excel в класс TForm1. Обработчик Button1Click должен выглядеть так (см. листинг
2).
Как видите, он во многом напоминает
обработчик предыдущего примера. Поэтому
остановлюсь на различиях.
При обращении к свойству SheetsInNewWorkbook,
как и во многих других случаях обращения к
интерфейсным свойствам и методам,
требуется указание идентификатора языка
локализации (lcid).
Значением 0 кодируется умалчиваемый язык.
Этот же идентификатор передается вторым
параметром обращения к методу Excel.Workbooks.Add. Первым параметром нужно указать имя
файла (в формате WideString),
если рабочая книга уже была ранее создана,
или «пустой» параметр EmptyParam,
если книга создается впервые.
Все мои попытки работать с объектами Range оказались неудачными. Чтобы вы не
слишком осуждали меня, я поместил
библиотеку типов Excel_TLB.pas
в каталог размещения примера — полистайте
ее на досуге и попробуйте найти нужное
решение для изменения ширины колонок и
полей листа, а также для раскрашивания
диапазона, выравнивания текста и т.п.
Есть свои нюансы и при обращении к
ячейкам. Во-первых, ими владеет объект Application,
а не Sheet.
Во-вторых, обращение к конкретному элементу
коллекции Cells (как и любой другой коллекции) возможно
только через ее свойство Item.
Подводя итоги, еще раз хочу обратить ваше
внимание на то, что по времени выполнения
позднее связывание хотя бы не проигрывает
раннему — во всяком случае, для
рассмотренных примеров. Если учесть, что
единственными доступными подавляющему
большинству программистов документами по
серверам MS
Office
являются справочные файлы vbaXXX.hlp, можно сделать вывод: использование
вариантов (позднее связывание) проще,
удобнее, а главное — намного понятнее, чем
непосредственная работа с интерфейсами (раннее
связывание).
КомпьютерПресс 6’2001
Настройка COM Объекта «Excel.Application» на сервере 1С, настройка поможет обработать большие файлы Excel на сервере 1C, в том числе через фоновые задания.
Та же данная настройка может решить проблему с ошибкой 1С:
ошибка -2147467262(0x80004002): Интерфейс не поддерживается
- Заходим на сервер приложений 1С под локальным админом или администратором домена
- Запускаем DCOMCNFG (Консоль настроек «Службы компонентов»)
- Открываем ветку Корень консоли -> Службы компонентов -> Компьютеры -> Мой компьютер -> Настройка DCOM
- Ищем «Microsoft Excel Application»
- Если запись существует, то переходим к пункту 4
- Закрываем «Службы компонентов»
- Настройка реестра
- Запускаем REGEDIT
- Открываем ветку КомпьютерHKEY_CLASSES_ROOTAppIDEXCEL.EXE, если ее нет, то создаем
- Создаем в ней строковый параметр AppID = {00020812-0000-0000-C000-000000000046}
- Выполняем команду «mmc comexp.msc /32», которая делает то же что и DCOMCONFIG, но позволяет видеть 32 битные компоненты
- После этого в Component Services должен появиться «Microsoft Excel Application»
- Настраиваем свойства DCOM компонента «Microsoft Excel Application»
- Заходим в «Свойства», закладка «Безопасность»
- «Разрешения на запуск и активацию» — Настроить — Изменить
- Добавляем пользователя, под которым запускается агент сервера 1С
- Назначаем ему только следующие права (Разрешить):
- Локальный запуск
- Локальная активация
- «Разрешения на доступ» -Настроить — Изменить
- Добавляем пользователя, под которым запускается агент сервера 1С
- Назначаем ему только следующие права (Разрешить):
- Локальный доступ
- «Разрешения на запуск и активацию» — Настроить — Изменить
- Переходим на вкладку «Удостоверение»
- Выбираем «Запускающий пользователь»
- Заходим в «Свойства», закладка «Безопасность»
- Настройка системных папок
- Папка «C:WindowsSysWOW64configsystemprofileDesktop»
- Проверяем наличие папки , если нет -то создаем
- Заходим в «Свойства» этой папки, закладка «Безопасность»
- Добавляем, если нет, пользователя, под которым запускается агент сервера 1С
- Добавляем права «Чтение» и «Запись»
- Папка «C:WindowsSystem32configsystemprofileDesktop»
- Проверяем наличие папки , если нет -то создаем.
- Заходим в «Свойства» этой папки, закладка «Безопасность»
- Добавляем, если нет, пользователя, под которым запускается агент сервера 1С
- Добавляем права «Чтение» и «Запись»
- Папка «C:WindowsSysWOW64configsystemprofileDesktop»
Бывают ситуации, когда на рабочей станции отсутствуют такие средства взаимодействия с БД как: MS SQL Server Management Studio, Aquafold Aqua Data Studio, DBeaver и т.п., а вероятность их установки в краткосрочной перспективе близка к нолю. В то же время, присутствует острая необходимость подключения к этой самой БД и работы с данными. Как оказалось, на помощь может прийти старый добрый MS Excel.
В моем случае требовалось подключиться к MS SQL Server, однако, MS Excel умеет устанавливать соединение не только с ним, но и с большинством современных БД: MySQL, PostgreeSQL, IBM DB2 и даже Oracle и Teradata, а также с файлами данных CSV, XML, JSON, XLS(X), MDB и другими.
Теперь немного о действиях, совершенных мной с целью подключения к базе:
В новой книге на ленте выбираем «(1) Данные» -> «(2) Получение внешних данных» -> «(3) Из других источников» -> «(4) С сервера SQL Server».
Далее, в окне Мастера подключения к данным, заполняем «(1) Имя сервера» -> «(2) Учетные сведения»[ -> «(3) Имя пользователя» и «Пароль»]. Таким образом, мы сообщаем MS Excel, с каким сервером мы хотим установить соединение и какой метод аутентификации хотим использовать. Я использовал «проверку подлинности Windows», но возможно также указать учетные данные отличные от установленных в Windows.
Выбираем целевую «(1) Базу данных» -> «(2)(3) Определенную таблицу» или «Несколько таблиц» или же базу в целом (тогда оба «чекбокса» оставляем пустыми).
После всех проделанных манипуляций, Мастер подключения предложит сохранить файл подключения. Потребуется задать «(1) Имя файла». Желательно также указать «(2) Описание» и «(3) Понятное имя файла», чтобы спустя время было понятно какой файл подключения к какой базе или таблице обращается.
Теперь выбрать созданное подключение можно будет следующим образом: «(1) Данные» -> «(2) Получение внешних данных» -> «(3) Существующие подключения».
Открыв только что созданное подключение, в случае если вы соединялись с базой в целом, MS Excel опять предложит выбрать одну или несколько конкретных таблиц:
Определив таблицы, MS Excel предложит выбрать «(1) Способ представления данных» и «(2) Куда следует поместить данные». Для простоты я выбрал табличное представление и размещение на уже имеющемся листе, чтобы не плодить новые. Далее следует нажать на «(3) Свойства».
В свойствах подключения, нужно перейти на вкладку «(1) Определение». Здесь можно выбрать «(2) Тип команды». Даже если требуется выгружать лишь одну таблицу без каких-либо связей, настоятельно рекомендую выбрать SQL команду, чтобы иметь возможность ограничить размер выгружаемой таблицы (например, с помощью TOP(n)). Так, если вы попытаетесь выгрузить целиком таблицу базы, это может привести в лучшем случае к замедлению работы MS Excel, а в худшем к падению программы, к тому же – это необоснованная нагрузка на сам сервер базы данных и на сеть. После того как «(3) Текст команды» будет введен и нажата кнопка «ОК», MS Excel предложит сохранить изменения запроса – отвечаем положительно.
В итоге получаем данные прямо из базы, что и требовалось.
Теперь наше подключение будет находиться в книге и доступно в меню «(1) Данные» -> «(2) Подключения».
Как видно из кнопок формы, здесь мы можем:
«(1) Добавить» в книгу новое подключение из уже существующих;
«(2) Удалить» подключение из книги;
Отредактировать «(3) Свойства» подключения;
«(4) Обновить» данные, предоставляемые подключением.
Подытоживая весь вышеописанный опыт, хочется сказать, что конечно же по функционалу и кругу решаемых задач MS Excel не сравнится с такими системами как MS SQL Server Management Studio, Oracle SQL Developer и подобными. Но, в условиях ограниченного времени и доступных инструментов, при необходимости быстро получить доступ к данным из базы, MS Excel вполне справляется.
Обзор
Microsoft Office Excel поддерживает надстройки автоматизации Кроме надстройки для модели компонентных объектов (COM). В этой статье описаны различия между этих двух типов надстройки.
Дополнительные сведения
Надстройки COM
COM-надстройки предоставить разработчику способ расширить функциональные возможности приложений Office для пользовательских задач. Надстройки COM обычно используются для автоматизации работы в ответ на щелчок кнопки панели команд, формы или диалогового окна или некоторые другие события, относящиеся к Excel, таких как открытие или закрытие книги или ввод данных на листах Excel. Функции надстройки COM не может вызываться непосредственно из формул в ячейках в листах.
COM-надстройка представляет собой сервер COM в процессе (ActiveX DLL), который должен реализовывать интерфейс IDTExensibility2 . Все COM-надстройки должен реализовывать каждый из пяти методов этого интерфейса: OnConnection, OnStartupComplete, OnAddinsUpdate, OnBeginShutDownи OnDisconnection.
Когда COM-надстройка установлена на компьютере пользователя, записи реестра создаются для надстройки. Помимо обычной регистрации COM надстройка COM регистрируется для каждого приложения Office, в котором он работает. Надстройки COM используется Excel зарегистрированы в следующем разделе реестра:
HKEY_CURRENT_USERSoftwareMicrosoftOfficeExcelAddins
Этот раздел содержит подраздел для каждого установленного COM-надстройку. Имя подраздела — идентификатор ProgID для надстройки COM. Подраздел для надстройки COM также содержит значения, описывающие COM-надстройки понятное имя и описание и загрузки. Описывает поведение загрузки как надстройка загружается в Excel: загружать при запуске, загружены только, при следующем запуске загружается по требованию или не загружен.
COM-надстройки можно загружать и выгружается посредством пользовательского интерфейса Excel. Чтобы сделать это, выполните следующие действия.
-
В меню Вид выберите команду панели инструментов и выберите команду Настройка.
-
В диалоговом окне панели инструментов перейдите на вкладку Дополнительно . В списке категории выберите Сервис. В списке команды найдите COM-надстройки и перетащите нужную команду в меню или панели команд по вашему выбору. Закройте окно инструментов .
-
Выберите команду надстройки COM , добавленный для отображения в диалоговом окне « надстройки COM ». Диалоговое окно содержит список всех COM-надстройки, которые установлены на вашей системе и надстройки COM, загруженных в настоящий момент выбраны.
COM-надстройки можно загружать и выгружается посредством пользовательского интерфейса Excel. Чтобы сделать это, выполните следующие действия.
-
Нажмите Кнопку Microsoft Office, а затем нажмите кнопку Параметры Excel.
-
Нажмите кнопку Надстройки.
-
В разделе Управлениевыберите команду надстройки COMи нажмите кнопку Перейти .
В диалоговом окне « надстройки COM » перечислены все COM-надстройки, установленные на компьютере. Надстройки COM, загруженных в настоящий момент выбраны.
Дополнительные сведения о COM-надстройки щелкните следующий номер статьи базы знаний Майкрософт:
Методические УКАЗАНИЯ 238228 : построение Office 2000 надстройки COM в Visual Basic
Образец 230689 : Comaddin.exe Office 2000 надстройки COM в Visual C++
Дополнительные сведения см. ниже на веб-сайте корпорации Майкрософт:
Надстройки Office
http://support.microsoft.com/ofd
Автоматизированные надстройки
В дополнение к COM-надстройки Excel поддерживает сборки надстройки в автоматизации автоматизации которые запускаются добавить на COM-надстройки в том, что функции в автоматизации надстройки могут быть вызваны из формул на листах Microsoft Excel. COM-надстройки должны быть в процесс COM-серверов, которые поддерживают интерфейс IDTExtensibility2 ; Однако надстройки автоматизации может быть в процессе или out-of-process COM-серверов и реализации IDTExtensibility2 является необязательным.
Чтобы использовать функции из надстройки автоматизации Excel, выполните следующие действия:
-
В меню Сервис выберите команду Надстройки.
-
Нажмите Автоматизацияв диалоговом окне Надстройки . В списке зарегистрированных серверов COM выберите надстройки автоматизации и нажмите кнопку ОК.
-
Надстройки автоматизации отображается в диалоговом окне « надстройки ». Нажмите кнопку ОК , чтобы закрыть диалоговое окно Add-Ins .
Чтобы использовать функции из автоматизированных надстроек в Excel 2007 и более поздних версиях, выполните следующие действия.
-
Нажмите Кнопку Microsoft Office, а затем нажмите кнопку Параметры Excel.
-
Нажмите кнопку Надстройки.
-
В разделе Управлениевыберите пункт надстройки Excelи нажмите кнопку Перейти.
-
Нажмите Автоматизацияв диалоговом окне Надстройки . В списке зарегистрированных серверов COM выберите команду надстройки автоматизации и нажмите кнопку ОК.
Надстройки автоматизации отображается в диалоговом окне « надстройки ». Нажмите кнопку ОК , чтобы закрыть диалоговое окно Add-Ins .
При внесении дополнения в список в диалоговом окне Надстройки или при выборе и снятии надстройки в списке, Excel сохраняет изменения в реестре. Во-первых Microsoft Excel использует следующий параметр реестра, чтобы определить ли автоматизации надстройки в списке надстройки загружается:
Excel 2002
Key: HKEY_CURRENT_USERSoftwareMicrosoftOffice10.0ExcelOptions
String: OPENx
Sample Value: /A "ServerName.ClassName"Excel 2003
Key: HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0ExcelOptions
String: OPENx
Sample Value: /A "ServerName.ClassName"
Excel 2007
Key: HKEY_CURRENT_USERSoftwareMicrosoftOffice12.0ExcelOptions
String: OPENx
Sample Value: /A "ServerName.ClassName"
Примечание: Изменение номера версии Microsoft Office на основе версии, которую вы используете.
Параметр /a, используемый в строковое значение старого и нового в Excel и используется специально для загрузки надстройки автоматизации. Все модели автоматизации надстройки загружаются по требованию; Нет нет параметра, можно изменить поведение загрузки надстройки автоматизации.
При снятии надстройки автоматизации, перечисленных в диалоговом окне « Надстройки » подраздел с именем, равным ProgID надстройки создается в следующем разделе реестра:
HKEY_CURRENT_USERSoftwareMicrosoftOffice10.0ExcelAdd-in Manager
Excel 2003:
HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0ExcelAdd-in Manager
HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0ExcelAdd-in Manager
Этот параметр реестра гарантирует, что даже в том случае, если вы решили не загружать надстройки автоматизации, которые были добавлены в список надстроек, сохраняются в списке.
Дополнительные сведения об автоматизации надстройки см. ниже статьях базы знаний Майкрософт:
285337 Практическое руководство: создание надстройки автоматизации Visual Basic для функции листа Excel
Дополнительные сведения см. ниже на веб-сайте корпорации Майкрософт:
Надстройки Office
http://support.microsoft.com/ofd
Автоматизированные надстройки, реализующие интерфейс IDTExtensibility2
Как упоминалось ранее надстройки автоматизации может реализовать интерфейс IDTExtensibility2, но это не требуется в порядке для вызова функций в надстройку из рабочего листа Excel. Если требуется надстройки автоматизации получает ссылку на экземпляр Excel, можно реализовать интерфейс IDTExtensibility2 и использовать параметр приложения OnConnection для автоматизации Excel.
Надстройки автоматизации, реализующий
IDTExtensibility2 могут быть загружены в интерфейсе пользователя Excel в диалоговом окне « Надстройки COM » и диалоговом окне « Надстройки ». Ниже описаны поведения автоматизации надстройки на основании она загружается в одном или обоих этих диалоговых окон.
-
Загрузить только в диалоговом окне « надстройки ».
Надстройка загружается по требованию. Функции надстройки может вызываться из формул на листе.
-
Загрузить только в диалоговом окне « надстройки COM ».
Надстройка загружается как надстройки COM и его поведение при загрузке определяется на основе параметров в реестре. Функции в окне не может вызываться из формул на листе.
-
Загружен в диалоговом окне « надстройки COM » и диалоговом окне « надстройки ».
Два отдельных экземпляра надстройки загружаются. Один экземпляр загружается как надстройки COM и другого экземпляра будет загружен в виде надстройки автоматизации. Экземпляр надстройки COM использует режим загрузки указано в реестре; Загружает экземпляр надстройки автоматизации по требованию. Два экземпляра работают независимо друг от друга и не имеют глобальные переменные.
Поскольку надстройки автоматизации загружаются по требованию, Excel может попытаться загрузить надстройку, находящегося в режиме редактирования ячейки. Таким образом при разработке надстройки автоматизации, поддерживающий интерфейс IDTExtensibility2, должен быть осторожны, чтобы не предпринимать попытки изменить состояние программы Excel при загрузке надстройки. Дополнительные сведения см. ниже статьи базы знаний Майкрософт:
Ошибка 284876 : Excel происходит сбой надстройки автоматизации загрузки
(c) Корпорация Майкрософт, 2001, все права защищены. Взносы в Лори б. Тернер, корпорация Майкрософт.
Нужна дополнительная помощь?

Что такое DCOM
Distributed Component Object Model (DCOM) — программная архитектура, разработанная компанией Microsoft для распределения приложений между несколькими компьютерами в сети. Программный компонент на одной из машин может использовать DCOM для передачи сообщения (его называют удаленным вызовом процедуры) к компоненту на другой машине. DCOM автоматически устанавливает соединение, передает сообщение и возвращает ответ удаленного компонента. С данным компонентов мы уже знакомились, когда решали ошибку 10016.
Настройка DCOM для Excel.Application
И так у меня есть виртуальная машина под управлением Windows Server 2012 R2, на ней установлены серверные компоненты 1С, есть задача для Excel.Application модуля, настроить DCOM компоненты.
Для выполнения нижеописанных действий, вам будут необходимы права локального администратора, на том сервере, где все будет выполняться
Нам необходимо открыть в панели управления Windows, компонент «Службы компонентов».
Полный путь «Панель управленияВсе элементы панели управленияАдминистрированиеСлужбы компонентов»
Либо можете, через окно выполнить ввести DCOMCNFG, откроется, тоже самое.
В службах компонентов (Component Services) откройте ветку:
Компоненты — Мой компьютер — Настройка DCOM — Microsoft Excel Application (Component Services — Computers — My computer — DCOM Config)
Если по каким-то причинам у вас нет пункта Microsoft Excel Application, откройте реестр Windows, найдите ветку: HKEY_CLASSES_ROOTAppIDEXCEL.EXE, если ее нет, то создаем ее. В ней должен быть ключ REG_SZ со значением {00020812-0000-0000-C000-000000000046}.
КОМУ ЛЕНЬ самому создавать, то можете скачать данный ключ реестра у меня. Просто запустите потом и подтвердите, что согласны добавить. Затем откройте командную строку от имени администратора и выполните команду:
У вас откроется mmc оснастка «Службы компонентов», которая делает то же что и DCOMCONFIG, но позволяет видеть 32 битные компоненты. В результате этих манипуляций компонент Microsoft Excel Application у вас должен появиться. Открываем свойства Microsoft Excel Application.
Переходим на вкладку «Безопасность (Secutity)». В пункте «Разрешения на запуск и активацию (Launch and Activation Permissions)», выберите «Настроить (Customize )» и изменить. Вам нужно добавить сюда учетную запись, от имени которой запускается служба 1С и предоставить ей права:
- Локальный запуск — Local Launch
- Локальная активация — Local Activation
Далее переходим к пункту «Разрешения на доступ (Access Permissions)» и так же меняем их. Добавьте там ту же учетную запись, от имени которой запускается сервис 1С, и дайте ей права «Локальный доступ (Local Access)». Сохраните настройки.
Закрываем окно служб компонентов, теперь для того, чтобы закончит ьнастройку DCOM для 1С и Microsoft Excel Application, вам необходимо дать права на две папки.
Вам нужно убедиться, что у вас есть две папки:
C:WindowsSysWOW64configsystemprofileDesktop
и
C:WindowsSystem32configsystemprofileDesktop
Если их нет, то создайте их. Далее даем полные права на эту папку, для все той же учетной записи, сервиса 1С. Надеюсь, что было не сложно, и вы разобрались в конфигурировании DCOM для компонента Excel.Application в связке с 1С. С вами был Семин Иван, автор и основатель IT портала Pyatilistnik.org,
Для работы с Excel файлами в системе 1C существуют определенные технологии. Организовать взаимодействие системы 1C с внешней программой MS Excel можно через COM-объект «Excel.Application». Также есть возможность наладить взаимодействие с Excel из 1C используя технологию ADO.
Данный пример демонстрирует работу с использованием «Excel.Application». Для работоспособности данного примера на компьютере обязательно должно быть установлено программное обеспечение MS Excel.
Прочитать из существующего Excel Файла
Процедура ПрочитатьСуществующийExcelФайл(ПутьКФайлу)Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.DisplayAlerts = 0;
Excel.Visible = 0;
Исключение
Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена");
Возврат;
КонецПопытки; Книга
= Excel.Workbooks.Open(ПутьКФайлу);
КоличествоЛистов = Книга.Sheets.Count;//Перебор листов
Для НомерЛиста = 1 По КоличествоЛистов Цикл Лист
= Книга.Sheets(НомерЛиста);
КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
КоличествоКолонок = Лист.Cells(1, 1).SpecialCells(11).Column;//Перебор строк
Для НомерСтроки = 1 По КоличествоСтрок Цикл//Перебор колонок
Для НомерКолонки = 1 По КоличествоКолонок Цикл
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;
//Выполнение действий с полученным значением
//...
//...
КонецЦикла;КонецЦикла;КонецЦикла; Excel
.Workbooks.Close();
Excel.Application.Quit();КонецПроцедуры
Записать в существующий Excel Файл
Процедура ЗаписатьСуществующийExcellФайл(ПутьКФайлу)Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.DisplayAlerts = 0;
Excel.Visible = 0;
Исключение
Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена");
Возврат;
КонецПопытки; Книга
= Excel.Workbooks.Open(ПутьКФайлу); Лист
= Книга.Sheets(1);
//Установить значение в ячейку
Лист.Cells(1, 1).Value = "Тестовое значение";
Книга.Save(); Excel
.Workbooks.Close();
Excel.Application.Quit();КонецПроцедуры
Создать новый Excel Файл
Процедура СоздатьНовыйExcellФайл(ПутьКФайлу)Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.DisplayAlerts = 0;
Excel.Visible = 0;
Исключение
Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена");
Возврат;
КонецПопытки; //Автоматически будут созданы три листа
Книга = Excel.WorkBooks.Add();
//Получить первый лист
Лист = Книга.Sheets(1);
//Установить значение в ячейку
Лист.Cells(1, 1).Value = "Тестовое значение";Попытка
Книга.SaveAs(ПутьКФайлу);
Исключение
Сообщить(ОписаниеОшибки() + " не удалось сохранить файл");
КонецПопытки; Excel
.Workbooks.Close();
Excel.Application.Quit();КонецПроцедуры
Настройка DCOM для Excel.Application в 1С, за минуту
Настройка DCOM для Excel.Application в 1С, за минуту

Что такое DCOM
Distributed Component Object Model (DCOM) — программная архитектура, разработанная компанией Microsoft для распределения приложений между несколькими компьютерами в сети. Программный компонент на одной из машин может использовать DCOM для передачи сообщения (его называют удаленным вызовом процедуры) к компоненту на другой машине. DCOM автоматически устанавливает соединение, передает сообщение и возвращает ответ удаленного компонента. С данным компонентов мы уже знакомились, когда решали ошибку 10016.
Настройка DCOM для Excel.Application
И так у меня есть виртуальная машина под управлением Windows Server 2012 R2, на ней установлены серверные компоненты 1С, есть задача для Excel.Application модуля, настроить DCOM компоненты.
Нам необходимо открыть в панели управления Windows, компонент «Службы компонентов».
Либо можете, через окно выполнить ввести DCOMCNFG, откроется, тоже самое.
В службах компонентов (Component Services) откройте ветку:
Если по каким-то причинам у вас нет пункта Microsoft Excel Application, откройте реестр Windows, найдите ветку: HKEY_CLASSES_ROOTAppIDEXCEL.EXE, если ее нет, то создаем ее. В ней должен быть ключ REG_SZ со значением .
КОМУ ЛЕНЬ самому создавать, то можете скачать данный ключ реестра у меня. Просто запустите потом и подтвердите, что согласны добавить. Затем откройте командную строку от имени администратора и выполните команду:
У вас откроется mmc оснастка «Службы компонентов», которая делает то же что и DCOMCONFIG, но позволяет видеть 32 битные компоненты. В результате этих манипуляций компонент Microsoft Excel Application у вас должен появиться. Открываем свойства Microsoft Excel Application.
Переходим на вкладку «Безопасность (Secutity)». В пункте «Разрешения на запуск и активацию (Launch and Activation Permissions)», выберите «Настроить (Customize )» и изменить. Вам нужно добавить сюда учетную запись, от имени которой запускается служба 1С и предоставить ей права:
- Локальный запуск — Local Launch
- Локальная активация — Local Activation
Далее переходим к пункту «Разрешения на доступ (Access Permissions)» и так же меняем их. Добавьте там ту же учетную запись, от имени которой запускается сервис 1С, и дайте ей права «Локальный доступ (Local Access)». Сохраните настройки.
Закрываем окно служб компонентов, теперь для того, чтобы закончит ьнастройку DCOM для 1С и Microsoft Excel Application, вам необходимо дать права на две папки.
Вам нужно убедиться, что у вас есть две папки:
Работа с файлами Excel
MS Excel давно стал стандартом для работы с электронными таблицами. В статье рассматриваются способы программной выгрузки и загрузки из 1С в файлы Excel.
Существует несколько способов программной работы с файлами Excel из 1С. Каждый из них имеет свои преимущества и недостатки.
Обмен через табличный документ
Данный способ простой. Его суть заключается в том, что объект ТабличныйДокумент имеет методы:
- Записать ( , ) для выгрузки данных в файл;
- Прочитать ( , ) для загрузки данных из файла.
Внимание!
Метод Записать () доступен как на клиенте, так и на сервере. Метод Прочитать () доступен только на стороне сервера. Необходимо помнить об этом
при планировании клиент-серверного взаимодействия.
Рассмотрим пример сохранения табличного документа в файл. Необходимо любым способом создать и заполнить объект ТабличныйДокумент, а выгрузка в файл осуществляется всего лишь одной строкой:
ТабДок . Записать ( ПутьКФайлу , ТипФайлаТабличногоДокумента . XLSX );
Здесь ТабДок — сформированный табличный документ, ПутьКФайлу — имя файла для выгрузки, ТипФайлаТабличногоДокумента.XLSX — формат создаваемого файла. Поддерживаются следующие форматы Excel:
- XLS95 — формат Excel 95;
- XLS97 — формат Excel 97;
- XLSX — формат Excel 2007.
Загрузка из файла осуществляется также достаточно просто:
ТабДок = Новый ТабличныйДокумент ;
ТабДок . Прочитать ( ПутьКФайлу , СпособЧтенияЗначенийТабличногоДокумента.Значение );
Здесь ПутьКФайлу — путь к загружаемому файлу Excel. СпособЧтенияЗначенийТабличногоДокумента.Значение определяет, каким образом нужно интерпретировать данные, считываемые из исходного документа. Доступны варианты:
Обмен через OLE
Обмен через технологию OLE automation, пожалуй, самый распространенный вариант программной работы с файлами Excel. Он позволяет использовать весь функционал, предоставляемый Excel, но отличается медленной скоростью работы по сравнению с другими способами. Для обмена через OLE требуется установка MS Excel:
- На компьютере конечного пользователя, если обмен происходит на стороне клиента;
- На компьютере сервера 1С:Предприятие, если обмен происходит на стороне сервера.
Пример выгрузки:
// Создание COM-объекта
Эксель = Новый COMОбъект ( «Excel.Application» );
// Отключение вывода предупреждений и вопросов
Эксель . DisplayAlerts = Ложь;
// Создание новой книги
Книга = Эксель . WorkBooks . Add ();
// Позиционирование на первом листе
Лист = Книга . Worksheets ( 1 );
// Запись значения в ячейку
Лист . Cells ( НомерСтроки , НомерКолонки ). Value = ЗначениеЯчейки ;
// Сохранение файла
Книга . SaveAs ( ИмяФайла );
// Закрытие Эксель и освобождение памяти
Эксель . Quit ();
Эксель = 0 ;
Примеры чтения:
// Создание COM-объекта
Эксель = Новый COMОбъект ( «Excel.Application» );
// Открытие книги
Книга = Эксель . Workbooks . Open ( ПутьКФайлу );
// Позиционирование на нужном листе
Лист = Книга . Worksheets ( 1 );
// Чтение значения ячейки, обычно здесь располагается цикл обхода ячеек
ЗначениеЯчейки = Лист . Cells ( НомерСтроки , НомерКолонки ). Value ;
// Закрытие книги
Книга . Close ( 0 );
// Закрытие Эксель и освобождение памяти
Эксель . Quit ();
Эксель = 0 ;
// Открытие книги
Книга = ПолучитьCOMОбъект ( ПутьКФайлу );
// Позиционирование на нужном листе
Лист = Книга . Worksheets ( 1 );
// Чтение значения ячейки, обычно здесь располагается цикл обхода ячеек
ЗначениеЯчейки = Лист . Cells ( НомерСтроки , НомерКолонки ). Value ;
// Закрытие книги
Книга . Application . Qui t ();
Для обхода всех заполненных строк листа Excel можно использовать следующие приемы:
// —— ВАРИАНТ 1 ——
КоличествоСтрок = Лист . Cells ( 1 , 1 ). SpecialCells ( 11 ). Row ;
Для НомерСтроки = 1 По КоличествоСтрок Цикл
ЗначениеЯчейки = Лист . Cells ( НомерСтроки , НомерКолонки ). Value ;
КонецЦикла;
// —— ВАРИАНТ 2 ——
НомерСтроки = 0 ;
Пока Истина Цикл
НомерСтроки = НомерСтроки + 1 ;
ЗначениеЯчейки = Лист . Cells ( НомерСтроки , НомерКолонки ). Value ;
Если НЕ ЗначениеЗаполнено ( ЗначениеЯчейки ) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Вместо последовательного обхода всех строк листа можно выгрузить все данные в массив и работать с ним. Такой подход будет быстрее при чтении большого объема данных:
ВсегоКолонок = Лист . Cells ( 1 , 1 ). SpecialCells ( 11 ). Column ;
ВсегоСтрок = Лист . Cells ( 1 , 1 ). SpecialCells ( 11 ). Row ;
Область = Лист . Range ( Лист . Cells ( 1 , 1 ), Лист . Cells ( ВсегоСтрок , ВсегоКолонок ));
Данные = Область . Value . Выгрузить ();
В таблице ниже приведены наиболее востребованные свойства и методы для работы с Excel через OLE:
Для того, чтобы узнать какое свойство нужно менять или какой метод вызвать можно воспользоваться макросами Excel. Если записать макрос с требуемыми действиями, то после можно посмотреть программный код на VBA записанного макроса.
Использование COMSafeArray
При выгрузке больших объемов данных из 1С в Excel для ускорения можно использовать объект COMSafeArray. Согласно определению из синтакс-помощника, COMSafeArray — объектная оболочка над многомерным массивом SafeArray из COM. Позволяет создавать и использовать SafeArray для обмена данными между COM-объектами. Проще говоря, это массив значений, который можно использовать для обмена между приложениями по технологии OLE.
// Создание COMSafeArray
МассивКом = Новый COMSafeArray ( «VT_Variant» , ВсегоКолонок , ВсегоСтрок );
// Заполнение COMSafeArray
Для Стр = 0 По ВсегоСтрок — 1 Цикл
Для Кол = 0 По ВсегоКолонок — 1 Цикл
МассивКом . SetValue ( Кол , Стр , Значение );
КонецЦикла;
КонецЦикла;
// Присвоение области листа Excel значений из COMSafeArray
Лист . Range ( Лист . Cells ( 1 , 1 ), Лист . Cells ( ВсегоСтрок , ВсегоКолонок )). Value = МассивКом ;
Обмен через ADO
Файл Excel при обмене через ADO представляет собой базу данных, к которой можно обращаться при помощи SQL-запросов. Установка MS Excel не требуется, но обязательно наличие драйвера ODBC, при помощи которого будет осуществляться доступ. Используемый драйвер ODBC определяется при указании строки соединения к файлу. Обычно требуемый драйвер уже установлен на компьютере.
Обмен через ADO заметно быстрее обмена через OLE, но при выгрузке нет возможности использовать функционал Excel для оформления ячеек, разметки страниц, задания формул и т.д.
Пример выгрузки:
// Создание COM-объекта для соединения
Соединение = Новый COMОбъект ( «ADODB.Connection» );
// Установка строки соединения
Соединение . ConnectionString = «
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=» + ИмяФайла + «;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;» ;
Соединение . Open (); // Открытие соединения
// Создание COM-объекта для команды
Команда = Новый COMОбъект ( «ADODB.Command» );
Команда . ActiveConnection = Соединение ;
// Присвоение текста команды для создания таблицы
Команда . CommandText = «CREATE TABLE [Лист1] (Колонка1 char(255), Колонка2 date, Колонка3 int, Колонка4 float)» ;
Команда . Execute (); // Выполнение команды
// Присвоение текста команды для добавления строки таблицы
Команда . CommandText = «INSERT INTO [Лист1] (Колонка1, Колонка2, Колонка3, Колонка4) values (‘абвгдеё’, ‘8/11/2017’, ‘12345’, ‘12345,6789’)» ;
Команда.Execute(); // Выполнение команды
// Удаление команды и закрытие соединения
Команда = Неопределено;
Соединение . Close ();
Соединение = Неопределено ;
Для создания нового листа и формирования его структуры можно воспользоваться объектами ADOX.Catalog и ADOX.Table. В этом случае код примет вид:
// Создание COM-объекта для работы с книгой
Книга = Новый COMОбъект ( «ADOX.Catalog» );
Книга . ActiveConnection = Соединение ;
// Создание COM-объекта для работы со структурой данных на листе
Таблица = Новый COMОбъект ( «ADOX.Table» );
Таблица . Name = «Лист1» ;
Таблица . Columns . Append ( «Колонка1» , 202 );
Таблица . Columns . Append ( «Колонка2» , 7 );
Таблица . Columns . Append ( «Колонка3» , 5 );
Таблица . Columns . Append ( «Колонка4» , 5 );
// Создание в книге листа с описанной структурой
Книга . Tables . Append ( Таблица );
Таблица = Неопределено;
Книга = Неопределено;
В приведенном примере в методе
Таблица . Columns . Append ( «Колонка1» , 202 );
во втором параметре указывается тип колонки. Параметр необязательный, вот некоторые значения типа колонки:
- 5 — adDouble;
- 6 — adCurrency;
- 7 — adDate;
- 11 — adBoolean;
- 202 — adVarWChar;
- 203 — adLongVarWChar.
Пример чтения:
// Создание COM-объекта для соединения
Соединение = Новый COMОбъект ( «ADODB.Connection» );
// Установка строки соединения
Соединение . ConnectionString = «
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=» + ИмяФайла + «;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;» ;
Соединение . Open (); // Открытие соединения
// Создание COM-объекта для получения выборки
Выборка = Новый COMОбъект ( «ADODB.Recordset» );
ТекстЗапроса = «SELECT * FROM [Лист1$]» ;
// Выполнение запроса
Выборка . Open ( ТекстЗапроса , Соединение );
// Обход результата выборки
Пока НЕ Выборка . EOF () Цикл
ЗначениеКолонки1 = Выборка . Fields . Item ( «Колонка1» ). Value ; // Обращение по имени колонки
ЗначениеКолонки2 = Выборка . Fields . Item ( 0 ). Value ; // Обращение по индексу колонки
Выборка . MoveNext ();
КонецЦикла;
Выборка . Close ();
Выборка = Неопределено;
Соединение . Close ();
Соединение = Неопределено;
В строке соединения параметр HDR определяет как будет восприниматься первая строка на листе. Возможны варианты:
- YES — первая строка воспринимается как названия колонок. К значениям можно обращаться по имени и по индексу колонки.
- NO — первая строка воспринимается как данные. К значениям можно обращаться только по индексу колонки.
В приведенных примерах рассмотрено лишь несколько объектов ADO. Объектная модель ADO состоит из следующих объектов:
Выгрузка без программирования
Для сохранения данных из 1С в Excel не всегда целесообразно прибегать к программированию. Если в режиме Предприятия пользователь может отобразить требуемые для выгрузки данные, то, их возможно сохранить в Excel без программирования.
Для сохранения табличного документа (например, результата отчета) можно вызвать команду Сохранить или Сохранить как… главного меню.
В открывшемся окне требуется выбрать каталог, имя и формат сохраняемого файла.
Для сохранения данных динамических списков (например, списка номенклатуры) необходимо:
- Вывести данные в табличный документ при помощи команды Еще ⇒ Вывести список…;
- Сохранить табличный документ в требуемый формат.
Остались вопросы?
Спросите в комментариях к статье.
Инструкция по загрузке из Excel в 1C для программиста
Нужно загрузить большой объем данных из Экселя в 1С? Настроить постоянную загрузку накладных и товаров? Обратитесь к нам! Оставьте заявку в форме выше или позвоните нам по телефону +7 499 350 29 00.
Несомненно, одним из самых распространенных способов массового занесения информации в информационную систему является загрузка информации в 1С 8.3 из Excel. Ниже я рассмотрю пошаговое создание обработки загрузки данных и дам ссылку на скачивание её.
Данная инструкция написана для программистов, для пользователей 1С скорее подойдут следующие статьи:
- Загрузка данных штатными методами в 1С — Загрузка из Excel на примере прайс-листа.
- Если вам необходимо загрузить номенклатуру в 1С — пример загрузки товаров в 1С 8.3.
Самые популярные данные, которые требуются для загрузки в 1С из Excel:
- номенклатура и её штрих-коды, в том числе с картинками;
- накладные от поставщика;
- прайс-листы от контрагентов;
- начальные остатки по складам или бухгалтерскому учету.
MS Excel — программа для работы с электронными таблицами, созданная компанией Microsoft. Она предоставляет возможности экономико-статистических расчетов, графические инструменты и язык макропрограммирования VBA. Excel является одним из наиболее популярных приложений в мире.
Обработку мы будем делать универсальную, подобно той, что мы делали для загрузки файлов csv в 1С.
1. Создание обработки загрузки и её формы
Тут мы особо ничего не будем придумывать, сделаем поле ввода для выбора файла на диске, кнопку «Прочитать» для чтения файла и заполнения табличной части.
2 Обработчик выбора файла
Тут всё сделаем как в загрузке из CSV:
При нажатии на выбор файла необходимо отображать диалог выбора файла в ОС. Сделать это очень просто. Необходимо на обработчик “НачалоВыбора” в поле ввода файла указать следующий код:
3 Обработка данных из Excel и загрузка в 1С 8.3
Для начала мы очищаем информацию в таблице, находим файл на диске, подключаемся к Excel через COM-объект и проводим все технические настройки:
Получите 267 видеоуроков по 1С бесплатно:
После того как мы получили все данные из файла, мы считываем 1 строку файла и генерируем колонки на форме с наименованиями из файла:
После формирования колонок считываем тело файла эксель и построчно заносим данные в табличное поле:
В результате мы получаем загруженные данные из excel c такими же колонками:
Не забудьте закрыть Эксель в 1С после выполнения процедур с помощью кода:
Универсальную загрузку из excel в 1C можно бесплатно скачать тут.
Обратите внимание, эта обработка написана в режиме «обычного приложения 1С».
Если у Вас всё же возникли проблемы с загрузкой, Вы можете обратиться за помощью к опытному программисту 1C.
Видеоурок по загрузке товаров в 1С из файлов Excel:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Обучение программированию на 1С
Использование COM-соединения, выгрузка в Excel через COM-объект Excel.Application
Вообще COM-объекты используют для соединения информационной базы 1С с файлом Word, Excel, Outlook или любой другой программой, поддерживающей данный интерфейс обмена данными. В этой статье рассмотрим задачу выгрузки/загрузки данных из/в MS Excel. Чтобы это осуществить воспользуемся COM-соединением и объектом Excel.Application. Для примера возьмём задачу выгрузки/загрузки данных о номенклатуре. Пример рассмотрим ниже.
COM-соединение
Что же такое COM-соединение? Component Object Model (или COM) – это технология (фирмы Microsoft) взаимодействующих компонентов, которые одновременно могут быть использованы в разных приложениях. При этом весь функционал соответствующего компонента наследуется внутрь разрабатываемого приложения. В нашем случае COM-объект Excel.Application используется внутри кода 1С для операций с файлом книги MS Excel.
Объект Excel.Application
У объекта Excel.Application существует ряд методов, которые нам могут пригодиться для реализации нижепоставленной задачи:
- ОбъектExcel.WorkBooks.Open(ИмяФайла) – Открытие книги MS Excel
- ОбъектExcel.ActiveWorkbook.Close() – Закрытие текущей книги
- ОбъектExcel.Quit() – Закрытие COM-объекта
- ОбъектExcel.Sheets(ИмяЛиста) – Получает лист книги
- ЛистExcel.Cells(НачалоСтрока, НачалоСтолбец) – Ячейка таблицы на данном листе
- ЛистExcel.Range(Ячейка1, Ячейка2) – Выделенная область
- ЯчейкаExcel.Value – Значение ячейки таблицы
- ЯчейкаExcel.Text – Текст ячейки таблицы
Постановка задачи
Итак, предположим, что в обработке 1С у нас имеется табличная часть, состоящая из следующих колонок:
Необходимо реализовать 2 функционала (сделать на форме 2 основные кнопки):
- Выгрузка табличной части в подготовленный файл MS Excel
- Загрузка табличной части из файла.
Алгоритм выгрузки/загрузки в MS Excel
Алгоритм выгрузки следующий:
- Выгружаем табличную часть в таблицу значений
- Создаём новый COM-объект Excel.Application
- Выбираем файл, открываем файл книги MS Excel
- Переходим на заданный лист книги
- Выгружаем данные в файл
- Закрываем книгу, выходим из COM-объекта.
Алгоритм загрузки следующий:
- Создаём новый COM-объект Excel.Application
- Выбираем файл, открываем файл книги MS Excel
- Переходим на заданный лист книги
- Загружаем данные из файла в таблицу значений
- Закрываем книгу, выходим из COM-объекта
- Таблицу значений выгружаем в табличную часть.
Операция выгрузки и загрузки данных о номенклатуре происходит в заранее подготовленный шаблон MS Excel.
Пример кода 1С
Код 1С я постарался разделить на отдельные функции, чтобы, скопировав, с ними можно было работать где угодно. На форме обработки 1С были созданы 3 кнопки:
В итоге в реализации алгоритма получились следующие основные процедуры и функции 1С:
- ПолучитьExcel – Получает COM-объект MS Excel;
- ЗакрытьExcel – Закрывает использование COM-объекта MS Excel;
- ПолучитьЛистExcel – Получает лист книги Excel;
- ДобавитьТабличныйДокументВExcel – Добавляет табличный документ на лист Excel (нужно для выгрузки данных);
- ПрочитатьОбластьИзExcel – Читает область ячеек с листа Excel (нужно для загрузки данных);
- ШиринаЛистаExcel – Ширина листа Excel;
- ВысотаЛистаExcel – Высота листа Excel;
- ПреобразоватьТДвТЗ – Преобразует табличный документ в таблицу значений;
- ПреобразоватьТЗвТД – Преобразует таблицу значений в табличный документ;
Для начала приведу вспомогательную функцию для открытия/сохранения файла на диске:
Грамотная загрузка из Excel в 1С
Многим 1сникам не понятен единственно верный путь чтения Excel-файлов.
Если файл Excel содержит только одну страницу, то его можно прочитать методом Прочитать табличного документа. И записать в Excel файл табличный документ тоже можно из 1С.
Файлы Excel, пользователь, кстати, может открыть и посмотреть в 1С.
Но у метода Прочитать есть недостаток — он криво воспринимает некоторые даты, как ни читай — текстом или значениями. Будем надеяться, со временем эти банальные глюки 1с все же починят. А пока надо применять свои руки, т.е. читать через старый добрый Excel.Application, методика позволяет также читать книги с несколькими листами.
Важно, что читать нужно на клиенте. На сервере Excel запускается от имени пользователя, под которым работает служба 1С-сервера, на практике в 50% случаев админы не могут корректно настроить работу COM-приложения. Поэтому лучше прочитать весь файл на клиенте и передать его в виде массива структур.
Привожу пример чтения обычного файла, содержащего 12 листов с накладными среднего размера. 6 409 ячеек прочитались за 25 секунд. 256 ячеек в секунду — не быстро, но все же быстрее чем ручками?
Для ускорения можно использовать чтение методом COMSafeArray, данные считываются практически мгновенно, но об этом в другой раз. Поэкспериментируйте сами. Правда, первое измерение двухмерного массива получаются колонки, потом строки. Учитывая, что 1С не умеет быстро транспонировать массивы, нужно так и обрабатывать данные.
Ну и еще один штрих — многие пользователи работают в терминале и не ставят на сервер Excel по лицензионным соображениям. С файлами Excel может работать и Open Office, в том числе и по COM-объекту. Так что в планах написать функцию загрузки для Open Office.
Текст функции под катом:
Функция ЗагрузитьExcelФайлВМассивЛистов ( ИмяФайла , ЗНАЧ СоответствиеФильтраЛистов = Неопределено)
//СоответствиеФильтраЛистов — соответствие содержащее числа с номерами листа (начиная с единицы)
//Или названия листов в виде строки.
//Возвращается массив структур с полями:
// Номер — номер листа с единицы
// Имя — имя листа строкой
// Строк — количество строк
// Колонок — количество колонок
// Ячейки — двумерный массив колонок, первое измерение — строка, второе — колонка
МассивЛистов = Новый Массив (); //Это масс
Эксель = New COMObject ( «Excel.Application» );
Эксель . visible = false;
Книга = Эксель . Workbooks . Open ( ИмяФайла );
Для НомерЛиста = 1 To Книга . Sheets . Count Цикл
Лист = Книга . Sheets ( НомерЛиста );
ИмяЛиста = Лист . Name ;
Если СоответствиеФильтраЛистов <> Неопределено Тогда
Если СоответствиеФильтраЛистов [ НомерЛиста ] = Неопределено
И СоответствиеФильтраЛистов [ ИмяЛиста ] = Неопределено
Тогда
Продолжить; //Если лист грузить не надо
КонецЕсли;
КонецЕсли;
КоличествоСтрок = Лист . UsedRange . Rows . Count ;
КоличествоКолонок = Лист . UsedRange . Columns . Count ;
Ячейки = Новый Массив ( КоличествоСтрок , КоличествоКолонок );
Для Строка = 1 По КоличествоСтрок Цикл
Для Колонка = 1 По КоличествоКолонок Цикл
Ячейки [ Строка — 1 ][ Колонка — 1 ] = Лист . Cells ( Строка , Колонка ). Value ;
КонецЦикла;
КонецЦикла;
СтруктураЛиста = Новый Структура ();
СтруктураЛиста . Вставить ( «Строк» , КоличествоСтрок );
СтруктураЛиста . Вставить ( «Колонок» , КоличествоКолонок );
СтруктураЛиста . Вставить ( «Ячейки» , Ячейки );
СтруктураЛиста . Вставить ( «Номер» , НомерЛиста );
СтруктураЛиста . Вставить ( «Имя» , ИмяЛиста );
МассивЛистов . Добавить ( СтруктураЛиста );
























