Formattazione di dati in Excel con varie impostazioni internazionali

Aggiornamento: novembre 2007

Si applica a

Le informazioni contenute in questo argomento riguardano solo i progetti Visual Studio Tools per Office e le versioni di Microsoft Office specificati.

Tipo di progetto

  • Progetti a livello di documento

Versione Microsoft Office

  • Excel 2003

  • Excel 2007

Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazione.

Tutti i dati con formattazione dipendente dalle impostazioni locali, ad esempio le date e la valuta, devono essere formattati utilizzando il formato dati inglese (Stati Uniti) con ID delle impostazioni locali 1033 prima di essere passati a Microsoft Office Excel o prima che vengano letti i dati dal codice del progetto Visual Studio Tools per Office.

Per impostazione predefinita, il runtime di Visual Studio Tools per Office comporta la previsione della formattazione dei dati secondo l'ID delle impostazioni locali 1033 da parte del modello a oggetti di Excel (tale operazione viene anche definita blocco del modello a oggetti sull'ID delle impostazioni locali 1033). Questo comportamento corrisponde alla modalità di funzionaento di Visual Basic, Applications Edition. Tuttavia, questo comportamento può essere modificato nelle soluzioni Visual Studio Tools per Office.

Programmazione del modello a oggetti di Excel bloccato

Per impostazione predefinita, le personalizzazioni a livello di documento e i componenti aggiuntivi a livello di applicazione creati utilizzando Visual Studio Tools per Office non sono soggetti alle impostazioni locali dell'utente finale e si comportano sempre come se fossero attive le impostazioni locali inglesi (Stati Uniti). Ad esempio, se si ottiene o si imposta la proprietà Value2 in Excel, i dati devono essere formattati nel modo previsto dall'ID delle impostazioni locali 1033. Se si utilizza un formato dati diverso, è possibile che si ottengano risultati imprevisti.

Anche se si utilizza il formato inglese (Stati Uniti) per i dati passati o modificati da codice gestito, in Excel i dati vengono interpretati e visualizzati correttamente in base alle impostazioni locali dell'utente finale. In Excel i dati vengono formattati in maniera corretta perché il codice gestito passa l'LCID 1033 insieme ai dati, a indicare che i dati sono nel formato inglese (Stati Uniti) e pertanto devono essere riformattati in modo da corrispondere alle impostazioni locali dell'utente.

Se ad esempio le opzioni internazionali degli utenti finali sono impostate sul tedesco (Germania), la formattazione prevista per la data del 29 giugno 2005 sarà 29.06.2005. Se tuttavia la soluzione passa la data a Excel come stringa, sarà necessario formattare la data in base al formato inglese (Stati Uniti), ovvero 6/29/2005. Se la cella viene formattata come Data, in Excel la data verrà visualizzata nel formato tedesco (Germania).

Sblocco del modello a oggetti di Excel

Visual Studio Tools per Office consente di sbloccare il comportamento dell'ID delle impostazioni locali per l'intero modello a oggetti di Excel. ExcelLocale1033Attribute controlla il comportamento del modello a oggetti di Excel nella soluzione Visual Studio Tools per Office. Per impostazione predefinita, l'attributo è impostato su true e pertanto il modello a oggetti di Excel viene bloccato in modo da prevedere la formattazione con l'ID delle impostazioni locali 1033. Quando questo attributo è true, Visual Studio Tools per Office consente di eseguire il wrapping di ogni oggetto di Excel per cui vengono create delle istanze dalla soluzione in un oggetto proxy che passa sempre l'ID delle impostazioni locali 1033 a Excel. Quando si imposta l'attributo su false, questi oggetti proxy non vengono utilizzati e nel modello a oggetti di Excel vengono adoperate le impostazioni locali dell'utente finale.

Nota:

Se si imposta l'attributo su false e gli utenti finali hanno impostazioni locali diverse dall'inglese (Stati Uniti), la soluzione potrebbe avere un comportamento imprevisto. È possibile scrivere il codice in modo che funzioni con tutte le impostazioni locali. Per ulteriori informazioni, vedere Procedura: specificare stringhe letterali indipendenti dalle impostazioni internazionali in Excel mediante la reflection.

Per sbloccare il modello a oggetti, impostare l'oggetto ExcelLocale1033Attribute del file AssemblyInfo.vb o AssemblyInfo.cs del progetto su false.

<Assembly: ExcelLocale1033(False)>
[assembly: ExcelLocale1033(false)]
Nota:

Quando l'oggetto ExcelLocale1033Attribute è true, il runtime di Visual Studio Tools per Office esegue il wrapping di tutti gli oggetti nativi di Excel in un oggetto proxy, pertanto alcune operazioni relative agli oggetti nativi di Excel potranno risultare rallentate. In questi casi sarà possibile migliorare le prestazioni utilizzando il metodo Unwrap per ottenere l'oggetto di Excel senza il proxy e quindi eseguire l'operazione utilizzando tale oggetto. In tal caso, l'oggetto restituito da Unwrap utilizza l'ID impostazioni locali del thread corrente anziché l'ID impostazioni locali 1033.

