Sintomi
Se si automatizza Microsoft Excel con Microsoft Visual Basic .NET, Microsoft Visual C# .NET o Microsoft Visual C++, potrebbe essere visualizzato l'errore seguente quando si chiamano determinati metodi:
Errore: 0x80028018 (-2147647512)Descrizione: Formato precedente o Libreria dei tipi non valida
Causa
Viene visualizzato questo errore chiamando un metodo di Excel quando si verificano le condizioni seguenti:
-
Il metodo richiede un LCID (identificatore delle impostazioni locali).
-
Si esegue una versione in lingua inglese di Excel. Tuttavia, le impostazioni internazionali per il computer sono configurate per una lingua diversa dall'inglese.
Se il computer client esegue la versione in lingua inglese di Excel e le impostazioni locali per l'utente corrente sono configurate per una lingua diversa dall'inglese, Excel tenterà di individuare il Language Pack per la lingua configurata. Se il Language Pack non viene trovato, viene segnalato l'errore.
Soluzione alternativa
Per risolvere il problema, è possibile usare uno dei metodi seguenti:
-
Installare il Multilingual User Interface Pack per la versione di Office in uso.
-
Eseguire il metodo o la proprietà di Excel usando InvokeMember in modo da poter specificare cultureInfo per la chiamata. Ad esempio, il codice seguente illustra come richiamare il workbooks oggetto Add metodo con "en-US" come cultureInfo:
Dim oApp As New Excel.Application()oApp.Visible = TrueoApp.UserControl = TrueDim oBooks As Object = oApp.WorkbooksDim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("en-US")oBooks.GetType().InvokeMember("Add", Reflection.BindingFlags.InvokeMethod, Nothing, oBooks, Nothing, ci)
-
In alternativa, impostare CultureInfo prima di chiamare il metodo Excel. Ad esempio:
Dim oApp As New Excel.Application()oApp.Visible = TrueoApp.UserControl = TrueDim oldCI As System.Globalization.CultureInfo = _ System.Threading.Thread.CurrentThread.CurrentCultureSystem.Threading.Thread.CurrentThread.CurrentCulture = _ New System.Globalization.CultureInfo("en-US")oApp.Workbooks.Add()System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
-
Creare una directory 1033 in Microsoft Office\Office11. Quindi, copia excel.exe nella directory 1033 e rinominalo come xllex.dll. Per altre informazioni, fare clic sul collegamento seguente:http://blogs.msdn.com/eric_carter/archive/2005/06/15/429515.aspx
Quando si usa una di queste soluzioni alternative per un computer in cui le impostazioni internazionali non corrispondono alla versione corrente di Office, è necessario conoscere il comportamento di Excel e il modo in cui Excel interpreta i dati che potrebbero essere formattati per impostazioni locali specifiche. Per altri dettagli sulla scrittura di soluzioni Excel globalizzate con Visual Studio .NET, vedere gli articoli seguenti in MSDN:Creating Office Solutions for Use in Multiple Countries/Regions
http://msdn2.microsoft.com/en-us/library/aa168494(office.11).aspxProblemi di globalizzazione e localizzazione per le soluzioni create con Microsoft Visual Studio Tools per Microsoft Office System
http://msdn2.microsoft.com/en-us/library/aa192494(office.11).aspx
Stato
Microsoft ha confermato che si tratta di un bug nei prodotti Microsoft elencati nella sezione "Si applica a".
Ulteriori informazioni
Procedura per riprodurre il problema
-
Verificare che le impostazioni locali del computer siano impostate su una lingua diversa dall'inglese.Per Windows 2000:
-
In Windows Pannello di controllo fare doppio clic su Opzioni internazionali.
-
Nella scheda Generale selezionare una posizione e quindi fare clic su OK.
Per Windows XP o Windows Server 2003:
-
In Pannello di controllo aprire Opzioni internazionali e della lingua.
-
Nella scheda Opzioni internazionali selezionare le impostazioni locali e quindi fare clic su OK.
-
-
Avviare Microsoft Visual Studio .NET.
-
Scegliere Nuovo dal menu File e quindi fare clic su Proietta. Nella finestra di dialogo Nuovo progetto, in Tipi di progetto, fare clic su Progetti Visual Basic. In Modelli fare clic su Applicazione Windows e quindi su OK. Per impostazione predefinita, viene creato form1.
-
Nel menu Visualizza fare clic su Casella degli strumenti e quindi aggiungere un pulsante a Form1.
-
Per visualizzare la finestra del codice per il modulo, fare doppio clic su Button1.
-
Nella finestra del codice sostituire il codice seguente
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.ClickEnd Sub
Con:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim oApp As Object Dim oDoc As Object oApp = CreateObject("Excel.Application") oApp.Visible = True oDoc = oApp.Workbooks.Add oDoc.Close() oApp.Quit() oDoc = Nothing oApp = NothingEnd Sub
-
Aggiungere la riga seguente all'inizio del modulo di codice Form1:
Option Strict Off
-
Premere F5 per creare ed eseguire il programma.
-
Per generare l'errore, fare clic su Button1. L'errore si verifica sulla riga che legge:
oDoc = oApp.Workbooks.Add
Riferimenti
Per altre informazioni sull'automazione di Office, visitare il seguente sito Web microsoft office per lo sviluppo:
http://support.microsoft.com/ofd Inoltre, vedi i seguenti articoli della Microsoft Knowledge Base:
301982 Come automatizzare Microsoft Excel da Visual Basic .NET
302084 Come automatizzare Microsoft Excel da Microsoft Visual C# .NET