Ошибка при создании объекта excel application

   Sh_Vlad

13.01.15 — 12:18

Здравстуйте.

Перестало работать:

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

по причине:

-2147221005(0x800401F3): Недопустимая строка с указанием класса

Куда смотреть?

Спасибо.

   mikecool

1 — 13.01.15 — 12:20

не установлен эксель, смотреть в программы и компоненты

   Sh_Vlad

2 — 13.01.15 — 12:20

(1) Установлен. 2003

   Feunoir

3 — 13.01.15 — 12:25

Проверить наличие HKEY_CLASSES_ROOTExcel.Application в реестре.

   Sh_Vlad

4 — 13.01.15 — 12:33

(3) Наличиствует. + HKEY_CLASSES_ROOTExcel.Application.11

   Sh_Vlad

5 — 13.01.15 — 12:34

Работало до недавнего времени. Года три обработке

   Leksus

6 — 13.01.15 — 12:35

В релизе 8.3.5.1400 кажется что-то исправляли с подключением ком

   senior

7 — 13.01.15 — 12:38

создай этот же COM объект в блокноте на VB, думаю проблема не в 1С

   Sh_Vlad

8 — 13.01.15 — 13:05

(7) Если можно — поподробнее…

   DrZombi

9 — 13.01.15 — 13:13

(8) А точно 2003? Бывает, что обновляются до 2007 и усе :)

   Rie

10 — 13.01.15 — 13:15

(4) Ну так попробуй указать явно «Excel.Application.11»

   Rie

11 — 13.01.15 — 13:18

+(10) И посмотри, на всякий случай, в реестре в CLSID — путь правильный?

   Sh_Vlad

12 — 13.01.15 — 13:23

(11) Там вообще не путь. А {00024500-0000-0000-C000-000000000046}

   Rie

13 — 13.01.15 — 13:28

(12) В  разделе CLSID этот ключ найди и посмотри куда LocalServer (LocalServer32) смотрит.

   Sh_Vlad

14 — 13.01.15 — 13:48

(13) Путь правильный

   Rie

15 — 13.01.15 — 13:49

Пробовал (10)?

   Sh_Vlad

16 — 13.01.15 — 13:49

Да

   Rie

17 — 13.01.15 — 14:15

(8) Создай (в блокноте) файл с расширением .vbs

Вставь туда

set xl = CreateObject(«Excel.Application»)

xl.Workbooks.Add

xl.Visible = 1

Сохрани и запусти.

Что получилось?

   Sh_Vlad

18 — 13.01.15 — 14:59

(17) Получилось — открылась новая книга Ексель

   Sh_Vlad

19 — 13.01.15 — 15:03

Причем оба варианта — Excel.Application и Excel.Application.11

   Sh_Vlad

20 — 13.01.15 — 15:54

Люди добрые, есть еще варианты причин ошибки?

   Zamestas

21 — 13.01.15 — 15:57

(20) Запустить от администратора пробовал?

   Sh_Vlad

22 — 13.01.15 — 16:01

(21) Что запустить — Предприятие? Вообще-то учетка админская…

   DrZombi

23 — 13.01.15 — 16:10

(22) Обновись на старый релиз :)

   Zamestas

24 — 13.01.15 — 16:11

(22) Да предприятие, в win7/2008 и старше админские права не означают полные права.

   Sh_Vlad

25 — 13.01.15 — 16:19

Не помогло…

   ZUM

26 — 13.01.15 — 16:31

Здравствуйте!

1) Попробуйте это

При подключении к базе com-объектом вылетает ошибка (файл с ошибкой во вложении, вылетает на строчке кода при создании ком-объекта: Коннектор = Новый COMОбъект(«V8.COMConnector»);)

На форумах по данной ошибке нашла решение, но попробовав это проделать, у меня не получилось уже на первом пункте, возможно не хватает прав. Прошу вас мне помочь.

1. Администрирование — Службы компонентов – Компьютеры – Мой компьютер – Приложения COM+ — Создать приложение – Создать новое приложение – вводим имя «V82.COMConnector»(переключатель «Серверное приложение») – Указанный пользователь (Администратор)

2. В появившейся ветке V82COMConnector – подветка Компоненты – создание нового компонента – Установка новых компонентов — <каталог 1С>bincomcntr.dll

3. Правой кнопкой по ветке V82COMConnector – Свойства – Безопасность – Снял галку «Принудительная проверка доступа для приложений» — Поставил галку «Применить политику программных ограничений» — Уровень ограничений «Неограниченный»

2) Если не помогло

Проблема :

1. Не установлен Microsoft Excel

2. Для работы ком-объекта необходимо наличие папки

For Windows 2008 Server x64

  C:WindowsSysWOW64configsystemprofileDesktop

For Windows 2008 Server x86

  C:WindowsSystem32configsystemprofileDesktop

Источник (https://social.msdn.microsoft.com/Forums/en-US/b81a3c4e-62db-488b-af06-44421818ef91/excel-2007-automation-on-top-of-a-windows-server-2008-x64?forum=innovateonoffice)

   Sh_Vlad

27 — 13.01.15 — 16:48

1) Проделал.

2) Папка есть, только вместо Desktop — по русски Рабочий стол

Не помогло…

   igork1966

28 — 13.01.15 — 16:51

(27) а если указать имя сервера в конструкторе?

localhost

   Rie

29 — 13.01.15 — 16:51

(18) То есть, Excel спокойно коннектится.

Наивный вопрос: а откуда коннектится? С клиента или с сервера?

   Rie

30 — 13.01.15 — 16:52

