Начну свой рассказ.
Попытка подключиться к Excel через COM объект
ExcelApp = Новый COMОбъект("Excel.Application");
приводило к ошибке "Интерфейс не поддерживается".
Если использовать ADO
CтрокаСоединения = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
ИмяФайла + ";Extended Properties=""Excel 8.0;HDR=NО;IMEX=1""";
СоединениеADO = Новый COMОбъект("ADODB.Connection");
СоединениеADO.ConnectionString = СтрокаСоединения;
СоединениеADO.Open();
то возникала ошибка "указанный поставщик не найден".
Сразу оговорюсь, что Microsoft Office на сервере был установлен и при обычном запуске обработки (не в фоновом задании) все проходило на ура.
Так как фоновые задания выполняются от имени пользователя, под которым работает сервер 1С:Предприятие (обычно это USR1CV82), то возникло логичное предположение, то у этого пользователя не достаточно прав. Для эксперимента этому пользователю были выданы права администратора и фоновое задание завершилось успешно. Однако, это был не вариант. Требовались минимально возможные права и я окунулся в мир поиска информации в глобальной сети.
Итак. Первое что удалось выяснить, это то, что пользователю USR1CV82 необходимо дать права на запуск DCOM Microsoft Excel Application (прошу прошения, могу путаться в понятиях, но смысл, что делать, думаю, будет понятен).
Для этого необходимо:
1. Нажать кнопку Пуск и выбрать Панель управления.
2. Дважды щелкнуть значок Администрирование и выбрать пункт Службы компонентов.
3. В левой панели окна "Службы компонентов" дважды щелкнуть пункт Службы компонентов, дважды щелкнуть пункт Компьютеры и выбрать Мой компьютер.
4. Выбрать папку Настройка DCOM.
5. В окне сведений найти объект Microsoft Excel Application, щелкнуть его правой кнопкой и выбрать пункт Свойства (здесь есть подводный камень, с которым я довольно долго промучался - если сервер 64-х разрядный, то и выпуск Office так же должен быть х64, иначе объекта Microsoft Excel Application не будет в списке и права для него мне так и не удалось настроить пока не переустановил Office).
6. Открыть вкладку Безопасность.
7. В разделе Разрешения на запуск выбрать пункт Настроить и нажать кнопку Изменить.
8. Добавить пользователя USR1CV82.
Источник: http://technet.microsoft.com/ru-ru/library/cc778126(WS.10).aspx
Ниже поясняющие скриншоты.
Однако, после произведенных описанных выше настроек фоновое задание так и не заработало.
При работе с COM объектом экземляр Excel успешно создавался, но открыть файл не получалось
ExcelApp = Новый COMОбъект("Excel.Application");
ФайлExcel = ExcelApp.Workbooks.Open(ИмяФайла); // ОШИБКА!
выводилось сообщение об ошибке
Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу "C:\xls_test\test.xls". Это может быть вызвано одной из следующих причин.
• Указан несуществующий файл или путь.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.
Попытки подключиться через ADO выдавало все тоже сообщение об отсутствии поставщика.
Поиски в просторах сети были продолжены и решение таки было найдено:
Необходимо создать папку
- для Windows Server x64
C:\Windows\SysWOW64\config\systemprofile\Desktop
- для Windows Server x86
C:\Windows\System32\config\systemprofile\Desktop
Данное расположение папок указано для Office 2007. Для Office 2010 не зависимо от разрядности платформы необходимо создавать папку C:\Windows\System32\config\systemprofile\Desktop (данный факт так же потратил не мало моего времени). В общем, если создали папку, а ошибки не исчезли, создайте вторую. Так же необходимо дать права на созданную папку пользователю USR1CV82. Практика показала, что достаточно прав, выдаваемых системой по умолчанию.
После проделанных всех настроек на тестовом сервере фоновое задание наконец то прошло успешно.
Однако на рабочем сервере при подключение к Excel через COM меня ждало фиаско - задание просто зависало и завершить его можно было только перезапуском сервера 1С:Предприятия. Зависало в момент открытия файла (ФайлExcel = ExcelApp.Workbooks.Open(ИмяФайла);). Я так предполагаю, что при открытии Excel открывает какое-нибудь окно и ждет ответа пользователя. Но проверить не удалось, так как доступа к рабочему серверу у меня не было и все настройки по моей просьбе на нем производил админ.
В итоге все взелетело с использованием ADO и успешно работает.
Надеюсь, данная статья поможет кому-нибудь съэкономить время при реализации подобных задач.
p.s. Ну и забыл упомянуть, что у пользователя USR1CV82, естественно, должны быть права на обрабатываемые файлы Excel.