Автор Истребитель, 22 июл 2015, 17:48
0 Пользователей и 1 гость просматривают эту тему.
При попытке создать COM объект Excel.Application вылезает стандартная ошибка:
Ошибка получения объекта COM: -2147467262(0x80004002): No such interface support
Однако, если открыть диспетчер задач, то приложение excel.exe запускается!
Приложение excel x32, 1Cка тоже x32.
В списках классов (HKLMSoftwareClasses) класс Excel.Application присутствует.
Права на Distributed COM дал своему юзеру, перелогинился, не помогло, дал всем (Everyone), не помогло.
База файловая.
Попробуйте так
Попытка
ОбъектЭксель = ПолучитьCOMОбъект(СокрЛП(ФайлЗагрузки));//ФайлЗагрузки - путь к файлу. строка
Исключение
Сообщить("Неудачная попытка открытия файла:"+СокрЛП(ФайлЗагрузки));
Возврат;
КонецПопытки;
КомОбъектЗагрузки = ОбъектЭксель.WorkSheets(1);
Очень забавно. Если перед вызовом функции с параметрами (Путь,Excel.Application) вызвать её без указания Excel.Application то повторный вызов уже с указанием Excel.Application работает!
Т.е. так работает:
ПолучитьCOMОбъект(ИмяФайла,)
ПолучитьCOMОбъект(ИмяФайла,"Excel.Application")
Так не работает:
ПолучитьCOMОбъект(ИмяФайла,"Excel.Application")
В любом случае, в дальнейшем вылезает вообще непонятная ошибка:
{Форма.Форма.Форма(47)}: Ошибка при вызове метода контекста (ПрочитатьЛистExcel)
ПрочитатьЛистExcel(,ПолучитьCOMОбъект(ИмяФайла));
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'COMОбъект'
Поздравляю, походу вы открыли для себя впервые особенности управляемого приложения.
Ок, где мне почитать про эти «особенности» чтобы разобраться как выполнить такое простое задание, как чтение excel файла?
Путем проб и ошибок
Пробуйте «&НаСервере» всё это делать
Помогли — Скажи спасибо! Решил сам — поделись решением!
Не сочтите за издевательство: http://v8.1c.ru/metod/faq2/
&НаКлиенте — это только форма, видимость,доступность, условное офомление и т.д.
&НаСервере — это работа с объектами. Добавить строки, заполнить объект и т.д.
С клиента можно вызывать сервер, наоборот — нельзя.
Все прочие особенности = интернет большой, уверен справитесь
Дааа. Простейшие вещи теперь хрен сделаешь. Почитал я это. Замечательно! Погуглил даже. Простейшая задача, неясно как решать.
Я хочу создать программно документ, заполнить его на основании данных из экселя, и открыть.
На клиенте я это сделать не могу, на клиенте «Документы» неопределена (нельзя создать документ). На сервере тоже не могу, нельзя открыть форму. На клиент нельзя передать ссылку на документ (когда пытаюсь сделать «Возврат Док», где Док это новый документ, вылезает ошибка передачи данных). Гугл «1с 8.3 передача документа с сервера на клиент» ничего не дал.
Что делать?
Остается сесть в углу и плакать.
На клиенте формируете структуры с простыми данными (строки, даты и т.д.) передаете на сервер. Создаете/ищите документ на сервере и возвращаете ссылку на документ.
13.01.15 — 12:18
Здравстуйте.
Перестало работать:
Ексель = Новый COMОбъект(«Excel.Application»);
по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класса
Куда смотреть?
Спасибо.
1 — 13.01.15 — 12:20
не установлен эксель, смотреть в программы и компоненты
2 — 13.01.15 — 12:20
(1) Установлен. 2003
3 — 13.01.15 — 12:25
Проверить наличие HKEY_CLASSES_ROOTExcel.Application в реестре.
4 — 13.01.15 — 12:33
(3) Наличиствует. + HKEY_CLASSES_ROOTExcel.Application.11
5 — 13.01.15 — 12:34
Работало до недавнего времени. Года три обработке
6 — 13.01.15 — 12:35
В релизе 8.3.5.1400 кажется что-то исправляли с подключением ком
7 — 13.01.15 — 12:38
создай этот же COM объект в блокноте на VB, думаю проблема не в 1С
8 — 13.01.15 — 13:05
(7) Если можно — поподробнее…
9 — 13.01.15 — 13:13
(8) А точно 2003? Бывает, что обновляются до 2007 и усе
10 — 13.01.15 — 13:15
(4) Ну так попробуй указать явно «Excel.Application.11»
11 — 13.01.15 — 13:18
+(10) И посмотри, на всякий случай, в реестре в CLSID — путь правильный?
12 — 13.01.15 — 13:23
(11) Там вообще не путь. А {00024500-0000-0000-C000-000000000046}
13 — 13.01.15 — 13:28
(12) В разделе CLSID этот ключ найди и посмотри куда LocalServer (LocalServer32) смотрит.
14 — 13.01.15 — 13:48
(13) Путь правильный
15 — 13.01.15 — 13:49
Пробовал (10)?
16 — 13.01.15 — 13:49
Да
17 — 13.01.15 — 14:15
(8) Создай (в блокноте) файл с расширением .vbs
Вставь туда
set xl = CreateObject(«Excel.Application»)
xl.Workbooks.Add
xl.Visible = 1
Сохрани и запусти.
Что получилось?
18 — 13.01.15 — 14:59
(17) Получилось — открылась новая книга Ексель
19 — 13.01.15 — 15:03
Причем оба варианта — Excel.Application и Excel.Application.11
20 — 13.01.15 — 15:54
Люди добрые, есть еще варианты причин ошибки?
21 — 13.01.15 — 15:57
(20) Запустить от администратора пробовал?
22 — 13.01.15 — 16:01
(21) Что запустить — Предприятие? Вообще-то учетка админская…
23 — 13.01.15 — 16:10
(22) Обновись на старый релиз
24 — 13.01.15 — 16:11
(22) Да предприятие, в win7/2008 и старше админские права не означают полные права.
25 — 13.01.15 — 16:19
Не помогло…
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)
27 — 13.01.15 — 16:48
1) Проделал.
2) Папка есть, только вместо Desktop — по русски Рабочий стол
Не помогло…
28 — 13.01.15 — 16:51
(27) а если указать имя сервера в конструкторе?
localhost
29 — 13.01.15 — 16:51
(18) То есть, Excel спокойно коннектится.
Наивный вопрос: а откуда коннектится? С клиента или с сервера?
30 — 13.01.15 — 16:52
(28) То это будет уже совсем другая история…
31 — 13.01.15 — 16:59
(29) Клиент предприятия на терминальном сервере. Там же запускал скрипт.
32 — 13.01.15 — 17:00
Или вопрос не про то?
33 — 13.01.15 — 17:03
(32) Про то. Тогда — странно очень.
Может, обработку правили — и буковку не из того алфавита поставили? Или (6)…
34 — 13.01.15 — 17:05
Работало везде «еще вчера»
Обработку не правили уже полгода (тем более в этой строке). Ексель не переустанавливали, т.к. см. выше
35 — 13.01.15 — 17:05
(33)(32) Не про то.
Создание СOM-объекта происходит &НаКлиенте или &НаСервере?
36 — 13.01.15 — 17:06
&НаСервере
37 — 13.01.15 — 17:08
Сейчас надо &НаКлиенте?
38 — 13.01.15 — 17:09
(37) дык у тебя на сервере и пытается создать объект
39 — 13.01.15 — 17:10
Так он и vbs запускал на сервере-то… И обработка раньше у него работала…
40 — 13.01.15 — 17:11
Значит только костылями. Заказчику покажи это:
Вопросы серверной автоматизации Office
https://support.microsoft.com/kb/257757
Корпорация Microsoft на сегодняшний день не рекомендует производить и не поддерживает автоматизацию программ из пакета Microsoft Office с помощью автоматических, неинтерактивных клиентских приложений или компонентов (включая ASP, DCOM и службы NT), поскольку при запуске в этом окружении программы пакета Office могут работать нестабильно или зависать.
41 — 13.01.15 — 17:12
(39) На каком сервере — на терминальном или 1С-ном?
42 — 13.01.15 — 17:13
(41) Предполагаешь, что они сервер переставляли? Говорит ведь, что раньше — работало.
43 — 13.01.15 — 17:16
(42) 1С-ный по любому переставляли.
Для 8.3 есть еще вариант, что включили в профилях безопасности ограничение на COM-объекты.
44 — 13.01.15 — 17:28
Так что с 1С-ным сервером не так?
45 — 13.01.15 — 17:49
(44) Пока все нормально (глянь на всякий случай профили безопасности).
Терминальный сервер и сервер 1С на одной машине работают?
46 — 14.01.15 — 08:56
Проблема остается.
(45) На разных.
47 — 14.01.15 — 09:15
Явно автор не раскрыл когда у него перестало работать. Я боюсь, что после пытания паяльником выяснится, что был установлен Windows 2008 x 64 сервер. Установлен сервер 1с предприятия х 64. Обновлена версия 1с предприятия с 8.2 на 8.3. Запуск сервера 1с предприятия раньше запускался от имени System, а сейчас запускается от имени Usr1c8. Раньше 1с работала в режиме толстого клиента, а сейчас на управляемых формах.
И вот после этого НЕОЖИДАННО перестал работать Exell в режиме ОЛЕ.
Я почему-то не очень сильно удивляюсь
48 — 14.01.15 — 09:45
(47) Что нужно изменить в коде чтобы работала конструкция Новый COMОбъект(«Excel.Application»);
Все указанные изменения имеют место быть. Обработка сделана под управляемые формы
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.
50 — 14.01.15 — 10:07
(46) Вот это «Получилось — открылась новая книга Ексель» делалось на сервере 1С?
51 — 14.01.15 — 12:04
Помогла переустановка офиса на сервере.
Теперь не хочет открывать шаблон:
Ошибка при вызове метода контекста (Add)
Ексель.WorkBooks.Add(«\……..TemplateZayvka.xlt»);
Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу «………..TemplateZayvka.xlt». Это может быть вызвано одной из следующих причин.
• Указан несуществующий файл или путь.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.
Файл существует. Никем не открыт. Имя не с чем не совпадает
52 — 14.01.15 — 12:04
Доступ полный для всех
53 — 14.01.15 — 12:22
Скрипт открывает этот файл
54 — 14.01.15 — 12:59
(51) см. 49
55 — 14.01.15 — 13:04
Только в пункте 13. Select «The interactive user.» вместо interactive user надо указать конкретного пользователя под котороым запускается сервер 1С-Предприятие.
56 — 14.01.15 — 13:07
(47) Обычно такое перестает работать после обновления Форточек.
У нас как то было, при обновлении рабочей станции, т.е. обычного ПК. Но офис там был 2007-ой, обновление на него так подействовало
57 — 14.01.15 — 13:08
По (49) все проделано. «Microsoft Excel Application» такой ветки в настройках нет. В тех что есть стоит «Запускающий пользователь» («The interactive user»? ).
58 — 14.01.15 — 13:10
(57) так вот надо не «Запускающий пользователь» а тот под которым запускается сервер 1С
59 — 14.01.15 — 13:27
Сервер запускается системной учетной записью. И куда пихать этого пользователя — нужной ветки нет
60 — 14.01.15 — 13:27
а почему нет «Microsoft Excel Application»??
61 — 14.01.15 — 13:31
(60) У нас разделение труда. Офис устанавливает другая служба. Не могу сказать. Есть «Office Licensing COM Server 14»
62 — 14.01.15 — 13:34
(59) ну, поменяйте в строке запуска сервера 1с системную запись на другого пользователя. Зачем вы системную туда вбухали? Можно было оставить пользователя, который там по умолчанию был: Usr1cv8
63 — 14.01.15 — 13:38
(62) Смысл менять в сервере 1с, если его надо прописать в настройках DCOM Екселя — некуда писать…
64 — 14.01.15 — 13:56
(61) похоже из-за этого и не работает, «Microsoft Excel Application» должен быть в ветке «Настройка DCOM»
65 — 14.01.15 — 14:09
Как его туда запихнуть? Не вручную же…
На других серверах тоже нет. Есть например «Книга Microsoft Office Excel 2007»
66 — 14.01.15 — 14:15
(65) Да, действительно, почему-то в серверных ОС этой ветки нет…
67 — 14.01.15 — 15:01
может по коду приложения поискать {00024500-0000-0000-C000-000000000046} ?
Dolphinbet
68 — 28.01.15 — 09:31
Подскажите кто-нибудь сталкивался с данной ошибкой?
Делаю отчет (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 —
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
58k11 gold badges85 silver badges137 bronze badges
asked May 18, 2015 at 11:45
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#.
answered May 18, 2015 at 13:23
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
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 guptaDeepak gupta
1,93810 silver badges11 bronze badges
jediAlex 4 / 4 / 4 Регистрация: 12.07.2011 Сообщений: 623 |
||||
1 |
||||
14.12.2016, 10:26. Показов 9006. Ответов 8 Метки нет (Все метки)
Здравствуйте. Делаю собственную конфигурацию в 1С8.3. Есть несколько обработок, которые выводят результат выборки данных в таблицу значений на форме и надо выгрузить эти данные в Excel. Проблема начинается с самой первой строки процесса выгрузки:
Вываливается ошибка «Недопустимая строка с указанием класса». Что не так? помогите пожалуйста. Во вложении скриншот сообщения об ошибке. Миниатюры
0 |
о_____О 224 / 223 / 37 Регистрация: 19.11.2010 Сообщений: 1,062 |
|
14.12.2016, 13:44 |
2 |
jediAlex, а excel установлен? Добавлено через 1 минуту
0 |
4 / 4 / 4 Регистрация: 12.07.2011 Сообщений: 623 |
|
14.12.2016, 13:51 [ТС] |
3 |
все есть, все установлено. Попробовал на локальной версии конфигурации — работает. Залил БД на SQL сервер и такое выскочило…
0 |
о_____О 224 / 223 / 37 Регистрация: 19.11.2010 Сообщений: 1,062 |
|
14.12.2016, 13:58 |
4 |
Код где работает? На клиенте или сервере?
0 |
4 / 4 / 4 Регистрация: 12.07.2011 Сообщений: 623 |
|
15.12.2016, 09:13 [ТС] |
5 |
код на сервере работает
0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
15.12.2016, 09:15 |
6 |
jediAlex, надо на клиенте.
0 |
jediAlex 4 / 4 / 4 Регистрация: 12.07.2011 Сообщений: 623 |
||||||||||||
15.12.2016, 10:19 [ТС] |
7 |
|||||||||||
вот полный код процедуры на сервере:
Добавлено через 1 минуту
Добавлено через 17 минут
Причем обработок, в которых данные выгружаются в Excel 4. В одной код срабатывает, объект excel создается, а в других — нет. Во всех делал создание объекта Excel на сервере.
0 |
476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,910 |
|
15.12.2016, 10:58 |
8 |
Когда ваш код выполняется на сервере, то и эксель с дллкой смотрятся на сервере и еще два миллиона параметров доступа. И судя по ошибке нет у вас экселя на сервере. А почему все не выгрузить в табличный документ, а потом его сохранить как файл эксель?
0 |
4 / 4 / 4 Регистрация: 12.07.2011 Сообщений: 623 |
|
15.12.2016, 13:49 [ТС] |
9 |
Спасибо, разобрался.
0 |