(28) То это будет уже совсем другая история…

   Sh_Vlad

31 — 13.01.15 — 16:59

(29) Клиент предприятия на терминальном сервере. Там же запускал скрипт.

   Sh_Vlad

32 — 13.01.15 — 17:00

Или вопрос не про то?

   Rie

33 — 13.01.15 — 17:03

(32) Про то. Тогда — странно очень.

Может, обработку правили — и буковку не из того алфавита поставили? Или (6)…

   Sh_Vlad

34 — 13.01.15 — 17:05

Работало везде «еще вчера»

Обработку не правили уже полгода (тем более в этой строке). Ексель не переустанавливали, т.к. см. выше

   yukon

35 — 13.01.15 — 17:05

(33)(32) Не про то.

Создание СOM-объекта происходит &НаКлиенте или &НаСервере?

   Sh_Vlad

36 — 13.01.15 — 17:06

&НаСервере

   Sh_Vlad

37 — 13.01.15 — 17:08

Сейчас надо &НаКлиенте?

   igork1966

38 — 13.01.15 — 17:09

(37) дык у тебя на сервере и пытается создать объект

   Rie

39 — 13.01.15 — 17:10

Так он и vbs запускал на сервере-то… И обработка раньше у него работала…

   yukon

40 — 13.01.15 — 17:11

Значит только костылями. Заказчику покажи это:

Вопросы серверной автоматизации Office

https://support.microsoft.com/kb/257757

Корпорация Microsoft на сегодняшний день не рекомендует производить и не поддерживает автоматизацию программ из пакета Microsoft Office с помощью автоматических, неинтерактивных клиентских приложений или компонентов (включая ASP, DCOM и службы NT), поскольку при запуске в этом окружении программы пакета Office могут работать нестабильно или зависать.

   yukon

41 — 13.01.15 — 17:12

(39) На каком сервере — на терминальном или 1С-ном?

   Rie

42 — 13.01.15 — 17:13

(41) Предполагаешь, что они сервер переставляли? Говорит ведь, что раньше — работало.

   yukon

43 — 13.01.15 — 17:16

(42) 1С-ный по любому переставляли.

Для 8.3 есть еще вариант, что включили в профилях безопасности ограничение на COM-объекты.

   Sh_Vlad

44 — 13.01.15 — 17:28

Так что с 1С-ным сервером не так?

   yukon

45 — 13.01.15 — 17:49

(44) Пока все нормально (глянь на всякий случай профили безопасности).

Терминальный сервер и сервер 1С на одной машине работают?

   Sh_Vlad

46 — 14.01.15 — 08:56

Проблема остается.

(45) На разных.

   ProxyInspector

47 — 14.01.15 — 09:15

Явно автор не раскрыл когда у него перестало работать. Я боюсь, что после пытания паяльником выяснится, что был установлен Windows 2008 x 64 сервер. Установлен сервер 1с предприятия х 64. Обновлена версия 1с предприятия с 8.2 на 8.3. Запуск сервера 1с предприятия раньше запускался от имени System, а сейчас запускается от имени Usr1c8. Раньше 1с работала в режиме толстого клиента, а сейчас на управляемых формах.

И вот после этого НЕОЖИДАННО перестал работать Exell в режиме ОЛЕ.

Я почему-то не очень сильно удивляюсь :)

   Sh_Vlad

48 — 14.01.15 — 09:45

(47) Что нужно изменить в коде чтобы работала конструкция Новый COMОбъект(«Excel.Application»);

Все указанные изменения имеют место быть. Обработка сделана под управляемые формы

   Dolphinbet

49 — 14.01.15 — 09:51

To resolve this issue follow these steps

1. Login to the server as a administrator.

2. Go to «Start» -> «Run» and enter «taskmgr»

3. Go to the process tab in task manager and check «Show Processes from all users»

4. If there are any «Excel.exe» entries on the list, right click on the entry and select «End Process»

5. Close task manager.

6. Go to «Start» -> «Run» and enter «services.msc»

7. Stop the service automating Excel if it is running.

8. Go to «Start» -> «Run» and enter «dcomcnfg»

9. This will bring up the component services window, expand out «Console Root» -> «Computers» -> «DCOM Config»

10. Find «Microsoft Excel Application» in the list of components.

11. Right click on the entry and select «Properties»

12. Go to the «Identity» tab on the properties dialog.

13. Select «The interactive user.»

14. Click the «OK» button.

15. Switch to the services console

16. Start the service automating Excel

17. Test you application again.

   yukon

50 — 14.01.15 — 10:07

(46) Вот это «Получилось — открылась новая книга Ексель» делалось на сервере 1С?

   Sh_Vlad

51 — 14.01.15 — 12:04

Помогла переустановка офиса на сервере.

Теперь не хочет открывать шаблон:

Ошибка при вызове метода контекста (Add)

        Ексель.WorkBooks.Add(«\……..TemplateZayvka.xlt»);

Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу «………..TemplateZayvka.xlt». Это может быть вызвано одной из следующих причин.

• Указан несуществующий файл или путь.

• Файл используется другой программой.

• Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.

Файл существует. Никем не открыт. Имя не с чем не совпадает

   Sh_Vlad

52 — 14.01.15 — 12:04

Доступ полный для всех

   Sh_Vlad

53 — 14.01.15 — 12:22

Скрипт открывает этот файл

   Dolphinbet

54 — 14.01.15 — 12:59

(51) см. 49 :)

   Dolphinbet

55 — 14.01.15 — 13:04

Только в пункте 13. Select «The interactive user.» вместо interactive user надо указать конкретного пользователя под котороым запускается сервер 1С-Предприятие.

   DrZombi

