Aggiornare i progetti di Excel e Word di cui si esegue la migrazione all'.NET Framework 4,5

Se il progetto di Excel o di Word usa una qualsiasi delle funzionalità seguenti, è necessario modificare il codice se il framework di destinazione viene modificato in .NET Framework 4 o versione successiva:

Rimuovere l'attributo Excellocale1033attribute da progetti di Excel

Microsoft.Office.Tools.Excel.ExcelLocale1033AttributeÈ stato rimosso dalla parte di Visual Studio 2010 Tools per Office Runtime usato per le soluzioni destinate a .NET Framework 4 o versioni successive. Common Language Runtime (CLR) in .NET Framework 4 e versioni successive passa sempre l'ID impostazioni locali 1033 al modello a oggetti di Excel e non è più possibile usare questo attributo per disattivare questo comportamento. Per altre informazioni, vedere globalizzazione e localizzazione di soluzioni Excel.

Per rimuovere ExcelLocale1033Attribute

  1. Con il progetto aperto in Visual Studio, aprire Esplora soluzioni.

  2. Nel nodo Proprietà (per C#) o Progetto personale (per Visual Basic) fare doppio clic sul file di codice AssemblyInfo per aprirlo nell'editor di codice.

    Nota

    Per visualizzare il file di codice AssemblyInfo nei progetti di Visual Basic, è necessario fare clic sul pulsante Mostra tutti i file in Esplora soluzioni .

  3. Individuare Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute e rimuoverlo dal file o impostarlo come commento.

    <Assembly: ExcelLocale1033Proxy(True)>
    
    [assembly: ExcelLocale1033Proxy(true)]
    

Rimuovere un riferimento alla classe ExcelLocal1033Proxy

I progetti creati con Microsoft Visual Studio 2005 Tools per Microsoft Office System creano un'istanza dell'oggetto Application di Excel usando la classe Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy. Questa classe è stata rimossa dalla parte di Visual Studio 2010 Tools per Office Runtime usata per le soluzioni destinate a .NET Framework 4 o versioni successive. Di conseguenza, è necessario rimuovere o impostare come commento la riga di codice che fa riferimento a questa classe.

Per rimuovere il riferimento alla classe ExcelLocal1033Proxy

  1. Aprire il progetto in Visual Studio e quindi aprire Esplora soluzioni.

  2. In Esplora soluzioni aprire il menu di scelta rapida per ThisAddIn.cs (per C#) o ThisAddin. vb (per Visual Basic), quindi scegliere Visualizza codice.

  3. Nell'area VSTO generated code dell'editor di codice rimuovere o impostare come commento la riga di codice seguente.

    Me.Application = CType(Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Wrap(GetType(Excel.Application), Me.Application), Excel.Application)
    
    
    this.Application = (Excel.Application)Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Wrap(typeof(Excel.Application), this.Application);
    
    

Aggiornamento del codice che usa i metodi GetVstoObject e HasVstoObject

Nei progetti destinati a .NET Framework 3.5 sono disponibili i metodi GetVstoObject e HasVstoObject come metodi di estensione in uno degli oggetti nativi seguenti nel progetto: Document, Workbook, Worksheet o ListObject. Quando si chiamano questi metodi, non è necessario passare un parametro. Nell'esempio di codice riportato di seguito viene illustrato come utilizzare il metodo GetVstoObject in un componente aggiuntivo VSTO di Word destinato al .NET Framework 3,5.

Dim vstoDocument as Microsoft.Office.Tools.Word.Document = _
    Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject()
Microsoft.Office.Tools.Word.Document vstoDocument =
    Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject();

Nei progetti destinati a .NET Framework 4 o versione successiva è necessario modificare il codice per accedere ai metodi in uno dei modi seguenti:

  • È comunque possibile accedere a questi metodi come metodi di estensione nell'oggetto Document, Workbook, Worksheeto ListObject . Tuttavia, è ora necessario passare l'oggetto restituito dalla proprietà Globals.Factory a questi metodi.

    Dim vstoDocument as Microsoft.Office.Tools.Word.Document = _
        Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(Globals.Factory)
    
    Microsoft.Office.Tools.Word.Document vstoDocument =
        Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(Globals.Factory);
    
  • In alternativa, è possibile accedere ai metodi nell'oggetto restituito dalla proprietà Globals.Factory. Quando si accede ai metodi in questo modo, è necessario passare l'oggetto nativo che si vuole estendere al metodo.

    Dim vstoDocument as Microsoft.Office.Tools.Word.Document = _
        Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument)
    
    Microsoft.Office.Tools.Word.Document vstoDocument =
        Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument);
    

    Per altre informazioni, vedere estensione di documenti di Word e di cartelle di lavoro di Excel in componenti aggiuntivi VSTOin fase di esecuzione.

