не удалось запустить 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. enter image description here

Я выбрал быстрый ремонт enter image description here

Перепробовал мою программу снова и все заработало!

Ответ 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.