56 — 14.01.15 — 13:07

(47) Обычно такое перестает работать после обновления Форточек.

У нас как то было, при обновлении рабочей станции, т.е. обычного ПК. Но офис там был 2007-ой, обновление на него так подействовало :)

   Sh_Vlad

57 — 14.01.15 — 13:08

По (49) все проделано. «Microsoft Excel Application» такой ветки в настройках нет. В тех что есть стоит «Запускающий пользователь» («The interactive user»? ).

   Dolphinbet

58 — 14.01.15 — 13:10

(57) так вот надо не «Запускающий пользователь» а тот под которым запускается сервер 1С

   Sh_Vlad

59 — 14.01.15 — 13:27

Сервер запускается системной учетной записью. И куда пихать этого пользователя — нужной ветки нет

   Dolphinbet

60 — 14.01.15 — 13:27

а почему нет «Microsoft Excel Application»??

   Sh_Vlad

61 — 14.01.15 — 13:31

(60) У нас разделение труда. Офис устанавливает другая служба. Не могу сказать. Есть «Office Licensing COM Server 14»

   hhhh

62 — 14.01.15 — 13:34

(59) ну, поменяйте в строке запуска сервера 1с системную запись на другого пользователя. Зачем вы системную туда вбухали? Можно было оставить пользователя, который там по умолчанию был: Usr1cv8

   Sh_Vlad

63 — 14.01.15 — 13:38

(62) Смысл менять в сервере 1с, если его надо прописать в настройках DCOM Екселя — некуда писать…

   Dolphinbet

64 — 14.01.15 — 13:56

(61) похоже из-за этого и не работает, «Microsoft Excel Application» должен быть в ветке «Настройка DCOM»

   Sh_Vlad

65 — 14.01.15 — 14:09

Как его туда запихнуть? Не вручную же…

На других серверах тоже нет. Есть например «Книга Microsoft Office Excel 2007»

   Dolphinbet

66 — 14.01.15 — 14:15

(65) Да, действительно, почему-то в серверных ОС этой ветки нет…

   Dolphinbet

67 — 14.01.15 — 15:01

может по коду приложения поискать {00024500-0000-0000-C000-000000000046} ?

  

Dolphinbet

68 — 28.01.15 — 09:31

jediAlex

4 / 4 / 4

Регистрация: 12.07.2011

Сообщений: 627

1

14.12.2016, 10:26. Показов 9137. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте. Делаю собственную конфигурацию в 1С8.3. Есть несколько обработок, которые выводят результат выборки данных в таблицу значений на форме и надо выгрузить эти данные в Excel. Проблема начинается с самой первой строки процесса выгрузки:

1C
1
ОтчетВExcel= Новый СОМОБъект("Excel.Application") ;

Вываливается ошибка «Недопустимая строка с указанием класса». Что не так? помогите пожалуйста. Во вложении скриншот сообщения об ошибке.

Миниатюры

Ошибка при создании объекта Excel.Application
 



0



о_____О

Эксперт 1С

224 / 223 / 37

Регистрация: 19.11.2010

Сообщений: 1,062

14.12.2016, 13:44

2

jediAlex, а excel установлен?

Добавлено через 1 минуту
comcntr.dll зареган в системе?



0



4 / 4 / 4

Регистрация: 12.07.2011

Сообщений: 627

14.12.2016, 13:51

 [ТС]

3

все есть, все установлено. Попробовал на локальной версии конфигурации — работает. Залил БД на SQL сервер и такое выскочило…



0



о_____О

Эксперт 1С

224 / 223 / 37

Регистрация: 19.11.2010

Сообщений: 1,062

14.12.2016, 13:58

4

Код где работает? На клиенте или сервере?



0



4 / 4 / 4

Регистрация: 12.07.2011

Сообщений: 627

15.12.2016, 09:13

 [ТС]

5

код на сервере работает



0



Эксперт 1С

3052 / 1999 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

15.12.2016, 09:15

6

jediAlex, надо на клиенте.



0



jediAlex

4 / 4 / 4

Регистрация: 12.07.2011

Сообщений: 627

15.12.2016, 10:19

 [ТС]

7

вот полный код процедуры на сервере:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
&НаСервере
Процедура ВыгрузитьОтчетВExcelНаСервере()
    // Вставить содержимое обработчика.
    ОтчетВExcel=Новый COMОбъект("Excel.Application");
Книга=ОтчетВExcel.Workbooks.Add();
Лист=Книга.Worksheets(1);
    Лист.Cells(1, 1).Value = СокрЛП("Отчет о выполнении календарногоплана(дата начала работ)");
    Лист.Cells(2, 1).Value = СокрЛП("Отчетная дата:");
    Лист.Cells(2, 2).Value=Объект.ОтчетнаяДата;
    Лист.Cells(3, 1).Value = СокрЛП("Наименование договора");
