it-roy-ru.com

невозможно преобразовать COM-объект типа "Microsoft.Office.Interop.Excel.ApplicationClass" в "Microsoft.Office.Interop.Excel.Application" "

Это моя первая попытка получить некоторые данные из Excel из одного консольного приложения C #.

Я получаю сообщение об ошибке «невозможно привести объект COM типа« Microsoft.Office.Interop.Excel.ApplicationClass »к« Microsoft.Office.Interop.Excel.Application »».

Этот код использовал «Библиотеку объектов Microsoft Excel 12.0», и я дал ссылку на Microsoft.Office.Interop.Excel.

Тем не менее, я не мог преодолеть эту ошибку - которая, я считаю, имеет свое быстрое решение.

Я немного покопался на этом сайте и наткнулся на это решение: Тип взаимодействия не может быть встроен

Однако я не мог понять, поэтому не мог реализовать то, что было предложено в качестве решения.

Моя .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();

    }

}
}
15
Aykut Saribiyik

Если это не ошибка, связанная с кодом, пожалуйста, удалите указанный ниже ключ из реестра.

Шаги:

Пуск -> Выполнить -> 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. 

Дайте мне знать, если это решение вам не помогло

22
Jayesh Goyani

Microsoft Office 365

Я работал под управлением Microsoft Office 365 с Windows 10 и пробовал упомянутые решения, чтобы удалить раздел реестра безуспешно.

Я подошел к панели управления, пытаясь восстановить пакет Office 365 .  enter image description here

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

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

10
Alex

Я уверен, что ответы на этот вопрос (и аналогичные вопросы), предлагающие редактирование реестра и удаление старых ссылок на версии Office, которых больше нет на компьютере , являются правильными.

Я только добавляю этот ответ, потому что в настоящее время я пинаю себя. Два часа потратил охоту на ключи в реестре и никуда не деться. Последний бросок кубика состоял в том, чтобы попытаться выполнить простое исправление в Microsoft Office, и внезапно моя ошибка исчезла. 

... мне кажется, стоит попробовать исправить, прежде чем слишком углубляться в ручное редактирование реестра.

5
hawbsl

И 1.7 и 1.8 в реестре . Решено путем удаления:

HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}\1.8
0
Janis S.

Машина была обновлена ​​до 64-разрядной версии Office 2016, и интерфейс COM выдавал исключения при вызове из 32-разрядного приложения. У него не было старых записей TypeLib, подобных тем, что были в ответе Джаеша.

Сравнение трассировок ProcessMonitor с работающим компьютером с Office 2016 привело к тому, что в реестре появились тупые ключи реестра 

HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{00024 ..

Рабочая машина проверит несуществующий раздел реестра и вернет

ИМЯ НЕ НАЙДЕНО

У неисправного компьютера был раздел реестра, но вскоре после этого возникнет исключение.

После многократного удаления ключа реестра, повторного запуска трассировки, удаления следующего неисправного ключа функциональность интерфейса COM была восстановлена.

0
bds