Microsoft.Office.Interop.Excel не работает на 64-разрядных
Я столкнулся с проблемой при разработке на 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))
Я настроил сборку на все процессоры (Любой ЦП, x64, x86), но она не работает. Я искал ответ в интернете, но не мог понять, как с этим справиться.
Странно то, что тот же код работал в той же системе, когда я разрабатывал для Microsoft Visual C# 2010 Express! Как так? разве это не та же самая длл, работающая позади?
Нужно ли менять эту 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 ответ
Покопавшись в интернете, я обнаружил, что в Microsoft Interop есть ошибка в COM-объектах (по крайней мере, в моем случае - MS Excel 2010).
Ошибка заключается в том, что.NET проверяет, подходит ли локализация вашего потока (код C# или VB) к локализации MS Excel, которую вы установили ранее, и, если нет, сообщает, что Microsoft.Office.Interop
библиотека старая или недействительная.
Локализация вашего потока основана на региональных настройках вашего компьютера (из панели управления -> региональные и языковые)
Тогда есть два варианта решения этой проблемы:
- Чтобы изменить локализацию вашего потока (по коду)
- Установите языковой пакет для вашего офиса
Первое решение выглядит так:
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 день