Лист.Cells(3, 2).Value = СокрЛП("Номер этапа") ;
 Лист.Cells(3, 3).Value = СокрЛП("Дата начала работ план");
 Лист.Cells(3, 4).Value = СокрЛП("Дата начала работ факт");
 Лист.Cells(3, 5).Value = СокрЛП("Отклонение, дней");
  Лист.Rows(1).Font.Bold=Истина;
   Лист.Rows(2).Font.Bold=Истина;
     Лист.Rows(3).Font.Bold=Истина;
    //Попытка
        
        Для Стр = 0 По ТаблицаВыгрузки.Количество()-1 Цикл
            
            Для Кол = 1 По ТаблицаВыгрузки.Колонки.Количество()-2 Цикл
                
                Если ТипЗнч(ТаблицаВыгрузки[Стр][Кол]) = Тип("Число") Тогда
                    // Установним формат для типа Число
                    //Лист.Cells(Стр + 2, Кол + 1).NumberFormat = "0,00";
                    Лист.Cells(Стр + 4, Кол).Value = ТаблицаВыгрузки[Стр][Кол];
                Иначе 
                    // Для всех других типов установим формат "Текстовый"
                    Лист.Cells(Стр + 4, Кол).NumberFormat = "@";
                    Если ЗначениеЗаполнено(ТаблицаВыгрузки[Стр][Кол]) Тогда
                    Лист.Cells(Стр + 4, Кол).Value = Строка(ТаблицаВыгрузки[Стр][Кол]);
                КонецЕсли;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
        ОтчетВExcel.Visible=Истина;
        //ExcelПриложение.DisplayAlerts = False;
        //Книга.SaveAs(ПолноеИмяФайла); 
        //ExcelПриложение.ActiveWorkbook.Close();
        //ExcelПриложение.Quit();
 
//КонецПопытки;
    
КонецПроцедуры

Добавлено через 1 минуту
вызов процедуры на клиенте:

1C
1
2
3
4
&НаКлиенте
Процедура ВыгрузитьОтчетВExcel(Команда)
    ВыгрузитьОтчетВExcelНаСервере();
КонецПроцедуры

Добавлено через 17 минут
вот полный код ошибки:

1C
1
2
3
4
{Обработка.ВыполнениеКалендарногоПланаПоДатеНачала.Форма.Форма.Форма(42)}: Ошибка при вызове конструктора (COMОбъект)
    ОтчетВExcel=Новый COMОбъект("Excel.Application");
по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класса

Причем обработок, в которых данные выгружаются в Excel 4. В одной код срабатывает, объект excel создается, а в других — нет. Во всех делал создание объекта Excel на сервере.



0



Эксперт 1С

476 / 413 / 93

Регистрация: 26.09.2012

Сообщений: 1,912

15.12.2016, 10:58

8

Когда ваш код выполняется на сервере, то и эксель с дллкой смотрятся на сервере и еще два миллиона параметров доступа. И судя по ошибке нет у вас экселя на сервере.

А почему все не выгрузить в табличный документ, а потом его сохранить как файл эксель?



0



4 / 4 / 4

Регистрация: 12.07.2011

Сообщений: 627

15.12.2016, 13:49

 [ТС]

9

Спасибо, разобрался.



0



  

Ricco

19.09.06 — 13:50

Поддерживаю удаленно 1С Торговля 9.0. Выслал им свой внешний отчет с выводом в Excel. Дает ошибку:

Excel = СоздатьОбъект(«Excel.Application»)

Неудачная попытка создания объекта (Excel.Application)

Спрашивал, есть ли у них Excel, говорят есть и работает. Нет мыслей что может быть. Кто знает?

  

smaharbA

1 — 19.09.06 — 13:52

1. авирь

2. ОО

3. нет прав на ОЛЕ

  

AcaGost

2 — 19.09.06 — 13:52

(0) Пусть закроют Excel

  

Ricco

3 — 19.09.06 — 13:57

(1) Нельзя узнать как регулируются права на OLE и что есть «ОО»?

  

Азат

4 — 19.09.06 — 13:58

(3) OO — Open Office

  

sapphire

5 — 19.09.06 — 14:13

(4) Ты его по OLE начился создавать? Тогда покажи пример.

  

Ricco

6 — 19.09.06 — 15:07

(5)      Таб.Записать(Файл,»XLS»);

   Excel = СоздатьОбъект(«Excel.Application»);

   Excel.SheetsInNewWorkbook = 1;

   ФайлExcel = Excel.Workbooks.Open(Файл);

   Excel.DisplayAlerts = -1;

   ФайлExcel.Save();

   Excel.Visible=-1;

   ФайлExcel.Windows(1).Activate();

Но тут проблемная строчка «Excel = СоздатьОбъект(«Excel.Application»);» практически первая, до остальных даже не доходит.

  

sapphire

7 — 19.09.06 — 15:11

А Excel установлен? :)
P.S:а зачем такой огород?

  

sapphire

8 — 19.09.06 — 15:14

Попробуй
ЗапуститьПриложение(Файл);

  

Ricco

9 — 19.09.06 — 15:14

(7) Excel установлен. А как проще?

  

sapphire

10 — 19.09.06 — 15:15

Можешь у себя проверить через формульный калькулятор.
ЗапуститьПриложение(«C:test.xls»)

  

Алгоритм

11 — 19.09.06 — 15:15

Excel = CreateObject(«Excel.Application»);

  

Heckfy

12 — 19.09.06 — 15:16

У пользователя 1С в правах стоит Использование в качестве ОЛЕ сервера? И смотри

(11)

  

sapphire

13 — 19.09.06 — 15:19

(11)(12) Судя по (6) это не нужно, достаточно (8)

  

smaharbA

14 — 19.09.06 — 15:21

(5) по ОЛЕ ОО давно научен общаться и даже с 1С

  

sapphire

15 — 19.09.06 — 15:25

(14) Это верно. Но, для этого нужно знать объектную модель ОО и как именно его вызывать.

  

gr13

16 — 19.09.06 — 15:25

у меня было такое… просто офис не был установлен)))

  

sapphire

17 — 19.09.06 — 15:25

(14) даже StarOffice 5.0 вызывался, но были проблемы с кодировками.

  

Ricco

18 — 19.09.06 — 15:27