Aggiornamento del codice che usa istanze delle classi generate nei progetti a livello di documento

Nei progetti a livello di documento destinati a .NET Framework 3.5 le classi generate nei progetti derivano dalle classi seguenti nel Visual Studio Tools per Office Runtime.

  • ThisDocument: Document

  • ThisWorkbook: Workbook

  • Sheetn:Worksheet

  • Chartn:ChartSheet

    Nei progetti destinati a .NET Framework 4 o versione successiva i tipi nel Visual Studio Tools per Office Runtime elencati sopra sono interfacce anziché classi. Le classi generate nei progetti destinati a .NET Framework 4 o versione successiva derivano dalle nuove classi seguenti nel Visual Studio Tools per Office Runtime:

  • ThisDocument: DocumentBase

  • ThisWorkbook: WorkbookBase

  • Sheetn:WorksheetBase

  • Chartn:ChartSheetBase

    Se il codice nel progetto fa riferimento a un'istanza di una delle classi generate come classe base da cui deriva, è necessario modificare il codice.

    Ad esempio, in un progetto Cartella di lavoro di Excel destinato a .NET Framework 3.5 potrebbe essere presente un metodo helper che esegue alcune attività nelle istanze delle classi Sheetn generate nel progetto.

Private Sub DoSomethingToSheet(ByVal worksheet As Microsoft.Office.Tools.Excel.Worksheet)
    ' Do something to the worksheet object.
End Sub
private void DoSomethingToSheet(Microsoft.Office.Tools.Excel.Worksheet worksheet)
{
    // Do something to the worksheet object.
}

Se si ridestina il progetto a .NET Framework 4 o versione successiva, è necessario apportare una delle modifiche seguenti al codice:

  • Modificare tutto il codice che chiama il metodo DoSomethingToSheet per passare la proprietà Base di un oggetto WorksheetBase nel progetto. Questa proprietà restituisce un oggetto Worksheet .

    DoSomethingToSheet(Globals.Sheet1.Base)
    
    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • Modificare il parametro del metodo DoSomethingToSheet in modo da richiedere invece un oggetto WorksheetBase .

    Private Sub DoSomethingToSheet(ByVal worksheet As Microsoft.Office.Tools.Excel.WorksheetBase)
        ' Do something to the worksheet object.
    End Sub
    
    private void DoSomethingToSheet (Microsoft.Office.Tools.Excel.WorksheetBase worksheet)
    {
        // Do something to the worksheet object.
    }
    

Aggiornamento del codice che usa Windows Form controlli nei documenti

È necessario aggiungere un'istruzione using (C#) o Imports (Visual Basic) per lo Microsoft.Office.Tools.Excel Microsoft.Office.Tools.Word spazio dei nomi o all'inizio di un file di codice che usa la proprietà Controls per aggiungere Windows Form controlli al documento o al foglio di controllo a livello di codice.

Nei progetti destinati a .NET Framework 3.5 i metodi che aggiungono controlli Windows Form (come il metodo AddButton) sono definiti nelle classi ControlCollection e ControlCollection.