Sblocco di oggetti di Excel specifici nei progetti Excel 2003

Se si sviluppano soluzioni per Excel 2003, ci sono alcuni casi in cui è necessario modificare un oggetto nativo di Excel (ovvero un'istanza di una classe definita nello spazio dei nomi Microsoft.Office.Interop.Excel) in modo che venga utilizzato l'ID delle impostazioni locali del thread corrente anziché l'ID delle impostazioni locali 1033. Ad esempio, è necessario eseguire questa operazione se si desidera passare null come un parametro out di un metodo che appartiene a un oggetto di Excel.

Per modificare il comportamento dell'ID delle impostazioni locali per i singoli oggetti di Excel nei progetti Excel 2003, utilizzare i metodi della classe ExcelLocale1033Proxy. Chiamare il metodo Unwrap per modificare un oggetto di Excel, affinché utilizzi l'ID delle impostazioni locali del thread corrente anziché l'ID delle impostazioni locali 1033.

Dopo la chiamata a Unwrap per modificare un oggetto Excel, è possibile utilizzare l'oggetto nuovamente, ma in situazioni in cui si impiega l'ID impostazioni locali 1033 al posto dell'ID impostazioni locali del thread corrente. Chiamare il metodo Wrap per eseguire il wrapping dell'oggetto di Excel in un oggetto proxy in cui viene utilizzato l'ID delle impostazioni locali 1033 anziché l'ID delle impostazioni locali del thread corrente.

Nota:

I metodi Unwrap e Wrap sono obsoleti nei progetti Visual Studio Tools per Office per Excel 2007. Nel runtime di Visual Studio Tools per Office utilizzato con i progetti Excel 2007 sono contenuti miglioramenti che consentono agli oggetti nativi di Excel di funzionare nel modo previsto quando l'oggetto ExcelLocale1033Attribute è true. Per ulteriori informazioni sul runtime di Visual Studio Tools per Office, vedere Cenni preliminari su Visual Studio Tools per Office Runtime.

Chiamata a metodi che dispongono di parametri out mentre il modello a oggetti di Excel è bloccato

Se l'oggetto ExcelLocale1033Attribute è true in una soluzione Excel 2003, si riceverà un'eccezione se si passa null come un parametro out di un metodo nel modello a oggetti di Excel. Per passare null come parametro out, è necessario chiamare il metodo Unwrap e passare l'oggetto che contiene il metodo prima di chiamare quest'ultimo.

In alternativa, è possibile assegnare il parametro a un valore prima di chiamare il metodo. Per ulteriori informazioni sui parametri out, vedere out (Riferimenti per C#).

Nel codice riportato di seguito, ad esempio, verrà generata un'eccezione se l'attributo ExcelLocale1033Attribute è true. Il metodo ExportXml dispone di un parametro out.

Dim outString As String = Nothing
Dim result As Excel.XlXmlExportResult = _
    Globals.ThisWorkbook.XmlMaps(1).ExportXml(outString)
string outString = null;
Excel.XlXmlExportResult expResult =
Globals.ThisWorkbook.XmlMaps[1].ExportXml(out outString);

Per risolvere questo problema, è possibile passare l'interfaccia XmlMap nel metodo Unwrap prima di chiamare ExportXml.

Dim outString As String = Nothing
Dim map As Excel.XmlMap = TryCast( _
    Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap( _
    Globals.ThisWorkbook.XmlMaps(1)), Excel.XmlMap)
Dim result As Excel.XlXmlExportResult = map.ExportXml(outString)
string outString = null;
Excel.XmlMap map = Microsoft.Office.Tools.Excel.
    ExcelLocale1033Proxy.Unwrap(
    Globals.ThisWorkbook.XmlMaps[1]) as Excel.XmlMap;
Excel.XlXmlExportResult expResult = map.ExportXml(out outString);

In alternativa, è possibile assegnare la variabile outString a un valore prima di passarla al metodo ExportXml.

Dim outString As String = String.Empty
Dim result As Excel.XlXmlExportResult = _
    Globals.ThisWorkbook.XmlMaps(1).ExportXml(outString)
string outString = String.Empty;
Excel.XlXmlExportResult expResult =
    Globals.ThisWorkbook.XmlMaps[1].ExportXml(out outString);

Vedere anche

Attività

Procedura: localizzare soluzioni di Excel

Procedura: specificare stringhe letterali indipendenti dalle impostazioni internazionali in Excel mediante la reflection

Concetti

Creazione di soluzioni Office in Visual Studio

Cenni preliminari su Visual Studio Tools per Office Runtime

Riferimenti

ExcelLocale1033Attribute

ExcelLocale1033Proxy

Altre risorse

Estensione di metadati mediante attributi