Microsoft.Office.Interop.Excel не работает на 64-разрядных - PullRequest
8 голосов
/ 25 ноября 2011

Я столкнулся с проблемой при разработке на MS Visual Web Developer 2008 Express Ed.Разработка ASP.NET C # в 64-битной ОС Windows7.

Я пытаюсь открыть документ Excel, но он дает мне Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

Я настроил сборку для всех процессоров (ЛюбойCPU, x64, x86) но это не работает.Я искал ответ в Интернете, но не смог выяснить, как с ним справиться.

Странно то, что тот же код работал в той же системе, когда я разрабатывал для Microsoft Visual C # 2010 Express!Как так?Разве это не та же самая DLL, работающая за этим?

Нужно ли мне изменить эту COM DLL, чтобы она работала в системе x64?

Пожалуйста, помогите мне, что я могу сделать?

Мой код:

using Excel = Microsoft.Office.Interop.Excel;
xlApp = new Excel.Application();
__Log("Openning " + excelFileName);
xlWorkBook = xlApp.Workbooks.Open(excelFileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2);

1 Ответ

20 голосов
/ 26 ноября 2011

После копания в интернете я обнаружил, что в Microsoft Interop есть ошибка с COM-объектами (по крайней мере, в моем случае это MS Excel 2010).

Ошибка в том, что .NET проверяет, что ваш потокЛокализация (код C # или VB) подходит для локализации MS Excel, которую вы установили ранее, и, если нет, говорит о том, что библиотека Microsoft.Office.Interop устарела или недействительна.

Локализация вашего потока определяется на основе региональных настроек вашего компьютера (из панели управления -> региональные и языковые)

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

  1. Чтобы изменить локализацию потока (по коду)
  2. Установите языковой пакет для своего Office

Первое решение выглядит следующим образом:

using System.Threading;     // For setting the Localization of the thread to fit
using System.Globalization; // the of the MS Excel localization, because of the MS bug

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
excelFileName = System.IO.Path.Combine(excelPath, "Ziperty Buy Model for Web 11_11_2011.xlsm");

Надеюсь, это поможет :) gr8 day

...