(8) Раз запустился, а больше не хочет. То есть файл создается но не открывается, не ругается

  

sapphire

19 — 19.09.06 — 15:29

(18) Убей Excel-евские процессы

  

sapphire

20 — 19.09.06 — 15:31

ЗапуститьПриложение отрабатывает аналогично проводнику — передает винде управление

  

Ricco

21 — 19.09.06 — 15:31

(19) Как?

  

sapphire

22 — 19.09.06 — 15:32

Через диспетчер задач — процессы

  

gr13

23 — 19.09.06 — 15:39

(21) … гы гы гы… killtask

  

gr13

24 — 19.09.06 — 15:40

tasklist
taskkill

  

ru5t

25 — 19.09.06 — 18:10

вы должны закрыть ВСЕ экселевские процессы использующие файл, который вы хотите обработать. У меня так же были проблемы на этом этапе

  

smaharbA

26 — 19.09.06 — 18:38

(19)-(25) да ну ? и это поможет для Excel = СоздатьОбъект(«Excel.Application»); ?

  

ru5t

27 — 19.09.06 — 20:04

да , при наличии соответствующих прав .

jediAlex

4 / 4 / 4

Регистрация: 12.07.2011

Сообщений: 627

1

14.12.2016, 10:26. Показов 9115. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте. Делаю собственную конфигурацию в 1С8.3. Есть несколько обработок, которые выводят результат выборки данных в таблицу значений на форме и надо выгрузить эти данные в Excel. Проблема начинается с самой первой строки процесса выгрузки:

1C
1
ОтчетВExcel= Новый СОМОБъект("Excel.Application") ;

Вываливается ошибка «Недопустимая строка с указанием класса». Что не так? помогите пожалуйста. Во вложении скриншот сообщения об ошибке.

Миниатюры

Ошибка при создании объекта Excel.Application
 

0

о_____О

Эксперт 1С

224 / 223 / 37

Регистрация: 19.11.2010

Сообщений: 1,062

14.12.2016, 13:44

2

jediAlex, а excel установлен?

Добавлено через 1 минуту
comcntr.dll зареган в системе?

0

4 / 4 / 4

Регистрация: 12.07.2011

Сообщений: 627

14.12.2016, 13:51

 [ТС]

3

все есть, все установлено. Попробовал на локальной версии конфигурации — работает. Залил БД на SQL сервер и такое выскочило…

0

о_____О

Эксперт 1С

224 / 223 / 37

Регистрация: 19.11.2010

Сообщений: 1,062

14.12.2016, 13:58

4

Код где работает? На клиенте или сервере?

0

4 / 4 / 4

Регистрация: 12.07.2011

Сообщений: 627

15.12.2016, 09:13

 [ТС]

5

код на сервере работает

0

Эксперт 1С

3052 / 1999 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

15.12.2016, 09:15

6

jediAlex, надо на клиенте.

0

jediAlex

4 / 4 / 4

Регистрация: 12.07.2011

Сообщений: 627

15.12.2016, 10:19

 [ТС]

7

вот полный код процедуры на сервере:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
&НаСервере
Процедура ВыгрузитьОтчетВExcelНаСервере()
    // Вставить содержимое обработчика.
    ОтчетВExcel=Новый COMОбъект("Excel.Application");
Книга=ОтчетВExcel.Workbooks.Add();
Лист=Книга.Worksheets(1);
    Лист.Cells(1, 1).Value = СокрЛП("Отчет о выполнении календарногоплана(дата начала работ)");
    Лист.Cells(2, 1).Value = СокрЛП("Отчетная дата:");
    Лист.Cells(2, 2).Value=Объект.ОтчетнаяДата;
    Лист.Cells(3, 1).Value = СокрЛП("Наименование договора");
Лист.Cells(3, 2).Value = СокрЛП("Номер этапа") ;
 Лист.Cells(3, 3).Value = СокрЛП("Дата начала работ план");
 Лист.Cells(3, 4).Value = СокрЛП("Дата начала работ факт");
 Лист.Cells(3, 5).Value = СокрЛП("Отклонение, дней");
  Лист.Rows(1).Font.Bold=Истина;
   Лист.Rows(2).Font.Bold=Истина;
     Лист.Rows(3).Font.Bold=Истина;
    //Попытка
        
        Для Стр = 0 По ТаблицаВыгрузки.Количество()-1 Цикл
            
            Для Кол = 1 По ТаблицаВыгрузки.Колонки.Количество()-2 Цикл
                
                Если ТипЗнч(ТаблицаВыгрузки[Стр][Кол]) = Тип("Число") Тогда
                    // Установним формат для типа Число
                    //Лист.Cells(Стр + 2, Кол + 1).NumberFormat = "0,00";
                    Лист.Cells(Стр + 4, Кол).Value = ТаблицаВыгрузки[Стр][Кол];
                Иначе 
                    // Для всех других типов установим формат "Текстовый"
                    Лист.Cells(Стр + 4, Кол).NumberFormat = "@";
                    Если ЗначениеЗаполнено(ТаблицаВыгрузки[Стр][Кол]) Тогда
                    Лист.Cells(Стр + 4, Кол).Value = Строка(ТаблицаВыгрузки[Стр][Кол]);
                КонецЕсли;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
        ОтчетВExcel.Visible=Истина;
        //ExcelПриложение.DisplayAlerts = False;
        //Книга.SaveAs(ПолноеИмяФайла); 
        //ExcelПриложение.ActiveWorkbook.Close();
        //ExcelПриложение.Quit();
 
//КонецПопытки;
    
КонецПроцедуры

