Ошибка Microsoft.Office.Interop.Excel при инициализации (Office 2016)

Это код, который я использовал до установки Office 2016.

var excelApp = new Excel.Application();
excelApp.Visible = true;
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(finfo.FullName, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, false, false);
Excel.Sheets excelSheets = excelWorkbook.Worksheets;
Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
var cellValue =(excelWorksheet.Cells[a, b] as Excel.Range).Value;

Код работал нормально, но после установки Office 2016 я заметил, что не могу использовать using Excel = Microsoft.Office.Interop.Excel;

Единственная совместимая библиотека, которую я нашел, это

Microsoft.Office.Core (библиотека объектов Microsoft Office 16.0)

Я не смог найти никаких примеров доступа к файлам Excel. Есть ли другой способ доступа к файлам Excel с установленным Office 2016 (PIA)?

Это ошибка, которую я получаю, когда пытаюсь запустить код.

Невозможно преобразовать COM-объект типа «System .__ ComObject» к типу интерфейса «Microsoft.Office.Interop.Excel.Application». Эта операция завершилась неудачно, поскольку вызов QueryInterface для COM-компонента для интерфейса с IID «{000208D5-0000-0000-C000-000000000046}» завершился неудачно из-за следующей ошибки: Интерфейс не зарегистрирован (исключение из HRESULT: 0x80040155).


person kostas    schedule 30.05.2017    source источник
comment
Попробуйте следующее: stackoverflow.com/questions/5070124/   -  person Rand Random    schedule 30.05.2017
comment
При чем тут инициализация - не очень очевидно. PIA устарели для за последние 7 лет вам придется прекратить их использовать. Если это действительно инициализация, ваша программа не запустится, тогда учтите, что у вас может быть установлена ​​64-разрядная версия Office. Таким образом, ваша программа также должна работать в 64-битном режиме.   -  person Hans Passant    schedule 30.05.2017
comment
Когда я говорю «Инициализация», я имею в виду экземпляр объекта Excel для доступа к файлу Excel. Я изменил Office на 2016 и думаю, что PIA - это основная проблема, из-за которой мой код не работает (я думаю). Какие изменения мне нужно сделать, чтобы получить доступ к файлу Excel?   -  person kostas    schedule 31.05.2017
comment
Я выложил ошибку. @HansPassant   -  person kostas    schedule 31.05.2017


Ответы (2)


Попробуйте следующие шаги:

  1. Сделайте ссылку на «Библиотеку объектов Microsoft Office 16.0» (вы можете увидеть версию 2.5.0.0), а также «Microsoft Office Interop Excel» (вы можете увидеть версию 15.0.0), которую можно найти в ASSEMBLIES EXTENSIONS в VS.

  2. Сделайте «Использование» с «System.Runtime.InteropServices» и (я думаю) «System.Reflection» в верхней части вашей процедуры / модуля.

  3. Я попробую конвертировать из VB.NET к вам:

    Object ExcelObject = null;
    Microsoft.Office.Interop.Excel.Application ExcelApp = null;
    
    Try
        ExcelApp = new Microsoft.Office.Interop.Excel.Application;
    
        ' and so forth like your code...
    
    Catch
    End Try
    

ОБНОВЛЕНИЕ

Иногда вышеупомянутая DLL находится не на вкладке COM. Чтобы найти ссылки на INTEROP (они такие же, как у PIA), вы должны выбрать их, как показано ниже:

Файлы взаимодействия EXCEL

Эти файлы связаны либо с вашим пакетом Office, либо через PIA (это зависит от вашей версии Office). См. Здесь: Библиотеки PIA

Если вы не видите DLL, как указано выше, загрузите и установите PIA на свой компьютер.

person David BS    schedule 30.05.2017
comment
Я использую vs2017, и на вкладке добавления ссылки COM я не могу найти Microsoft.Office.Interop.Excel. Единственная ссылка на Office - это библиотека объектов Microsoft Office 16.0. - person kostas; 31.05.2017

Проблема была совсем в другой области. Проблема была в реестре. Я полностью удалил все разделы реестра, связанные с установкой Office, и переустановил Office 2016. Это устранило проблему. Спасибо за ответы.

person kostas    schedule 01.06.2017