Nei progetti destinati a .NET Framework 4 o versioni successive, questi metodi sono metodi di estensione disponibili nella proprietà dei controlli. Per usare questi metodi di estensione, il file di codice in cui vengono usati i metodi deve includere un'istruzione using e Imports per lo spazio dei nomi Microsoft.Office.Tools.Excel e Microsoft.Office.Tools.Word . Questa istruzione viene generata automaticamente in nuovi progetti destinati a .NET Framework 4 o versione successiva. Poiché tuttavia non viene aggiunta automaticamente nei progetti destinati a .NET Framework 3.5, è necessario aggiungerla quando si ridestina il progetto.

Per altre informazioni, vedere aggiungere controlli ai documenti di Office in fase di esecuzione.

Aggiornare il codice che gestisce gli eventi di controllo del contenuto di Word

Nei progetti destinati a .NET Framework 3.5 questi eventi vengono gestiti dal delegato EventHandler<TEventArgs> generico. Nei progetti destinati a .NET Framework 4 o versione successiva questi eventi vengono ora gestiti da altri delegati.

La tabella seguente elenca gli eventi dei controlli contenuto di Word e i delegati a essi associati nei progetti destinati a .NET Framework 4 o versione successiva.

Evento Delegato da usare in progetti di .NET Framework 4 e versioni successive
Added ContentControlAddedEventHandler
ContentUpdating ContentControlContentUpdatingEventHandler
Deleting ContentControlDeletingEventHandler
Entering ContentControlEnteringEventHandler
Exiting ContentControlExitingEventHandler
StoreUpdating ContentControlStoreUpdatingEventHandler

Aggiornamento del codice che usa le classi OLEObject e OLEControl

Nei progetti destinati a .NET Framework 3.5 è possibile aggiungere controlli personalizzati (come controlli utente Windows Form) a un documento o un foglio di lavoro usando le classi Microsoft.Office.Tools.Excel.OLEObject e Microsoft.Office.Tools.Word.OLEControl.

Nei progetti destinati a .NET Framework 4 o versione successiva queste classi sono state sostituite dalle interfacce ControlSite e ControlSite . È necessario modificare il codice che fa riferimento a Microsoft.Office.Tools.Excel.OLEObject e Microsoft.Office.Tools.Word.OLEControl perché invece faccia riferimento a ControlSite e ControlSite. A parte i nuovi nomi, questi controlli si comportano allo stesso modo che nei progetti destinati a .NET Framework 3.5.

Per altre informazioni, vedere aggiungere controlli ai documenti di Office in fase di esecuzione.

Aggiornamento del codice che usa la proprietà Controls. Item (Object)

Nei progetti destinati a .NET Framework 3,5, è possibile usare la proprietà Item (Object) del Microsoft.Office.Tools.Word.Document. Controlli o Microsoft.Office.Tools.Excel.Worksheet.Controls raccolta per determinare se un documento o un foglio di controllo dispone di un controllo specificato.

Nei progetti destinati a .NET Framework 4 o versione successiva, la proprietà Item (oggetto) è stata rimossa da queste raccolte. Per determinare se un documento o un foglio di controllo contiene un controllo specificato, utilizzare invece il metodo Contains (System. Object) della Controls Controls raccolta o.

Per ulteriori informazioni sulla raccolta di controlli di documenti e fogli di lavoro, vedere aggiungere controlli ai documenti di Office in fase di esecuzione.

Aggiornamento del codice che usa raccolte che derivano da CollectionBase

Nei progetti destinati all'.NET Framework 3,5, diversi tipi di raccolta in Visual Studio Tools per Office Runtime derivano dalla CollectionBase classe, ad esempio Microsoft.Office.Tools.SmartTagCollection , Microsoft.Office.Tools.Excel.ControlCollection e Microsoft.Office.Tools.Word.ControlCollection .

Nei progetti destinati a .NET Framework 4 o versione successiva questi tipi di raccolta sono ora interfacce che non derivano da CollectionBase. In questi tipi di raccolta non sono più disponibili alcuni membri, come Capacity, Liste InnerList.

Vedi anche