2011-11-24 10 views
7

Ho riscontrato un problema durante lo sviluppo su MS Visual Web Developer 2008 Express Ed. Sviluppo di ASP.NET C# su SO Windows7 64 bit.Microsoft.Office.Interop.Excel non funziona su 64 bit

sto cercando di aprire un documento di Excel, ma mi dà Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

ho configurato il build per tutti i processori (CPU Qualsiasi, x64, x86) ma non funziona. Ho cercato la risposta su internet ma non sono riuscito a scoprire come gestirlo.

La cosa strana è lo stesso codice ha lavorato sullo stesso sistema in cui ho sviluppato su Microsoft Visual C# 2010 Express! come mai? non è la stessa dll che lavora dietro?

ho bisogno di cambiare che DLL COM in modo che funzionerà sul sistema x64?

Please help me, cosa posso fare?

Il mio codice è:

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

io non sono del tutto sicuro che questo willl a risolvere il problema, ma se si dispone di una DLL COM a 32 bit, è probabilmente necessario utilizzare una build di x86 il tuo progetto anche se stai usando Windows a 64 bit. – Andrew

+0

Penso che tu abbia avuto l'idea giusta @Andrew. Se è a 32 bit Excel, 64bit .net non vorrà lavorare con esso. Costruirlo come x86 e dovrebbe funzionare. –

+0

Già provato ... ma lo stesso è accaduto, non capisco perché questo problema non si verifica in Visual C# e solo nello sviluppatore Web – Bush

risposta

19

Dopo aver scavato in internet ho scoperto che c'è un bug in Microsoft Interop con oggetti COM (almeno con il mio caso, che è MS Excel 2010).

Il bug è che .NET verifica che la localizzazione del thread (C# o codice VB) sia adatta alla localizzazione MS Excel installata in precedenza e, in caso contrario, indica che la libreria Microsoft.Office.Interop è vecchia o non valida.

tua localizzazione filo è derivato dal computer impostazioni internazionali (dal pannello di controllo -> regionale e lingua)

Poi ci sono due opzioni per risolvere questo problema:

  1. Per cambiare il tuo thread localizzazione (per codice)
  2. installazione del language pack per il vostro ufficio

La prima soluzione è questa:

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

Speranza che aiuta :) gr8 giorno

+0

... per ulteriori informazioni, la voce KB che corrisponde: http://support.microsoft. com/default.aspx? scid = kb; it-it; 320369 – Otiel

+1

@Otiel: il KB sembra dire che questo bug si applica a VS 2005 ed Excel 2007 (e versioni precedenti). La descrizione sembra corrispondere ma potrebbe trattarsi di un bug non correlato. –