2011-11-24 27 views
7

He encontrado un problema al desarrollar en MS Visual Web Developer 2008 Express Ed. Desarrollo de ASP.NET C# en Windows7 SO de 64 bits.Microsoft.Office.Interop.Excel no funciona en 64 bit

estoy tratando de abrir un documento de Excel, pero me da Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

Yo configuré la acumulación de todos los procesadores (CPU Cualquier, x64, x86), pero no funciona. Busqué la respuesta en Internet pero no pude encontrar la forma de manejarla.

Lo extraño es que el mismo código funcionó en el mismo sistema cuando lo desarrollé en Microsoft Visual C# 2010 Express. ¿Cómo? ¿No es el mismo dll trabajando detrás?

¿Debo cambiar ese dll COM para que funcione en el sistema x64?

Por favor, ayúdenme, ¿qué puedo hacer?

Mi código es:

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); 
+0

no estoy completamente seguro de que este willl a resolver su problema, pero si usted tiene un archivo DLL COM de 32 bits, es probable que tenga que utilizar una versión x86 de su proyecto incluso si está ejecutando Windows de 64 bits. – Andrew

+0

Creo que tienes la idea correcta @Andrew. Si es de 32 bits Excel, 64 bit .net no querrá trabajar con él. Constrúyelo como x86 y debería funcionar. –

+0

Ya lo intenté ... pero sucedió lo mismo, no entiendo por qué este problema no ocurre en Visual C# y solo en el desarrollador web – Bush

Respuesta

19

Después de cavar internet descubrí que hay un error en Microsoft interoperabilidad con los objetos COM (al menos en mi caso, que es MS Excel 2010).

El error es que .NET comprueba que la localización de la secuencia (C# o código VB) es adecuada para la localización de MS Excel que instaló anteriormente, y si no indica que la biblioteca Microsoft.Office.Interop es vieja o no válida.

Su localización hilo se deriva de la configuración regional de ordenador (desde el panel de control -> Configuración regional y de idioma)

entonces hay dos opciones para resolver este problema:

  1. Para cambiar el hilo localización (por código)
  2. Instalar paquete de idioma para su Oficina

La primera solución es la siguiente:

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"); 

espero que ayude :) gr8 día

+0

... para obtener más información, la entrada KB que corresponde: http://support.microsoft. com/default.aspx? scid = kb; en-us; 320369 – Otiel

+1

@Otiel: La KB parece indicar que este error se aplica a VS 2005 y Excel 2007 (y versiones anteriores). La descripción parece coincidir, pero podría ser un error no relacionado. –