Добавлено через 1 минуту
вызов процедуры на клиенте:

1C
1
2
3
4
&НаКлиенте
Процедура ВыгрузитьОтчетВExcel(Команда)
    ВыгрузитьОтчетВExcelНаСервере();
КонецПроцедуры

Добавлено через 17 минут
вот полный код ошибки:

1C
1
2
3
4
{Обработка.ВыполнениеКалендарногоПланаПоДатеНачала.Форма.Форма.Форма(42)}: Ошибка при вызове конструктора (COMОбъект)
    ОтчетВExcel=Новый COMОбъект("Excel.Application");
по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класса

Причем обработок, в которых данные выгружаются в Excel 4. В одной код срабатывает, объект excel создается, а в других — нет. Во всех делал создание объекта Excel на сервере.

0

Эксперт 1С

476 / 413 / 93

Регистрация: 26.09.2012

Сообщений: 1,912

15.12.2016, 10:58

8

Когда ваш код выполняется на сервере, то и эксель с дллкой смотрятся на сервере и еще два миллиона параметров доступа. И судя по ошибке нет у вас экселя на сервере.

А почему все не выгрузить в табличный документ, а потом его сохранить как файл эксель?

0

4 / 4 / 4

Регистрация: 12.07.2011

Сообщений: 627

15.12.2016, 13:49

 [ТС]

9

Спасибо, разобрался.

0

In my C# application i am importing and exporting data to excel. I have office 2013.

I am using following code:

using Excel = Microsoft.Office.Interop.Excel;
Excel.Application _excelApp = null;
_excelApp = new Excel.Application();

This code was working fine but recently i installed Microsoft project professional 2013, it also update office. After this i am getting error in _excelApp = new Excel.Application();

Error is:

Unable to cast COM object of type ‘System.__ComObject’ to interface
type ‘Microsoft.Office.Interop.Excel.Application’. This operation
failed because the QueryInterface call on the COM component for the
interface with IID ‘{000208D5-0000-0000-C000-000000000046}’ failed due
to the following error: Error loading type library/DLL. (Exception
from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)).

pnuts's user avatar

pnuts

58.1k11 gold badges86 silver badges138 bronze badges

asked May 18, 2015 at 11:45

Deepak gupta's user avatar

1

@Deepak gupta, i can t comment so i post it here. Maybe Soner is right. I used to have the same problem so i decided to use the old way to open an Excel file (with an oledb command).

What do you need? Read an Excel or save a new one?

For example in my case i needed to read an Excel (that was and .xls or .xlsx):

               //Check whether file extension is xls or xslx
            if (fileExtension == ".xls")
                connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileLocation + ";Extended Properties="Excel 8.0;HDR=Yes;IMEX=2"";
            else if (fileExtension == ".xlsx")
                connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties="Excel 12.0;HDR=Yes;IMEX=2"";

            //Create OleDB Connection and OleDb Command            
            OleDbCommand cmd = new OleDbCommand();
            OleDbConnection con = new OleDbConnection(connectionString);

            cmd.CommandType = System.Data.CommandType.Text;
            cmd.Connection = con;

            OleDbDataAdapter dAdapter = new OleDbDataAdapter(cmd);
            con.Open();
            DataTable dtExcelSheetName = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            string getExcelSheetName = dtExcelSheetName.Rows[0]["Table_Name"].ToString();

            //send query, send query, fill adapter:
            cmd.CommandText = "SELECT * FROM [" + getExcelSheetName + "A1:GR255] WHERE [0] IS NOT NULL ";
            dAdapter.SelectCommand = cmd;
            dAdapter.Fill(dtExcelRecords);
            con.Close();

Or maybe you can try using this library ExcelLibrary that is described in this post Create Excel (.XLS and .XLSX) file from C#.

Community's user avatar

answered May 18, 2015 at 13:23

paulofer85's user avatar

paulofer85paulofer85

54510 silver badges15 bronze badges

This is way to create Object and thereby to copy the worksheet from One excel to another Excel

Dim CopyFrom As Object
Dim CopyTo As Object
Dim CopyThis As Object
Dim xl As Object

    xl = CreateObject("Excel.Application")
    xl.Visible = False
    CopyFrom = xl.Workbooks.Open("E:EXCELFrom.xls")
    CopyTo = xl.Workbooks.Open("E:EXCELTo.xls")
    For i = 0 To 1
        ''To use a password: Workbooks.Open Filename:="Filename", Password:="Password"
        If i = 0 Then
            CopyThis = CopyFrom.Sheets(1)
            CopyThis.Copy(After:=CopyTo.Sheets(CopyTo.Sheets.Count))
            CopyTo.Sheets(3).Name = "Sheet3"
        Else
            CopyThis = CopyFrom.Sheets(2)
            CopyThis.Copy(After:=CopyTo.Sheets(CopyTo.Sheets.Count))
            CopyTo.Sheets(4).Name = "Sheet4"
        End If
    Next
    CopyTo.Sheets(1).Activate()
    CopyTo.Save()
    'CopyTo.SaveAs("E:EXCELCheck.xls")
    xl.Quit()

answered Jun 15, 2015 at 11:13

Pavithran's user avatar

The problem has been resolved. When i installed Microsoft project professional 2013, it also update microsoft office, but the updation of office was not successful.

When i repair office, it started working fine.

answered Oct 16, 2015 at 8:35

Deepak gupta's user avatar

Deepak guptaDeepak gupta

1,93811 silver badges11 bronze badges

После обновления платформы 1С на последнюю текущую версию столкнулся с ошибкой в обработке, которая работала еще до сегодняшнего дня.

