Произошла исключительная ситуация (Microsoft Office Excel): Невозможно получить свойство Open класса Workbooks
При разработке в 1С, при попытке выполнить открытие COM-объекта Microsoft Excel на серверной базе данных 1С появляется ошибка «Произошла исключительная ситуация (Microsoft Office Excel): Невозможно получить свойство Open класса Workbooks».
Запуск обработки, вызвавшей данную ошибку, производится на серверной операционной системе Microsoft Windows 2012. Также возможна при запуске на ОС Windows 2008 Server. Права пользователя полные. Причем, запуск на операционной системе не относящейся к семейству серверных происходит без возникновения исключительной ситуации.
Сообщить(«Выгрузка в файл Microsoft Excel…»); Путь= КаталогВременныхФайлов() + «FILENAME.xls»; Файл= Новый Файл(Путь); Если Файл.Существует() = 0 Тогда ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.Записать(Путь, ТипФайлаТабличногоДокумента.XLS); КонецЕсли; Попытка ExcelПриложение = Новый COMОбъект(«Excel.Application»); Исключение Сообщить(«Ошибка при загрузке Microsoft Excel.» + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат; КонецПопытки; ExcelФайл = ExcelПриложение.WorkBooks.Open(Путь); ExcelЛист = ExcelФайл.Worksheets(1); |
Возникновение ошибки происходит на предпоследней строке кода.
Решение для устранения исключительной ситуации:
Для нормальной работы MS Office, папка «Desktop» должна находиться в каталоге «systemprofile» системного каталога ОС. Причем, Windows 2003 имеет в своем составе такие папки.
Поэтому необходимо их создать в каталоге «Windows» операционной системы.
— для Windows 2008 Server x64:
C:WindowsSysWOW64configsystemprofileDesktop
— для Windows 2008 Server x86:
C:WindowsSystem32configsystemprofileDesktop
Оцените статью:
Загрузка…
Если Вы заметили ошибку, то выделите ее мышью и нажмите Ctrl+Enter
Ошибка работы 1С 8 с Excel: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу
Описание ошибки:
Проявила себя в клиент-серверной базе. Релиз платформы 1С: Предприятие 8.3.13.1644.
Найденные решения:
Полная формулировка ошибки:
{Доработки Документ.УстановкаЦенНоменклатуры.Форма.Доп_ФормаИмпортXLS.Форма(83)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу ‘C:1C_ArhivТест загрузка прайсов[имя_файла].xlsx’. Это может быть вызвано одной из следующих причин.
• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.
При доработке в расширении для конфигурации 1С: Комплексная автоматизация 8, ред. 2, которая должна загружать данные из файлов Excel и при попытке выполнения в коде РабочаяКнига = ExcelПриложение.WorkBooks.Open(ФормаИмпортXLS.ИмяФайла);. Что удивительно, но в более ранней редакции Комплексной, 1.1, эта проблема не возникала в этом же коде, хотя обе базы на одном сервере.
Проблема оказалась нова для автора этого текста только в 2020 году, хотя самой проблеме достаточно много времени (более 5 лет на момент написания). В обсуждении данной ошибки на сайте infostart.ru «Ошибка открытия файла Excel на сервере» обсуждается несколько предложений по решению проблемы, среди которых наиболее популярный вариант решения. Так же там много попутных предложений по настройке прав на стороне сервера, если вдруг популярный вариант окажется не актуальным.
Популярность этого варианта подтверждается исчерпывающим обсуждением и вот на этом ресурсе: «v8.x: [РЕШЕНО] Ошибка при вызове метода контекста (Open) при работе с Excel»
Проблема была рещена данным простым решением, но обращу внимание на то, что данное действие должно быть выполнено на сервере, а не на локальном рабочем месте.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
23-09-2020
Журавлев А.С.
(Сайт azhur-c.ru)
Mikhail Volkov
14.02.19 — 18:22
При открытии (сохранении) отчета, сформированного в Альфа-Авто, в Excel 2010 стала появляться Неизвестная ошибка:
{ОбщаяФорма.Отчет.Форма(962)}: Ошибка при вызове метода контекста (Open)
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»);
по причине:
Неизвестная ошибка
Вроде на форуме 1С-Рарус нашел решение подобной проблемы https://rarus.ru/forum/messages/forum7/topic10978/message62444/#message62444, но замена расширения у файла tmpxls.xls на xlsx мне не помогла:
Произошла исключительная ситуация (Microsoft Excel): Не удается открыть файл «tmpxls.xlsx», так как формат или расширение этого файла являются недопустимыми. Убедитесь, что файл не поврежден и расширение его имени соответствует его формату
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xlsx»); //+МВ 14.02.2019 xls дает Неизвестная ошибка
по причине:
Произошла исключительная ситуация (Microsoft Excel): Не удается открыть файл «tmpxls.xlsx», так как формат или расширение этого файла являются недопустимыми. Убедитесь, что файл не поврежден и расширение его имени соответствует его формату
А настройках безопасности Excel затрудняюсь… Дело в том, что КаталогВременныхФайлов(), в который пишется tmpxls.xls, находится D:UsersmvAppDataLocalTemp3. Не знаю, как его назначает система? А пытаюсь добавить его в Надежное расположение, и не дает, говорит не является допустимым!? https://jpegshare.net/e7/32/e7329ffaad896b0109bb8f5689f1e368.jpg.html
Как побороть проблему?
OldCondom
1 — 14.02.19 — 18:27
Так измени код, где он там путь выбирает.
OldCondom
2 — 14.02.19 — 18:27
вместо КаталогВременныхФайлов() подставь свое
Mikhail Volkov
3 — 14.02.19 — 19:32
(2) Подставил в Надежное расположение D:1с-tempmv, прописал в коде: КаталогВременныхФайловExcel = «D:1с-tempmv»; вместо КаталогВременныхФайлов(). Теперь:
{ОбщаяФорма.Отчет.Форма(962)}: Ошибка при вызове метода контекста (Записать)
ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайловExcel + «tmpxls.xls», ТипФайлаТабличногоДокумента.XLS);
по причине:
Ошибка при выполнении файловой операции ‘D:1с-tempmvtmpxls.xls’. -2147287037(0x80030003): Путь %1 не найден.
МимохожийОднако
4 — 14.02.19 — 19:48
Присвой путь какой-нибудь переменной и убедись, что значение из отладчика является реальным и доступным
Garykom
5 — 14.02.19 — 19:52
>стала появляться Неизвестная ошибка
Признавайтесь что меняли что стала ошибка появляться? Одмины с правами на сервере не игрались?
Mikhail Volkov
6 — 14.02.19 — 20:21
(5) Говорят ничего, только обновления ставились.
_Дайвер_
7 — 14.02.19 — 20:25
(6) бздят
Mikhail Volkov
8 — 15.02.19 — 06:51
(2) > не поленился и проверил, что проблема именно в данной настройке — в коде жестко поменял КаталогВременныхФайлов() на тестовую «D:Temp» + прописал ее в доверенные (Excel дал добавить)
Такое решение проблемы возможно для сетевых пользователей, работающих каждый на своем компьютере (под ХР или 2003). А у меня Альфа-Авто на сервере-терминале 2008R2, где каждому пользователю назначаются свои папки, в т.ч. временные. Мне назначена D:UsersmvAppDataLocalTemp, причем mv — Mikhail Volkov. Наверняка в системе, где назначаются эти папки (не нашел где?) прописывается %UserName%. Мне сисамин написал: Чтоб не создавать под каждого пользователя его подкаталог используй примерно такую конструкцию:
set up=d:1C-Temp
set un=%UserName%
set ud=%UserDnsDomain%
set КаталогВременныхФайловExcel=»%up%%un%.%ud%»
if not exist %КаталогВременныхФайловExcel% md %КаталогВременныхФайловExcel%
Как ее прописать в 1С?
Garykom
9 — 15.02.19 — 07:06
(8) Ты понимаешь что сервер 1С запускается от другого юзера не от того что клиент 1С ?
Или у вас там файловая база?
Mikhail Volkov
10 — 15.02.19 — 08:03
(9) Рабочая база SQL, а отлаживаю в файловой копии — одна и та же ошибка:
{ОбщаяФорма.Отчет.Форма(963)}: Ошибка при вызове метода контекста (Open)
Excel.Workbooks.Open(КаталогВременныхФайловExcel);
по причине:
Неизвестная ошибка
и для расширения xls, и для xlsx.
Где в системе назначается КаталогВременныхФайлов()? Хочу ее поменять, хотя бы под собой для проверки.
Mikhail Volkov
11 — 15.02.19 — 10:27
К https://jpegshare.net/e7/32/e7329ffaad896b0109bb8f5689f1e368.jpg.html
Каталог D:UsersmvAppDataLocalTemp3 и D:UsersmvAppDataLocalTemp не дает сохранить в Надежное расположение. А папку D:UsersmvAppDataLocal дало с галочкой «Также доверять всем вложенным папкам». Но Неизвестная ошибка осталась. Видимо добавить КаталогВременныхФайлов() в Надежное расположение расположение мало… что-то еще. А что?
Mikhail Volkov
12 — 16.02.19 — 05:22
Сисадмины удалили все обновления после 13.02.2019. К сожалению не помогло, Неизвестная ошибка осталась.
hhhh
13 — 16.02.19 — 06:40
(10) попробуй тогда
Excel.Workbooks.Open(КаталогВременныхФайловExcel + «tmpxls.xlsx»);
или
Excel.Workbooks.Open(КаталогВременныхФайловExcel + «tmpxls.xlsx»);
МимохожийОднако
14 — 16.02.19 — 06:41
Используй ПолучитьИмяВременногоФайла()
Потом переименовывай куда удобно
Mikhail Volkov
15 — 16.02.19 — 10:43
(13) Пробовал — ошибка в (0): «Не удается открыть файл «tmpxls.xlsx», так как формат или расширение этого файла являются недопустимыми…» из-за того, что в команде: ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + «tmpxls.xls», ТипФайлаТабличногоДокумента.XLS); заменил только одно расширение. А оба заменил на xlsx, то как прежде «Неизвестная ошибка».
Necessitudo
16 — 16.02.19 — 22:13
Может таки покажешь полный код, а не будешь кусочки вываливать?
Mikhail Volkov
17 — 17.02.19 — 07:14
(16) Одна из функций (самая короткая) без каких либо изменений (всего их 4):
// Открыть отчет в формате Excel
Процедура ОткрытьВExcelТабличныйДокумент(Excel, ДокументРезультат) Экспорт
ДокументРезультат.Записать(КаталогВременныхФайлов() + «tmpxls.xls», ТипФайлаТабличногоДокумента.HTML);
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»);
tmpBook = Excel.Workbooks.Item(Excel.Workbooks.Count);
КнигаExcel = Excel.Workbooks.Add();
ЛистExcel = КнигаExcel.WorkSheets.Item(1);
КнигаExcel.Colors = tmpBook.Colors;
tmpBook.Sheets(1).Cells.Copy(ЛистExcel.Cells);
tmpBook.Close();
КнигаExcel.Activate();
ЛистExcel.Activate();
Excel.Visible = 1;
КонецПроцедуры
hhhh
18 — 17.02.19 — 07:32
(17) почему тип html?
Mikhail Volkov
19 — 17.02.19 — 08:47
(18) Другая, чуть подлиннее:
// Процедура открывает в MS Excel табличный документ или сводную таблицу
Процедура ДействияФормыОткрытьВExcel(Кнопка)
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
Исключение
Сообщить(«ОШИБКА! Приложение MS Excel отсутствует или недостаточно прав доступа!
| — » + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
Возврат;
КонецПопытки;
// Откроем табличный документ
ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + «tmpxls.xls», ТипФайлаТабличногоДокумента.XLS);
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»);
tmpBook = Excel.Workbooks.Item(Excel.Workbooks.Count);
КнигаExcel = Excel.Workbooks.Add();
КнигаExcel.Colors = tmpBook.Colors;
tmpBook.Sheets(1).Copy(КнигаExcel.WorkSheets(1));
ЛистExcel = КнигаExcel.WorkSheets.Item(1);
//tmpBook.Sheets(1).Cells.Copy(ЛистExcel.Cells);
tmpBook.Close();
//ЛистExcel.Name=ЭтаФорма.ОбъектПредставление;
Если ЭлементыФормы.ТабличныйДокумент.ОриентацияСтраницы=ОриентацияСтраницы.Портрет Тогда
ЛистExcel.PageSetup.Orientation = 1;
Иначе
ЛистExcel.PageSetup.Orientation = 2;
КонецЕсли;
ПолеСлева=ЭлементыФормы.ТабличныйДокумент.ПолеСлева/25.4;
ПолеСправа=ЭлементыФормы.ТабличныйДокумент.ПолеСправа/25.4;
ПолеСверху=ЭлементыФормы.ТабличныйДокумент.ПолеСверху/25.4;
ПолеСнизу=ЭлементыФормы.ТабличныйДокумент.ПолеСнизу/25.4;
ЛистExcel.PageSetup.LeftMargin = Excel.Application.InchesToPoints(ПолеСлева);
ЛистExcel.PageSetup.RightMargin = Excel.Application.InchesToPoints(ПолеСправа);
ЛистExcel.PageSetup.TopMargin = Excel.Application.InchesToPoints(ПолеСверху);
ЛистExcel.PageSetup.BottomMargin = Excel.Application.InchesToPoints(ПолеСнизу);
КнигаExcel.Activate();
ЛистExcel.Activate();
Excel.Visible = 1;
Excel = «»;
КонецПроцедуры // ДействияФормыОткрытьВExcel()
hhhh
20 — 17.02.19 — 09:50
(17) здесь уберите HTML
ДокументРезультат.Записать(КаталогВременныхФайлов() + «tmpxls.xls», ТипФайлаТабличногоДокумента.HTML);
давайте эти эксперименты на потом.
Mikhail Volkov
21 — 18.02.19 — 06:14
А типовых конфигурациях: УПП, КА1, КА2 есть подобные функции открытия в MS Excel табличного документа или отчета (не использую)? Чтобы понять: эта проблема чисто Альфа-Авто, или безопасности MS Excel 2010…
Mikhail Volkov
22 — 18.02.19 — 16:55
Внес изменения в (19):
// Процедура открывает в MS Excel табличный документ или сводную таблицу
Процедура ДействияФормыОткрытьВExcel(Кнопка)
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
Исключение
Сообщить(«ОШИБКА! Приложение MS Excel отсутствует или недостаточно прав доступа!
| — » + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
Возврат;
КонецПопытки;
// Откроем табличный документ
ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + «tmpxls.xls», ТипФайлаТабличногоДокумента.XLS);
ОшибкаОткрытия = Ложь; //+МВ 18.02.2019
Попытка
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»);
Исключение
Сообщить(«Ошибка открытия Excel файла: » + КаталогВременныхФайлов() + «tmpxls.xls
| — » + ОписаниеОшибки(), СтатусСообщения.Внимание);
ОшибкаОткрытия = Истина;
КонецПопытки; //-МВ
tmpBook = Excel.Workbooks.Item(Excel.Workbooks.Count);
КнигаExcel = Excel.Workbooks.Add();
КнигаExcel.Colors = tmpBook.Colors;
tmpBook.Sheets(1).Copy(КнигаExcel.WorkSheets(1));
ЛистExcel = КнигаExcel.WorkSheets.Item(1);
//tmpBook.Sheets(1).Cells.Copy(ЛистExcel.Cells);
tmpBook.Close();
//ЛистExcel.Name=ЭтаФорма.ОбъектПредставление;
Если ЭлементыФормы.ТабличныйДокумент.ОриентацияСтраницы=ОриентацияСтраницы.Портрет Тогда
ЛистExcel.PageSetup.Orientation = 1;
Иначе
ЛистExcel.PageSetup.Orientation = 2;
КонецЕсли;
ПолеСлева=ЭлементыФормы.ТабличныйДокумент.ПолеСлева/25.4;
ПолеСправа=ЭлементыФормы.ТабличныйДокумент.ПолеСправа/25.4;
ПолеСверху=ЭлементыФормы.ТабличныйДокумент.ПолеСверху/25.4;
ПолеСнизу=ЭлементыФормы.ТабличныйДокумент.ПолеСнизу/25.4;
ЛистExcel.PageSetup.LeftMargin = Excel.Application.InchesToPoints(ПолеСлева);
ЛистExcel.PageSetup.RightMargin = Excel.Application.InchesToPoints(ПолеСправа);
ЛистExcel.PageSetup.TopMargin = Excel.Application.InchesToPoints(ПолеСверху);
ЛистExcel.PageSetup.BottomMargin = Excel.Application.InchesToPoints(ПолеСнизу);
КнигаExcel.Activate();
ЛистExcel.Activate();
Excel.Visible = 1;
Если ОшибкаОткрытия Тогда //+МВ 18.02.2019
Попытка
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»);
Исключение
Сообщить(«Повторная ошибка открытия Excel файла: » + КаталогВременныхФайлов() + «tmpxls.xls
| — » + ОписаниеОшибки(), СтатусСообщения.Внимание);
ЗапуститьПриложение(«explorer » + КаталогВременныхФайлов());
КонецПопытки;
КонецЕсли; //-МВ
Excel = «»;
КонецПроцедуры // ДействияФормыОткрытьВExcel()
Теперь открываются 2 Excel одинаковых файла: Книга1 и tmpxls [Режим совместимости]! При этом 1 ошибка: Ошибка открытия Excel файла: D:UsersmvAppDataLocalTemp2tmpxls.xls
— {ОбщаяФорма.ПечатнаяФормаДокументов.Форма(46)}: Ошибка при вызове метода контекста (Open): Неизвестная ошибка
Получается, что при 1-й попытке файл tmpxls не готов к открытию (исполнению Excel.Workbooks.Open)? Когда его можно открывать, после какой команды?
AllJoke
23 — 18.02.19 — 17:23
Он у вас должен в исключение попасть.
AllJoke
24 — 18.02.19 — 17:23
Попытка
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»);
если это не работает, тогда в исключение
Исключение
Сообщить(«Повторная ошибка открытия Excel файла: » + КаталогВременныхФайлов() + «tmpxls.xls
| — » + ОписаниеОшибки(), СтатусСообщения.Внимание);
ЗапуститьПриложение(«explorer » + КаталогВременныхФайлов());
AllJoke
25 — 18.02.19 — 17:25
Первый раз не получилось открыть, ну и пусть. Откроем второй раз. Зачем?
Попытка
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»);
Исключение
Сообщить(«Ошибка открытия Excel файла: » + КаталогВременныхФайлов() + «tmpxls.xls
| — » + ОписаниеОшибки(), СтатусСообщения.Внимание);
ОшибкаОткрытия = Истина;
КонецПопытки; //-МВ
………………..
Попытка
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»);
Исключение
Сообщить(«Повторная ошибка открытия Excel файла: » + КаталогВременныхФайлов() + «tmpxls.xls
| — » + ОписаниеОшибки(), СтатусСообщения.Внимание);
ЗапуститьПриложение(«explorer » + КаталогВременныхФайлов());
КонецПопытки;
AllJoke
26 — 18.02.19 — 17:27
ОшибкаОткрытия = Ложь; //+МВ 18.02.2019
Попытка
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»);
Исключение
Сообщить(«Ошибка открытия Excel файла: » + КаталогВременныхФайлов() + «tmpxls.xls
| — » + ОписаниеОшибки(), СтатусСообщения.Внимание);
Excel = Неопределено;
Возврат;//ОшибкаОткрытия = Истина;
КонецПопытки; //-МВ
И ещё надо глянуть запущены ли процессы Эксель на сервере. Возможно оин заняли ваш файл «tmpxls»
Mikhail Volkov
27 — 18.02.19 — 18:17
(24) При повторном открытии можно без попытки, открывается без проблем.
(25) Как зачем: при первой попытке tmpxls.xls еще не готов к открытию (я так понимаю). Открываем в конце функции… может можно раньше, но где?
(26) Открываю другой отчет, возникает ошибка: {ОбщаяФорма.ПечатнаяФормаДокументов.Форма(43)}: Ошибка при вызове метода контекста (Записать)
ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + «tmpxls.xls», ТипФайлаТабличногоДокумента.XLS);
по причине:
Ошибка совместного доступа к файлу ‘D:UsersmvAppDataLocalTemp2tmpxls.xls’. -2147287008(0x80030020): Ресурс занят.
Раньше такого не было, по несколько отчетов в Excel открывал. Не помню как назывались, может: Книга1, Книга2, Книга3… а не tmpxls.xls? Если tmpxls.xls с 1-м отчетом закрыть, то нет этой ошибки, открывается tmpxls.xls [Режим совместимости] и Книга2 со 2-м отчетом.
Mikhail Volkov
28 — 19.02.19 — 07:37
2 открытых файла: tmpxls.xls [Режим совместимости] и Книга1 не нужны. Нужен только Книга1. После ее создания следует команда: tmpBook.Close(); но она в моем случае не действует, поскольку команда Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»); в первой попытке не сработала. Решил ее вставить во 2-ю попытку:
Если ОшибкаОткрытия Тогда //+МВ 18.02.2019
Попытка
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»);
tmpBook.Close(); // Закрывает объект
Исключение
Сообщить(«Повторная ошибка открытия Excel файла: » + КаталогВременныхФайлов() + «tmpxls.xls
| — » + ОписаниеОшибки(), СтатусСообщения.Внимание);
ЗапуститьПриложение(«explorer » + КаталогВременныхФайлов());
КонецПопытки;
КонецЕсли; //-МВ
Дало ошибку: Повторная ошибка открытия Excel файла: D:UsersmvAppDataLocalTemp2tmpxls.xls
— {ОбщаяФорма.ПечатнаяФормаДокументов.Форма(87)}: Ошибка при вызове метода контекста (Close): Неизвестная ошибка
Как мне открыть Книга1 (не записана в файл) без файла tmpxls.xls?
Mikhail Volkov
29 — 19.02.19 — 11:31
(21) Перенес функцию (19) из Альфа-Авто в УПП/КА1, та же самая ошибка:
{ОбщийМодуль.УправлениеОтчетами.Модуль(1753)}: Ошибка при вызове метода контекста (Open)
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»);
по причине:
Неизвестная ошибка
Функция кривая или дело в Excel?
Mikhail Volkov
30 — 19.02.19 — 19:03
Функция кривая: после записи файла tmpxls.xls, и перед его открытием, нужно включать видимость:
ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + «tmpxls.xls», ТипФайлаТабличногоДокумента.XLS);
Excel.Visible = 1; //+dvs 19.02.2019 д.б. в этом месте, иначе не работает.
Excel.Workbooks.Open(КаталогВременныхФайлов() + «tmpxls.xls»);
Mikhail Volkov
31 — 04.03.19 — 15:17
Озадачили меня: хотят Excel и весь Microsoft Office заменить бесплатным Libre Office 6.4.1.1. Возможно, как к примеру будет выглядеть процедура ОткрытьВExcelТабличныйДокумент() в (17)?
-
20.12.2016, 13:59
#1
Иногда оказывает помощь
COM-объект и Excel
Создаю COM-объект и пытаюсь открыть файл Excel:
ex=Новый ComОбъект(«Excel.Application»);
ex.WorkBooks.Open(Файл);
Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:Ошибка при вызове метода контекста (Open)
ex.WorkBooks.Open(Файл);
по причине:
Неизвестная ошибкаСталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
Если что-то с Excel, то что?
-
20.12.2016, 15:25
#2
Гордость форума PRO
Re: COM-объект и Excel
Сообщение от lilyapo
Создаю COM-объект и пытаюсь открыть файл Excel:
ex=Новый ComОбъект(«Excel.Application»);
ex.WorkBooks.Open(Файл);
Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:Ошибка при вызове метода контекста (Open)
ex.WorkBooks.Open(Файл);
по причине:
Неизвестная ошибкаСталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
Если что-то с Excel, то что?Ты открываешь Апликайшон — а как ты это открываешь (интерактивно или же на сервере)? Опять же у тебя какой эксель (32-х разрядный или же 64-х разрядный) и в каком контексте пытаешься открыть (в 32-х разрядном клиенте или же на стороне 64-х разрядного сервера)?
-
20.12.2016, 15:55
#3
Иногда оказывает помощь
Re: COM-объект и Excel
Все очень просто.
Файловая база.
Excel 2010. Файл лежит на том же диске, что и база и открывающая его обработка.
Никакого клиент-серверного режима нет.
-
20.12.2016, 16:31
#4
Гордость форума PRO
Re: COM-объект и Excel
А попробуй «завернуть» в Попытку
Что выдаст?
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
Excel.WorkBooks.Open(ИмяФайла);
Состояние(«Обработка файла Microsoft Excel…»);
Исключение
Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
-
20.12.2016, 17:04
#5
Иногда оказывает помощь
Re: COM-объект и Excel
Все то же самое.
Ошибка при вызове метода контекста (Open): Неизвестная ошибка
ОписаниеОшибки()=»»
-
20.12.2016, 17:25
#6
Гордость форума PRO
Re: COM-объект и Excel
[QUOTE=lilyapo;469920]Все то же самое.
Ошибка при вызове метода контекста (Open): Неизвестная ошибкапохоже у тебя проблема с com-ом. А у тебя Excel нормально в реестре зареген? Ты его видишь в com-объектах?
Попробуй подключиться к открытому «ручками» экселю
Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна
Excel = ПолучитьCOMОбъект(, «Excel.Application»);
При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.
-
Пользователь сказал cпасибо:
-
20.12.2016, 17:41
#7
Иногда оказывает помощь
Re: COM-объект и Excel
Все получилось!
Спасибо огромное, фантастика!:dance:
-
13.09.2018, 12:20
#8
Гость форума
Re: COM-объект и Excel
Сообщение от lilyapo
Все получилось!
Спасибо огромное, фантастика!:dance:Пожалуйста. расскажите, как решили проблему.
Такая же ситуация на одном из компьютеров. Перепробовали все рекомендации из интернета. Ничего не помогает.
-
13.09.2018, 13:10
#9
Иногда оказывает помощь
Re: COM-объект и Excel
Попробуй подключиться к открытому «ручками» экселю
Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна
Excel = ПолучитьCOMОбъект(, «Excel.Application»);
При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.
Так я справилась с проблемой
Nikoly |
|
||
---|---|---|---|
При работе на сервере, регламентного задания, обработка открывает через Excel = Новый COMОбъект(«Excel.Application»); Excel.Application.Workbooks.Open(ИмяФайла) документ, мне выдается ошибка: Изменено 16.07.11 15:32:46 по причине: Другая категория |
Yandex |
|
||
---|---|---|---|
Nikoly |
|
||
---|---|---|---|
http://forum.mista.ru/topic.php?id=522217 |
Подсказка: Вы можете приложить к ответу файл или изображение щелкнув по значку или в редакторе. |
Встала задача. По электронной почте приходят письма с вложениями таблиц Excel. Получение почты производится встроенным клиентом 1С фоновым заданием. Необходимо было по расписанию несколько раз в день извлекать из новых писем вложения и загружать из них данные. Тут я столкнулся с проблемой — работать с Excel в фоновом задании ни через COM, ни через ADO не удавалось. Вываливалась ошибка. Нигде в сети четкого решения проблемы я не обнаружил. В итоге, собирая информацию по крупицам из разных источников (порой и вовсе не связанных с 1с) и нескольких дней мучений все же я решил данную проблему. Ниже я опишу свое решение, чтобы помочь таким же, как я )
Начну свой рассказ.
Попытка подключиться к 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 est.xls». Это может быть вызвано одной из следующих причин.
• Указан несуществующий файл или путь.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.
Попытки подключиться через ADO выдавало все тоже сообщение об отсутствии поставщика.
Поиски в просторах сети были продолжены и решение таки было найдено:
Необходимо создать папку
- для Windows Server x64
C:WindowsSysWOW64configsystemprofileDesktop
- для Windows Server x86
C:WindowsSystem32configsystemprofileDesktop
Данное расположение папок указано для Office 2007. Для Office 2010 не зависимо от разрядности платформы необходимо создавать папку C:WindowsSystem32configsystemprofileDesktop (данный факт так же потратил не мало моего времени). В общем, если создали папку, а ошибки не исчезли, создайте вторую. Так же необходимо дать права на созданную папку пользователю USR1CV82. Практика показала, что достаточно прав, выдаваемых системой по умолчанию.
Источник: http://social.msdn.microsoft.com/Forums/en-US/b81a3c4e-62db-488b-af06-44421818ef91/excel-2007-automation-on-top-of-a-windows-server-2008-x64
После проделанных всех настроек на тестовом сервере фоновое задание наконец то прошло успешно.
Однако на рабочем сервере при подключение к Excel через COM меня ждало фиаско — задание просто зависало и завершить его можно было только перезапуском сервера 1С:Предприятия. Зависало в момент открытия файла (ФайлExcel = ExcelApp.Workbooks.Open(ИмяФайла);). Я так предполагаю, что при открытии Excel открывает какое-нибудь окно и ждет ответа пользователя. Но проверить не удалось, так как доступа к рабочему серверу у меня не было и все настройки по моей просьбе на нем производил админ.
В итоге все взелетело с использованием ADO и успешно работает.
Надеюсь, данная статья поможет кому-нибудь съэкономить время при реализации подобных задач.
p.s. Ну и забыл упомянуть, что у пользователя USR1CV82, естественно, должны быть права на обрабатываемые файлы Excel.
Решение данной проблемы. Дело действительно оказалось в настройках безопасности Excel.
Файл->Параметры->Центр управления безопасностью->Параметры центра упраления безопасностью. Выбираете пункт «Надежные расположения» и добавляете папку, куда 1с-кой пишутся темповские файлы экселя (в конфигураторе; КаталогВременныхФайлов() -> «C:Temp»).
Однако тут возникла 2-я проблема. Данную папку Excel ни в какую не захотел добавлять в доверенные (не поленился и проверил, что проблема именно в данной настройке — в коде жестко поменял КаталогВременныхФайлов() на тестовую «D:Temp» + прописал ее в доверенные (Excel дал добавить); сформированный Excel файл без ошибок вывелся в АА5 (~4500 строк)).
2-я проблема оказалась более серьезной. Как я понял, Excel считает темповские файлы в принципе не «заслуживающими» доверия (на системном уровне). Лечится это правками соответствующих веток реестра. Но при большом количестве пользователей (100 и более) — не наш вариант.
В итоге пришел к решению проблемы корректировкой кода, причем есть 2 варианта:
изменить папку выгрузки (см. вышеописанное)
Код |
---|
// --> //ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + "tmpxls.xls", ТипФайлаТабличногоДокумента.XLS); //Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls"); КаталогВременныхФайлов = "D:Temp"; ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов + "tmpxls.xls", ТипФайлаТабличногоДокумента.XLS); Excel.Workbooks.Open(КаталогВременныхФайлов + "tmpxls.xls"); // <-- |
или формат формируемых файлов (с «новыми» расширениями проблема не возникает)
Код |
---|
// --> //ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + "tmpxls.xls", ТипФайлаТабличногоДокумента.XLS); //Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls"); ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов + "tmpxls.xlsx", ТипФайлаТабличногоДокумента.XLSX); Excel.Workbooks.Open(КаталогВременныхФайлов + "tmpxls.xlsx"); // <-- |
P.S. Считаю данную проблему достаточной для обращения к разработчикам и внесения ими доработок, т.к. ПП эволюционируют (2003, 2007, 2010, 2013, 2016) и раз предусмотрена интеграция, должно быть и предусмотрена работа с различными версиями ПП (например анализ ПП и формирования расширения файла в зависимости от этого).
P.S.S. Тем более на форуме поддержки Microsoft, касательно данной проблемы, посоветовали обращаться к разработчикам сторонних ПП, чтобы они учитывали все эти нюансы (т.е. опять возвращаемся к разработчикам АА).
Изменено: Алексей Коломыйченко — 11.03.2016 17:46:35
-
Доброе время суток.
Проблема заключается в следующем внешняя обработка загрузки из Эксель на личном компьютере работает нормально, но на РДП выдает ошибку «ошибка при вызове метода контекста (open)» там и там база файловая.Переделал все что нашел в инете
— создал папку C:WindowsSysWOW64configsystemprofileDesktop ;
— Настройки DCOM добавил пользователя;
— И проделал «А решается это так:
на сервере убиваем excel (taskkill /im excel.exe /f)
открываем оснастку «Службы компонентов» (Пуск->Администрирование->Службы компонентов)
в ней раскрываем ветку Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM
справа в списке находим Microsoft Excel Application, открываем Свойства, вкладка Удостоверение, выбираем «Текущий пользователь», ОК.
Готово»
И все равно выскакиваю по ошибке.
Есть у кого то предложение что можно сделать еще. -
Online
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.889
- Симпатии:
- 1.029
- Баллы:
- 204
покпжите текст ошибки полностью.
из всего там нужно только последнее действие.что будет, если интерактивно запустить эксель и открыть этот же файл?
-
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(35)}: Ошибка при вызове метода контекста (Open)
КНИГА = Excel.WorkBooks.Open(ИмяФайла);
по причине:
Неизвестная ошибка -
Запустил интерактивно и все равно ошибка
Опечатки нет пере набрал Open раз 10 -
Online
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.889
- Симпатии:
- 1.029
- Баллы:
- 204
при интерактивном открытии файла, что говорит?
-
Доброго,
Клиент какой запускается на RDP, 32/64 бит ? -
Добрый день.При интерактивном открытии ничего не пишет.
RDP клиент запускается 64 и офис 64 -
Похожая проблема вылечилась использованием 32 битного клиента (мы можем это себе позволить),
еще, как вариант, я делал через формирование файла на сервере и передачу его на клиента
С.П.- : «ПоместитьВоВременноеХранилище», «ПолучитьФайлы», «ОписаниеПередаваемогоФайла»
1.На сервере получаю макет, передаю его на клиента через «ПоместитьВоВременноеХранилище»/»ПолучитьФайлы»
2. На клиенте формируется документ через COM : «Новый COMОбъект(«Word.Application»)»
3. На клиенте заполняется макет, тем или иным способом -
Offline
ExtreMe
Опытный в 1С- Регистрация:
- 13 сен 2014
- Сообщения:
- 89
- Симпатии:
- 8
- Баллы:
- 29
мой набор: win8.1 64x, Excel 2016 64х, 1c 8.3.13.1513 64х и текст обработки
Путь = Объект.ИмяФайла; // тип Строка Попытка ОбъектExcel = Новый COMОбъект("Excel.Application"); Исключение Возврат "Ошибка открытия MS Excel"; КонецПопытки; Попытка ОбъектExcel.WorkBooks.Open(Путь); Исключение ОбъектExcel.DisplayAlerts = 0; ОбъектExcel.Quit(); ОбъектExcel.DisplayAlerts = 1; ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат ОписаниеОшибки; КонецПопытки;
проверил Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM->Microsoft Excel Application->Свойства->Удостоверение
Выбран «Текущий пользователь»Создал папку Desktop по обоим путям C:WindowsSysWOW64configsystemprofileDesktop и C:WindowsSystem32configsystemprofileDesktop
И хренасдва. всё равно выдаёт ошибку на стройке ОбъектExcel.WorkBooks.Open(Путь); и уходит в исключение
{ВнешняяОбработка.ЗагрузкаИзExcel.Форма.Форма.Форма(53)}: Ошибка при вызове метода контекста (Open) ОбъектExcel.WorkBooks.Open(Путь); по причине: Неизвестная ошибка
— Объединение сообщений, 17 янв 2019 —
попробовал под 1c 8.3.13.1513 86х, то же самое
после каждого запуска обработки в диспетчере остаётся висеть процесс Excel’я, я его каждый раз завершаюПоследнее редактирование: 17 янв 2019
-
Offline
ExtreMe
Опытный в 1С- Регистрация:
- 13 сен 2014
- Сообщения:
- 89
- Симпатии:
- 8
- Баллы:
- 29
одинаковая ситуация с тонким и толстым клиентом
-
Offline
ExtreMe
Опытный в 1С- Регистрация:
- 13 сен 2014
- Сообщения:
- 89
- Симпатии:
- 8
- Баллы:
- 29
пока решение нашёл в таком варианте:
открыть файл Excel
сделать поправки в кодеПуть = Объект.ИмяФайла; Попытка //ОбъектExcel = Новый COMОбъект("Excel.Application"); ОбъектExcel = ПолучитьCOMОбъект(, "Excel.Application"); Исключение ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат ОписаниеОшибки; КонецПопытки; //Попытка // ОбъектExcel.WorkBooks.Open(Путь); //Исключение // ОбъектExcel.DisplayAlerts = 0; // ОбъектExcel.Quit(); // ОбъектExcel.DisplayAlerts = 1; // ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); // Возврат ОписаниеОшибки; //КонецПопытки;
так открытый файл подхватываться и нормально все работает, но хотелось ты без этих танцев с бубном…
— Объединение сообщений, 17 янв 2019 —
не совсем понял настройки безопасности
Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM->Microsoft Excel Application->Свойства->Безопасность
добавляя там пользователя, у меня то проходило чтение то нет
стабильной работы обработки при первом варианте кода не далоПоследнее редактирование: 17 янв 2019
-
Offline
ExtreMe
Опытный в 1С- Регистрация:
- 13 сен 2014
- Сообщения:
- 89
- Симпатии:
- 8
- Баллы:
- 29
Последнее редактирование: 20 янв 2019
-
Offline
evgkup
- Регистрация:
- 9 авг 2019
- Сообщения:
- 1
- Симпатии:
- 0
- Баллы:
- 1
Была аналогичная проблема на сервере
Помогло следующее (отображение открывающегося приложения excel)
Попытка
лпИмяФайла = «c:tmp1.xls»;
лпExcel = Новый COMОбъект(«Excel.Application»);
лпExcel.Visible = 1;
лпExcel.DisplayAlerts = 0;
лпExcel.WorkBooks.Open(лпИмяФайла);
Исключение
лпExcel.Quit();
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
…набор действийПоследнее редактирование: 9 авг 2019
Произошла исключительная ситуация (Microsoft Office Excel): Невозможно получить свойство Open класса Workbooks
При разработке в 1С, при попытке выполнить открытие COM-объекта Microsoft Excel на серверной базе данных 1С появляется ошибка «Произошла исключительная ситуация (Microsoft Office Excel): Невозможно получить свойство Open класса Workbooks».
Запуск обработки, вызвавшей данную ошибку, производится на серверной операционной системе Microsoft Windows 2012. Также возможна при запуске на ОС Windows 2008 Server. Права пользователя полные. Причем, запуск на операционной системе не относящейся к семейству серверных происходит без возникновения исключительной ситуации.
Сообщить(«Выгрузка в файл Microsoft Excel…»); Путь= КаталогВременныхФайлов() + «FILENAME.xls»; Файл= Новый Файл(Путь); Если Файл.Существует() = 0 Тогда ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.Записать(Путь, ТипФайлаТабличногоДокумента.XLS); КонецЕсли; Попытка ExcelПриложение = Новый COMОбъект(«Excel.Application»); Исключение Сообщить(«Ошибка при загрузке Microsoft Excel.» + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат; КонецПопытки; ExcelФайл = ExcelПриложение.WorkBooks.Open(Путь); ExcelЛист = ExcelФайл.Worksheets(1); |
Возникновение ошибки происходит на предпоследней строке кода.
Решение для устранения исключительной ситуации:
Для нормальной работы MS Office, папка «Desktop» должна находиться в каталоге «systemprofile» системного каталога ОС. Причем, Windows 2003 имеет в своем составе такие папки.
Поэтому необходимо их создать в каталоге «Windows» операционной системы.
— для Windows 2008 Server x64:
C:WindowsSysWOW64configsystemprofileDesktop
— для Windows 2008 Server x86:
C:WindowsSystem32configsystemprofileDesktop
Оцените статью:
Загрузка…
Если Вы заметили ошибку, то выделите ее мышью и нажмите Ctrl+Enter
06.02.12 — 14:13
Подскажите где лыжи?
Excel = СоздатьОбъект(«Excel.Application»);
Книга = Excel.WorkBooks.Open(ИмяПапкиДанных+»ИмяФайла.xls»);
Книга = Excel.WorkBooks.Open(ИмяПапкиДанных+»ИмяФайла.xls»);
{C:BASEZS_EGEXTFORMSОБНОВИТЬ.ERT(83)}: Microsoft Office Excel: Невозможно получить свойство Open класса Workbooks
1 — 06.02.12 — 14:15
на компьютере установлен Microsoft Office Excel 2003
при создании новых файлов проблем нет
2 — 06.02.12 — 14:17
Ексель = СоздатьОбъект(«Excel.Application»);
Книги=Ексель.WorkBooks;
Если Книги.Count=0 Тогда
Книги.Add();
КонецЕсли;
3 — 06.02.12 — 14:20
(2) файл уже существует, в нем 5 листов
4 — 06.02.12 — 14:21
(3) а ты попробуй, потом расскажешь
5 — 06.02.12 — 14:21
Ексель = СоздатьОбъект(«Excel.Application»);
Книги=Ексель.WorkBooks;
Если Книги.Count=0 Тогда
Книги.Add();
КонецЕсли;
Книга = Книги.Open(ИмяПапкиДанных+»ИмяФайла.xls»);
6 — 06.02.12 — 14:24
(4) в условие не зашёл
7 — 06.02.12 — 14:26
если не заходит, значит все будет работать, если заходит то же будет работать
8 — 06.02.12 — 14:26
(6)скобочки?
да и не нужно условие.
9 — 06.02.12 — 14:32
(8) ну вот и я не понимаю каким оно там боком нужно, но в силу (4) решил попробовать
10 — 06.02.12 — 14:33
(8) да, тут не нужно, просто когда обращаешься к некоторым свойствам приложения без наличия хотя бы одной книги получаем банан
11 — 06.02.12 — 14:47
пароля нет на файле? Интерактиво открывается?
12 — 06.02.12 — 14:52
СокрЛП(ИмяПапкиДанных) не поможет?
13 — 06.02.12 — 14:53
(11) да
он же ранее был создан
14 — 06.02.12 — 14:53
Excel.WorkBooks.Add()
15 — 06.02.12 — 14:53
(12) Microsoft Office Excel: Невозможно получить свойство Open класса Workbooks
16 — 06.02.12 — 14:54
(12) Это ошибка OLE объекта а не 1С
17 — 06.02.12 — 15:00
странно..
у меня вот такой код, сейчас проверил, работает:
Эксель = СоздатьОбъект(«Excel.Application»);
Книга = Эксель.WorkBooks.Open(ЕхФайл);
Лист = Книга.WorkSheets(НомерЛистаЕксель);
правда, ЕхФайл и НомерЛистаЕксель — реквизиты диалога обработки.
18 — 06.02.12 — 15:01
кстати, в отладчике с
ИмяПапкиДанных+»ИмяФайла.xls»
всё нормально?
19 — 06.02.12 — 15:07
попробуй
Книга1 = Excel.WorkBooks.Add();
Книга2 = Excel.WorkBooks.Open(«C:1.xls»);
Книга3 = Excel.WorkBooks.Open(ИмяПапкиДанных+»ИмяФайла.xls»);
где вылетит?
C:1.xls — кинь пустой файл эхеля
20 — 06.02.12 — 15:09
(19)я тут кофе выпил, кофейная гуща подсказывает: на первом
21 — 06.02.12 — 15:25
(20) на первом точно не вылетит
22 — 06.02.12 — 15:25
не понял почему, но проблема решилась
23 — 06.02.12 — 15:25
перезагрузкой компьютера
24 — 06.02.12 — 15:41
(23)интересно
какая ось стоит?
25 — 06.02.12 — 15:44
(23) Кстати, будете смеяться, но на предыдущей работе, админы даже ж..у не отрывали, если пользователь не перезагрузил первым делом компьютер. Многие проблемы решались банальной перезагрузкой компа. А общее название этих проблем: Неведомая Ёба..я Ху..я :))))
26 — 06.02.12 — 15:45
(25)ты угадал, я смеюсь
27 — 06.02.12 — 15:48
+26 напомнило мне одну неисправность в авте.. искра в баллон ушла, не схватывается двиг, хить задавись.. я с ног сбился, прозванивал цепи, чистил контакты.. приятель пришел: посмотри предохранитель..
блин-же..
как просто, в конце концов оказалось
вот тебе та-же перезагрузка
28 — 06.02.12 — 15:51
(25) пользователи терминальный сервер перезагружали?
29 — 07.02.12 — 11:24
(24) ХР
Fish
30 — 07.02.12 — 11:26
(28) Нет. Свои локальные. Причём здесь терминальный сервер? :))
Обновлено: 12.06.2023
А простите какую цель вы преследовали своими действиями? Вы решили смешивать «мух» и «котлеты», а потом удивляетесь, что у Вас получается что-то «теплое и мягкое». На текущий момент вы имеете оригинальную (белую) 3.0.73.1.
Если у Вас отсутствует ИТС и Вам захотелось обновиться — это одно, если Вам захотелось перейти на отученную — то я простите не вижу логики, всего один вопрос, ЗАЧЕМ??
Тут другая ситуация.
Это две разные организации.
В одной программа куплена и есть ИТС. Из неё как раз dt с данными.
Второй организации тоже нужна эта программа, и данные в ней (около 20000 лицевых счетов) от первой организации. Но купить её срузу возможности нет, так как неизвестно количество пользователей (44фз).
Через XML тоже лажа какая-то получается, сплошные ошибки.
Тут другая ситуация.
Это две разные организации.
В одной программа куплена и есть ИТС. Из неё как раз dt с данными.
Второй организации тоже нужна эта программа, и данные в ней (около 20000 лицевых счетов) от первой организации. Но купить её сразу возможности нет, так как неизвестно количество пользователей (44фз).
Через XML тоже лажа какая-то получается, сплошные ошибки.
Если закрыть глаза на часть лицензионного соглашения. и организации в одном офисе ,а то и на одном компьютере (всяко же бывает)..то просто разверни вторую базу рядом и будет чудо.
НО выше ты писал про отсутствие ключа, значит или компьютеры разные, или территориально разнесены. то тут вариант только отученную ставить вторым ребятам..
Перенос данных (как я понял 1>>2), воспользуйся универсальным обменом, и обменяй их документами и справочниками.
Про XML — что не получилось? там вроде не хитро (но внимательно!)..
Если закрыть глаза на часть лицензионного соглашения. и организации в одном офисе ,а то и на одном компьютере (всяко же бывает)..то просто разверни вторую базу рядом и будет чудо.
НО выше ты писал про отсутствие ключа, значит или компьютеры разные, или территориально разнесены. то тут вариант только отученную ставить вторым ребятам..
Перенос данных (как я понял 1>>2), воспользуйся универсальным обменом, и обменяй их документами и справочниками.
Про XML — что не получилось? там вроде не хитро (но внимательно!)..
Про использование одного компьютера вариант хороший!
И в принципе к этому всё и идёт. Обе эти организации хотят на 1 сервер посадить. Работать будут по RDP.
У первой ключ аппаратный на 5 пользователей. Его в сервер воткнём.
Проблема в том, что пользователей всего 5.
Через XML выгрузку делал. Всё отлично выгрузилось. Но при загрузке очень много ошибок почему-то. Может я что-то не так делаю, но там вроде всё просто, ничего не так сделать сложно. Правда я выгрузку делал XML в 3.0.73.1, а загрузку в 3.0.73.2, может из-за этого ошибки?
Описание ошибки:
Проявила себя в клиент-серверной базе. Релиз платформы 1С: Предприятие 8.3.13.1644.
Полная формулировка ошибки:
• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.
При доработке в расширении для конфигурации 1С: Комплексная автоматизация 8, ред. 2, которая должна загружать данные из файлов Excel и при попытке выполнения в коде РабочаяКнига = ExcelПриложение . WorkBooks . Open ( ФормаИмпортXLS.ИмяФайла ); . Что удивительно, но в более ранней редакции Комплексной, 1.1, эта проблема не возникала в этом же коде, хотя обе базы на одном сервере.
Популярность этого варианта подтверждается исчерпывающим обсуждением и вот на этом ресурсе: «v8.x: [РЕШЕНО] Ошибка при вызове метода контекста (Open) при работе с Excel»
Проблема была рещена данным простым решением, но обращу внимание на то, что данное действие должно быть выполнено на сервере, а не на локальном рабочем месте.
Всем привет — стабильно ловится ошибка 1429 — Исключение OLE IDispatch, код 0 из Microsoft Office Excel:
Невозможно получить свойство Open класса Workbooks..
Класс создается и другие его методы доступны и работают нормально, например loXLS.WorkBooks.Add()
Причем наблюдается только в exe, из фокса эта процедура отрабатывает нормально.
Убил полдня на эксперименты .
vfp9 sp1, server 2008
Равиль
Всем привет — стабильно ловится ошибка 1429 — Исключение OLE IDispatch, код 0 из Microsoft Office Excel:
Невозможно получить свойство Open класса Workbooks..
Класс создается и другие его методы доступны и работают нормально, например loXLS.WorkBooks.Add()
Причем наблюдается только в exe, из фокса эта процедура отрабатывает нормально.
Убил полдня на эксперименты .
vfp9 sp1, server 2008
к сожалению до имени файла дело не доходит — т.к. не обнаружен метод open .
Но что любопытно — скомпилировал в vfp7 — косяка нет ))
Попробую дробить этот модуть — часть на 7-ке, часть на 9-ке ))
Равиль
Надеялся переустановка офиса поможет . увы ))
к сожалению до имени файла дело не доходит — т.к. не обнаружен метод open .
Но что любопытно — скомпилировал в vfp7 — косяка нет ))
Попробую дробить этот модуть — часть на 7-ке, часть на 9-ке ))
Антивирус или вирус?
Как получена ссылка loXLS? Права «запускающего» IDE и exe, были ли запросы UAC-а?
Макро тут совсем не при чём — это вредный совет, сбивает с правильного пути поиска причин проблемы
Для начала, я бы разбил на «слагаемые»
Довольно часто Com-объекты не могут «переварить» «многочлены». А по одному члену за раз — вполне стабильно работают. Но даже если это не поможет, подобное разбиение позволит точнее определить, на каком члене иерархии произошел сбой.
Igor Korolyov
Антивирус или вирус?
Как получена ссылка loXLS? Права «запускающего» IDE и exe, были ли запросы UAC-а?
Макро тут совсем не при чём — это вредный совет, сбивает с правильного пути поиска причин проблемы
Возможно что-то с правами — добился чтобы процесс выполнялся при явном запуске пользователем EXE на сервере
осталась проблема при запуске EXE из планировщика (хотя с теми же правами от имени того же пользователя)
Для начала, я бы разбил на «слагаемые»
loBooks = loXLS.Workbooks
loBook = loBooks.Open(m.lcXlsFile)
Довольно часто Com-объекты не могут «переварить» «многочлены». А по одному члену за раз — вполне стабильно работают. Но даже если это не поможет, подобное разбиение позволит точнее определить, на каком члене иерархии произошел сбой.
Пробовал и так, спасибо — в субботу еще потестируем
Исправлено: Равиль, 16.12.10 18:26
Сразу надо было указывать что речь идёт про неинтерактивный процесс Это куча своих мелких и не очень нюансов — начиная с потенциального отсутствия «десктопа» для программ при таком способе запуска.
И всё-же как получается экземпляр экселя — CreateObject, или GetObject?
Igor Korolyov
Сразу надо было указывать что речь идёт про неинтерактивный процесс Это куча своих мелких и не очень нюансов — начиная с потенциального отсутствия «десктопа» для программ при таком способе запуска.
Неа, прога всё равно получает свой десктоп.
——————
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Исправлено: PaulWist, 16.12.10 21:53
Это странно, значит в 9.dll ошибка.
——————
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ну я не в курсе деталей — десктоп, винстанция или чего там ещё есть — но при запуске из планировщика (от имени незалогиненных аккаунтов или тем более от SYSTEM-а) возникали разные «нюансы». Т.е. там надо быть особо осторожным — там паче что речь пошла о таком монстре как MS Office — это не тривиальный консольный архиватор (а даже с ним порой возникают проблемы).
Igor Korolyov
Сразу надо было указывать что речь идёт про неинтерактивный процесс Это куча своих мелких и не очень нюансов — начиная с потенциального отсутствия «десктопа» для программ при таком способе запуска.
И всё-же как получается экземпляр экселя — CreateObject, или GetObject?
Да, извиняюсь — поморочил всем голову — поздно сообразил, что причина может быть в запуске без логина пользователя )) Видимо для Excel такие условия работы неприемлимы.
Экземпляр создается CreateObject. Можно как уже говорил, создавать книги, что-то менять в ячейках, форматировать, а вот открыть существующий файл — увы.
В субботу поеду к ним и попробую GetObject.
PaulWist
Это странно, значит в 9.dll ошибка.
Паш, это я в запарке на 9-ку «наехал» потом потестил в 7-ке — без логина те же проблемы
Равиль, у тебя сама служба планировщика от какой учетной записи запускается, от системной или же от юзера?
——————
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
PaulWist
Равиль, у тебя сама служба планировщика от какой учетной записи запускается, от системной или же от юзера?
наверное по-умолчанию — от системной
намекаешь на галочку — [] разрешить взаимодейтсвие с рабочим столом ?
Нет, намекаю на то, что бы служба запускалась от имени либо доменного, либо локального администратора, дело в том, что для системной учетной записи «затра..ся» потом права прописывать
——————
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Исправлено: PaulWist, 17.12.10 11:02
Равиль, я конечно понимаю что это не лучший выход. Просто чуть из личного опыта. Я пользую на Win2003 планировщик nncron, настроенный на запуск от имени локального администратора — правда никакого взаимодействия с десктопом в запланированных задачах не было, как не было и работы с офисом (на сервере вообще офис не установлен). Зато есть сетевой логин в батнике пускающем фоксовую прогу (net use с доменным аккаунтом и паролем). В принципе всё работает — только когда нет связи с DC оно не пашет (ну потому что не может авторизоваться для подключения к файл-серверу).
Я просто поостерёгся бы менять штатные настройки виндового планировщика, там паче в 2008, где куча системных задач зашедулена.
Нашел похожий вопрос. Правда там запуск из планировщика Win7 и ошибка возникает на команде loEx.Workbooks.OpenText()
Там много слов Но решение следующее
Dima T
Вопрос снят. Оказалось все просто: криворукие писатели из MS забыли папку создать
и если пользователь под кем запускается задание не админ, то ему надо права полные дать на systemprofile с подпапками
Да, дельно — это может быть на 64-битках. На 32-разрядных вместо SysWOW64 будет system32 — но там обычно соответствующие папки (какой-то урезанный «профиль» пользователя-непользователя) существует сразу.
Ну что сказать — сижу и радуюсь — проблема решена — создал эту папку C:WindowsSysWOW64configsystemprofileDesktop
и все работает как часы — ежечасно формируется прайс и выкладывается на сайт ))
Спасибо
Добрый день, коллеги. Решил автоматизировать загрузку данных от клиентов. Многие высылают в экселе, соответственно нужно читать и анализировать её. Чтобы менеджеры не заморачивались с этим, чтение экселя решил вынести в регламентное задание. Но тут возникла проблема с созданием ком-объекта Excel.Application. Почитал статьи, рекомендуют вынести вызов ком-объекта на клиент, но при выполнении регламентного задания нет никакого клиента, все выполняется сервером. Как быть? Посоветуйте
в регламентном без вариантов только сервер или прайсы в csv перекидывать сначала и затем скармливать как текст если эксель тупить будет
«Почитал статьи, рекомендуют вынести вызов ком-объекта на клиент» Выкинь эти статьи.
и какое исключение? может файла нет? доступа к папке откуда его тянуть? или дальше гадать?
права на папку? Что за ошибка? Не рекомендуют на сервере наверное из-за того что по сети файл взад-назад тягать не комильфо.
Сдается мне, что нет прав у пользователя, под которым сервер 1С работает.
на инфостарте есть примеры как парсить XSLX но могут возникнуть проблемы если сторонняя прога сохраняет в этот формат.
Вот такое исключение: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Невозможно получить свойство Open класса Workbooks Файл есть. Он лежит локально на сервере. Доступ к папке есть для всех.
Тот же самый код, запущенный на клиенте выполняется без проблем.
попробуй путь с именем только из латиницы пока что
И Для интереса, попробуй заместо Open использовать Add
а просто Add без имени файла, пустой новый док добавить, и если получитьсязаписать его
Метод Add прошел, но при попытке сохранить документ опять исключение: Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Office Excel): Метод SaveAs из класса Workbook завершен неверно Файл не сохранен!
когда оффис исполняется на сервере от службы, то он вроде использует эту папку для вр файлов
Скорее всего тут суть в том, что на сервере, на уровне платформы, запрещены файловые операции
чувак у меня так везде работает, и с вордом и с экселем, попробуй
Ну если ток для чтения то покатит наверно, я просто для чтения, изменения и записи юзаю, так что мне COM нужен был
Да, пробовал. Текст исключения: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанный поставщик. Вероятно, он установлен неправильно.
И если зайти от него то все в интерактиве получается?
Если код открытия вызывать на стороне клиента, то все работает.
Как так, ты же смотрел наличие папки, создавал новую на серваке, почему проверить не можешь?
Всмсле запущеного экземпляра предпрития на сервере?
Чтобы проверить, нужно авторизоваться под пользователем от которого запущен сервер 1С. Я не могу под ним авторизоваться в силу отсутствия пароля Запускаю экземпляр приложения, вызываю внешнюю обработку и там прописываю процедуру открытия с ключом &НаКлиенте
Попробуй эти создать)))) C:WindowsSystem32ConfigSystemprofile C:WindowsSysWOW64ConfigSystemprofile
И вроде нужно только там какой битности оффис, пофиг на 1С
Вот ты добрый человек! Гений, по другому и не сказать )))
Да блин ты меня заставил на сервак зайти и вспомнить чо да как))))
Единственное что осталось, это команда не завершает процесс. Экселька продолжает висеть в диспетчере задач на сервере. В чем может быть дело, подскажи пожалуйста
За твои заслуги готов поддержать тебя материально. Переводом либо на телефон
Так сначала нужно закрыть все документы, так как иначе мы видим вопрос о необходимости что-то сохранить, только, на самом деле, мы его не видим, так как рабочий стол записи SYSTEM невидим, но, если очень хочется, там окно можно найти и даже нажать кнопку «Нет».
Ну в теории не должно ругаться если ты в доке ничо не менял (типа букву в ячейке добавил). Ну чтобы на точняк, погугли на msdn там или используешь метод Close у WorkSheet или Эксель.Application.Quit (или просто Эксель.Quit). Нули как разтаки определяют закрытие документа или приложения без лишних проверок. Я конеш хз у себя сразу писал с нулями, а вот помню когда один из первых разов таким образом с Word работал, то он у меня с исключением вылетал (я имею ввиду на сервере)
УУУ. В сказку попал человек. Обратись ко мне. Есть решение. Я уже все грабли протоптал с этим делом. Есть у нас решение. Можешь даже не парится. У нас компонента чтения эксель, нативная. Работает во всех режимах серверных на любых осях.
Гарантируем поддержку. Да и собственно задачу импорта решена целой подсистемой.
Когда приложение оффиса (Word, Exel) запускается от сервиса винды, коем в частности является служба 1С сервера, то для временных файлов используются данные каталоги взавизимости от разрядности оффиса.
а зачем Эксель.DisplayAlerts = 1? это свойство вообще задавай после создания кома
Ошибка 1С при формировании отчёта — Приложению Microsoft Excel не удается получить доступ к файлу
Коллеги, добрый день. При формировании отчёта выдаёт следующую ошибку:
Ошибка при вызове метода контекста (Open)
Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу «C:Users1cv83AppDataLocalTempv8_19EA_423.xlsx».
Самое интересное, что у пользователя, под которым запускается отчет, — админские права на сервере.
И путь указан верно, и доступ к файлу есть (руками открывается без проблем).
Клиент-сервер, процедура запускается на сервере. В чем может быть причина?
Добрый день! Дайте права пользователю 1cv83 на Microsoft Excel Application в Службах компонент.
Нажмите на “Пуск/Start”-> “Панель управления/Control Panel”
Далее “АдминистрированиеAdministrative Tools”-> “Службы компонентов/Component Services”
Откройте папку “Службы компонентов/ Component Services” и выберите “Настройка DCOM/DCOM Config”
Среди служб выберите “Microsoft Excel Application” и откройте его свойсва, вкладку “Безопасность/Security” и в разделе “Разрешения на запуск и активацию/Launch and Activation Permissions” настроить разрешения – выбрать “Настроить/Customize” и нажать “Изменить/Edit”.
Добавьте пользователя 1cv83 и нажмите “Применить/Apply” в свойствах безопасности компоненты.
Заключительным этапам будет создание папки с соответствующими правами пользователю 1cv83
C:WindowsSystem32configsystemprofileDesktop – для Microsoft Office 2010
C:WindowsSysWOW64configsystemprofileDesktop – для Microsoft Office 2007 (windows server x64)
C:WindowsSystem32configsystemprofileDesktop – для Microsoft Office 2007 (windows server x86)
Читайте также:
- Ошибка 1с тонкий клиент
- Как открыть las файл в эксель
- Попадает ли точка в заштрихованную область excel
- Драйвер не отображается в диспетчере устройств
- Контроллер омрон программа для программирования
Победили предыдущую проблему — приложение Excel запускается.
Получили новую ошибку: -2146827284 Невозможно получить свойство Open класса Workbooks.
Возникала на вызове:
EXEC @iRetCode = sp_OAMethod @iXLApp, 'Workbooks.Open', @iDoc OUTPUT, @FileName
Всяческие изменения в вызове процедуры, выделение отдельно Workbooks никак не помогали.
Дело опять же оказалось в правах и в том, что операционка 64-битная:
— нужно проверить, что существует папка C:WindowsSysWOW64configsystemprofileDesktop — если нет, то нужно создать
— и учетной записи, под которой работает служба SQL Server нужно дать полные права на папку C:WindowsSysWOW64configsystemprofile и все ее подпапки.
После этих нехитрых действий всё должно заработать.
Ссылки, посвященные этой теме:
http://forum.foxclub.ru/read.php?29,488069