не удалось запустить COM-объект типа "microsoft.Office.Interop.Excel.ApplicationClass" в "microsoft.Office.Interop.Excel.Application"
Это моя первая попытка захватить некоторые данные из excel из одного консольного приложения С#.
Я получаю сообщение об ошибке "неспособный передать объект COM типа" microsoft.Office.Interop.Excel.ApplicationClass "в" microsoft.Office.Interop.Excel.Application ".
Этот код использовал "библиотеку объектов Microsoft Excel 12.0", и я дал ссылку на Microsoft.Office.Interop.Excel.
Тем не менее, я не мог преодолеть эту ошибку, которая, как я считаю, имеет свое быстрое решение.
Я немного выкопал этот сайт и наткнулся на это решение: тип Interop не может быть встроен
Однако я не мог понять, поэтому не мог реализовать то, что было предложено в качестве решения.
Моя.Net версия 4.5.
Любая помощь очень ценится.
Заранее спасибо.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;
namespace deneme
{
class Program
{
static void Main(string[] args)
{
Excel.Application xlApp = new Excel.Application();
xlApp.Visible = true; // <-- excel application
xlApp.DisplayAlerts = false;
// Open the workbook.
Excel.Workbook wBook = xlApp.Workbooks.Open("C:\\FNN\\XLA\\fnnComTemplate.xlsx",
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
// get the sheet
Excel.Worksheet wSheet = wBook.Sheets[0];
// foreach (Excel.Worksheet sheet in wBook.Sheets) { if (sheet.Name == "templateSheet") { wSheet = sheet; } }
Excel.Range rng = wSheet.get_Range("A1");
aux = wSheet.Range["F6"].Value;
Console.WriteLine("interop result:" + aux);
Console.ReadLine();
}
}
}
Ответы
Ответ 1
Если это не ошибка, связанная с кодом, пожалуйста, удалите ниже указанный ключ из реестра.
шаги:
Start--> Выполнить → regedit → HKEY_CLASSES_ROOT--> TypeLib → {00020813-0000-0000-C000-000000000046} → 1.8/1.7 (Удалить)
Решение: Эта проблема может быть решена путем удаления недопустимого ключа реестра, оставшегося из более высокой версии Office. Следуйте приведенным выше инструкциям.
Причина. Эта проблема вызвана переходом к ключу реестра, если вы изменили версию Microsoft Office с Office 2010 до Office 2007 или Office 2013 на Office 2010 или 2007.
Дайте мне знать, не поможет ли вам это решение
Ответ 2
Microsoft Office 365
Я работал под управлением Microsoft Office 365 с Windows 10 и пробовал упомянутые решения, чтобы удалить раздел реестра без успеха.
Я подошел к панели управления в попытке восстановить пакет Office 365.
Я выбрал быстрый ремонт
Перепробовал мою программу снова и все заработало!
Ответ 3
Я уверен, что ответы на этот вопрос (и подобные вопросы), предлагающие редактировать реестр и удалять старые ссылки на версии Office, больше не находятся на машине , верны.
Я только добавляю этот ответ, потому что я сейчас пинаю себя. Два часа отработали ключи от охоты в реестре и никуда не денутся. Последний бросок кости состоял в том, чтобы попробовать простой ремонт в Microsoft Office, и вдруг моя ошибка исчезла.
... мне кажется, стоит попробовать ремонт, прежде чем слишком глубоко вносить изменения в реестр вручную.
Ответ 4
Машина была обновлена до 64-битного Office 2016, а интерфейс COM выдавал исключения при вызове из 32-разрядного приложения. У него не было старых записей TypeLib, таких как ответы в Jayesh.
Сравнение следов ProcessMonitor с рабочей машиной с Office 2016 привело к тому, что выглядит как тупиковые ключи реестра в
HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{00024..
Рабочая машина проверит наличие несуществующего раздела реестра и возвращает
ИМЯ НЕ НАЙДЕНО
У неисправной машины был раздел реестра, но вскоре после этого будет исключение.
После неоднократного удаления раздела реестра, повторного запуска трассировки, удаления следующего сбойного ключа, функциональность COM-интерфейса была восстановлена.
Ответ 5
Имел 1.7 и 1.8 в реестре. Разрешено путем удаления:
HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}\1.8
Ответ 6
Построить проект в x64 это решило проблему для меня
Ответ 7
Используя тот же самый код, я получил такую же проблему в ноутбуке, когда все работало нормально на другом. Я пробовал различные решения, найденные здесь и там в Интернете, но в конечном итоге это было явное определение использования не 32-битной версии библиотеки. Для этого в визуальной студии мне нужно было пометить, а затем снять флажок "Предпочитаю 32-бит" в разделе сборки конфигурации проекта, в котором добавлен <Prefer32Bit>false</Prefer32Bit>
в файле.csproj.