Сохраненное изображение 2016-3-3_21-37-21.603

Вызов осуществляется на сервере 1С:Предприятия, в управляемом приложении.

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

При этом сервер приложения 1С 32х разрядный, хотя и стоит на Windows 64 битной версии.

Если запускать этот же метод на клиентской части, то помогает стандартное действие, выполненное с правами администратора:

Regsvr32 «C:Program Files (x86)1cv8(версия платформы)bincomcntr.dll»

Однако не в этом случае…

Поиск по интернету и «гугление» конечно помогает в большинстве случаев 🙂 однако вариантов было перепробовано несколько и ничего не помогло кроме следующего:

  1. Заходим на сервер приложений 1С под локальным админом
  2. Запускаем DCOMCNFG  (Консоль настроек «Component  Services»)
    1. Открываем ветку Console Root -> Component Services ->  Computers ->  My computer ->  DCOM Config
    2. Ищем «Microsoft Excel Application»
    3. Если нашли, то переходим к пункту 4 (Настраиваем свойства DCOM компонента «Microsoft Excel Application»)
    4. Закрываем «Component  Services»
  3. Настройка реестра
    1. Запускаем REGEDIT
    2. Открываем ветку ComputerHKEY_CLASSES_ROOTAppIDEXCEL.EXE, если ее нет, то создаем
    3. Создаем в ней строковый параметр AppID  = {00020812-0000-0000-C000-000000000046}
    4. Выполняем команду «mmc comexp.msc /32», которая делает то же что и DCOMCONFIG, но позволяет видеть  32 битные компоненты.
    5. После этого в Component Services должен появиться «Microsoft Excel Application»
  4. Настраиваем свойства DCOM компонента «Microsoft Excel Application»
    1. Закладка «Security»
      1. «Launch and Activation Permissions» — Customize — Edit
        1. Добавляем пользователя, под которым запускается  агент сервера 1С
        2. Назначем ему только следующие права  (allow):
          1. Local Launch
          2. Local Activation
      2. «Access  Permissions» — Customize — Edit
        1. Добавляем пользователя, под которым запускается  агент сервера 1С
        2. Назначаем ему только следующие права  (allow):
          1. Local Access
    2. Закладка «Identity»
      1. Должно быть выбрано «The launching user»
  5. Системные папки
    1. Папка «C:WindowsSysWOW64configsystemprofileDesktop»
      1. Проверяем наличие папки , если нет -то создаем.
      2. Заходим в свойства этой папки.
      3. Закладка Security
      4. Добавляем, если нет, пользователя, под которым запускается агент сервера 1С
      5. Добавляем право «Read» и «Write»
    2. Папка «C:WindowsSystem32configsystemprofileDesktop»
      1. Проверяем наличие папки , если нет -то создаем.
      2. Заходим в свойства этой папки.
      3. Закладка Security
      4. Добавляем, если нет, пользователя, под которым запускается агент сервера 1С
      5. Добавляем право «Read» и «Write»

Источник информации © Инфостарт.

Подскажите кто-нибудь сталкивался с данной ошибкой?
Делаю отчет (XMLExcelReport_RU) в пакете, но возникла ошибка.
Причем файл создается в нужной мне папки, но возникает ошибка.

логи
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. —> System.NullReferenceException: Object reference not set to an instance of an object.

at Dynamics.Ax.Application.ComOfficeDocument_RU.Getcomerrormsg() in ComOfficeDocument_RU.getCOMErrorMsg.xpp:line 7

at Dynamics.Ax.Application.ComOfficeDocument_RU.Initapplication(Boolean _bVisible, Int32 _displayAlerts, Boolean , Boolean ) in ComOfficeDocument_RU.initApplication.xpp:line 32

at Dynamics.Ax.Application.ComOfficeDocument_RU.Initapplication(Boolean _bVisible, Int32 _displayAlerts)

at Dynamics.Ax.Application.ComOfficeDocument_RU.Newfile(String _template, Boolean _bVisible, Int32 _displayAlerts, Boolean , Boolean , Boolean ) in ComOfficeDocument_RU.newFile.xpp:line 19

at Dynamics.Ax.Application.ComOfficeDocument_RU.@Newfile(String _template, Boolean _bVisible, Boolean , Boolean )

at Dynamics.Ax.Application.ComOfficeDocument_RU.Newfile(String _template, Boolean _bVisible)

at Dynamics.Ax.Application.XmlExcelReport_NormsExpense_VSN.Processinexcel(String _filename) in XmlExcelReport_NormsExpense_VSN.processInExcel.xpp:line 60

at Dynamics.Ax.Application.XMLExcelReport_RU.Run() in XMLExcelReport_RU.run.xpp:line 78

— End of inner exception stack trace —

После обновления платформы 1С на последнюю текущую версию столкнулся с ошибкой в обработке, которая работала еще до сегодняшнего дня.

Сохраненное изображение 2016-3-3_21-37-21.603

Вызов осуществляется на сервере 1С:Предприятия, в управляемом приложении.

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

При этом сервер приложения 1С 32х разрядный, хотя и стоит на Windows 64 битной версии.

Если запускать этот же метод на клиентской части, то помогает стандартное действие, выполненное с правами администратора:

Regsvr32 «C:Program Files (x86)1cv8(версия платформы)bincomcntr.dll»

Однако не в этом случае…

Поиск по интернету и «гугление» конечно помогает в большинстве случаев 🙂 однако вариантов было перепробовано несколько и ничего не помогло кроме следующего:

  1. Заходим на сервер приложений 1С под локальным админом
  2. Запускаем DCOMCNFG  (Консоль настроек «Component  Services»)
    1. Открываем ветку Console Root -> Component Services ->  Computers ->  My computer ->  DCOM Config
    2. Ищем «Microsoft Excel Application»
    3. Если нашли, то переходим к пункту 4 (Настраиваем свойства DCOM компонента «Microsoft Excel Application»)
    4. Закрываем «Component  Services»
  3. Настройка реестра
    1. Запускаем REGEDIT
    2. Открываем ветку ComputerHKEY_CLASSES_ROOTAppIDEXCEL.EXE, если ее нет, то создаем
    3. Создаем в ней строковый параметр AppID  = {00020812-0000-0000-C000-000000000046}
    4. Выполняем команду «mmc comexp.msc /32», которая делает то же что и DCOMCONFIG, но позволяет видеть  32 битные компоненты.
    5. После этого в Component Services должен появиться «Microsoft Excel Application»
  4. Настраиваем свойства DCOM компонента «Microsoft Excel Application»
    1. Закладка «Security»
      1. «Launch and Activation Permissions» — Customize — Edit
        1. Добавляем пользователя, под которым запускается  агент сервера 1С
        2. Назначем ему только следующие права  (allow):
          1. Local Launch
          2. Local Activation
      2. «Access  Permissions» — Customize — Edit
        1. Добавляем пользователя, под которым запускается  агент сервера 1С
        2. Назначаем ему только следующие права  (allow):
          1. Local Access
    2. Закладка «Identity»
      1. Должно быть выбрано «The launching user»
  5. Системные папки
    1. Папка «C:WindowsSysWOW64configsystemprofileDesktop»
      1. Проверяем наличие папки , если нет -то создаем.
      2. Заходим в свойства этой папки.
      3. Закладка Security
      4. Добавляем, если нет, пользователя, под которым запускается агент сервера 1С
      5. Добавляем право «Read» и «Write»
    2. Папка «C:WindowsSystem32configsystemprofileDesktop»
      1. Проверяем наличие папки , если нет -то создаем.
      2. Заходим в свойства этой папки.
      3. Закладка Security
      4. Добавляем, если нет, пользователя, под которым запускается агент сервера 1С
      5. Добавляем право «Read» и «Write»

Источник информации © Инфостарт.

Конфигурация:
— MS Windows Server 2008 R2 64bit
— MS SQL Server 2008 R2
— MS Excel 2003

В хранимой процедуре создаем объект Excel примерно таким образом:

DECLARE @iXLApp int, @iRetCode int
EXEC @iRetCode = sp_OACreate 'Excel.Application', @iXLApp OUTPUT, 4

Получаем указанную ошибку: -2147024891 (0x80070005) Access is denied.

Долгие мучительные поиски привели к следующему:

  • Проверить, что включен параметр SQL сервера Ole Automation Procedures (правда, если он не включен — выдаются совсем другие сообщения об ошибках ;-) ):

    EXEC sp_configure 'Ole Automation Procedures', 1
    RECONFIGURE
  • Если операционка 32-битная, то может помочь этот шаг:

    • запустить DCOMCNFG
    • далее в разделе Component Services/Computers/My Computer/DCOM Config нужно найти пункт Microsoft Excel Application
    • клик правой кнопкой Свойства (Properties)
    • перейти на закладку Безопасность (Security)
    • в разделе Разрешения на запуск и активацию (Launch and Activation Permissions) выбрать Настроить (Customize), нажать Изменить… (Edit…), в открывшемся окне добавить для пользователя, под которым запускается служба SQL Server, права Локальный запуск, Локальная активация (Local Launch, Local Activation)
    • в разделе Права доступа (Access Permissions) выбрать Настроить (Customize), нажать Изменить… (Edit…), в открывшемся окне добавить для пользователя, под которым запускается служба SQL Server, права Локальный доступ (Local Access)
  • Если операционка 64-битная, и в разделе Component Services/Computers/My Computer/DCOM Config НЕТ пункта Microsoft Excel Application, можно попробовать запустить консоль (MMC) в 32-битном режиме — возможно пункт Microsoft Excel Application появится. Далее все действия как в описанном выше шаге.
    Зпуск из командной строки:

    mmc /32

    И добавить оснастку Component Services — меню Консоль / Добавить или удалить оснастку… (File / Add/Remove Snap-in…)
  • Если не помогает ничего описанное выше, то действуем в лоб:

    • в разделе Component Services/Computers на My Computer клик правой кнопкой, Свойства (Properties)
    • закладка Безопасность COM (COM Security)
    • в разделе Права доступа (Access Permissions) нажать Изменить настройки по умолчанию… (Edit Default…), в открывшемся окне добавить для пользователя, под которым запускается служба SQL Server, права Локальный доступ (Local Access)
    • в разделе Разрешения на запуск и активацию (Launch and Activation Permissions) нажать Изменить настройки по умолчанию… (Edit Default…), в открывшемся окне добавить для пользователя, под которым запускается служба SQL Server, права Локальный запуск, Локальная активация (Local Launch, Local Activation)

Ссылки, посвященные этой теме:
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/52767b42-0…
http://www.sql.ru/forum/actualthread.aspx?tid=525718
http://www.sql.ru/forum/actualthread.aspx?tid=197126

Понравилась статья? Поделить с друзьями:
  • Ошибка при создании рабочего каталога the bat windows 10
  • Ошибка при создании объекта cadescom store
  • Ошибка при создании профиля инстаграм
  • Ошибка при создании общего доступа
  • Ошибка при создании профиля ets 2