次の方法で共有


.NET Framework 4 に移行する Excel プロジェクトおよび Word プロジェクトの更新

更新 : 2010 年 5 月

次のいずれかの機能を使用する Excel プロジェクトまたは Word プロジェクトのターゲット フレームワークを .NET Framework 4 に変更する場合は、コードを変更する必要があります。

  • スマート タグ

  • GetVstoObject メソッドと HasVstoObject メソッド

  • ドキュメント レベルのプロジェクトで生成されるクラス

  • ドキュメント上の Windows フォーム コントロール

  • Word コンテンツ コントロールのイベント

  • OLEObject クラスと OLEControl クラス

  • Controls.Item(Object) プロパティ

  • CollectionBase から派生するコレクション

.NET Framework 4 に再ターゲットされた Excel プロジェクトから Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute を削除する必要もあります。Visual Studio ではこの属性は自動的に削除されません。

Excel プロジェクトからの ExcelLocale1033 属性の削除

Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute は、.NET Framework 4 を対象とするソリューションで使用される Visual Studio 2010 Tools for Office Runtime の部分からは削除されています。 .NET Framework 4 の共通言語ランタイム (CLR) では常にロケール ID 1033 が Excel オブジェクト モデルに渡され、この属性を使用してこの動作を無効にすることはできなくなりました。 詳細については、「さまざまな地域設定を使用した Excel のデータの書式設定」を参照してください。

ExcelLocale1033Attribute を削除するには

  1. Visual Studio でプロジェクトを開き、ソリューション エクスプローラーを開きます。

  2. [プロパティ] ノード (C# の場合) または [マイ プロジェクト] ノード (Visual Basic の場合) の下で、AssemblyInfo コード ファイルをダブルクリックしてコード エディターで開きます。

    注意

    Visual Basic プロジェクトで AssemblyInfo コード ファイルを確認するには、ソリューション エクスプローラー[すべてのファイルの表示] をクリックする必要があります。

  3. Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute を探し、ファイルから削除するか、コメント アウトします。

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

スマート タグを作成するコードの更新

スマート タグを作成する Excel プロジェクトまたは Word プロジェクトのターゲット フレームワークを変更する場合は、コードに対して次の変更を行う必要があります。

  • スマート タグとアクション オブジェクト作成するすべてのコードを変更する。

  • カスタム レコグナイザーを持つスマート タグ クラスを定義するすべてのコードを変更する。

注意

スマート タグは、Excel 2010 および Word 2010 では使用されていません。 詳細については、「スマート タグの概要」を参照してください。

詳細については、下記の手順を参照してください。

スマート タグ オブジェクトとアクション オブジェクトの作成

コードでスマート タグ オブジェクトとアクション オブジェクトを作成する方法を変更する必要があります。 .NET Framework 3.5 を対象とするプロジェクトでは、スマート タグとアクションの型は直接インスタンス化できるクラスです。 .NET Framework 4 を対象とするプロジェクトでは、これらの型はインターフェイスであるため、直接インスタンス化できません。

プロジェクトのターゲット フレームワークが .NET Framework 4 に変更される場合は、プロジェクトの Globals.Factory プロパティで提供されているメソッドを使用して、スマート タグ オブジェクトとアクション オブジェクトを作成する必要があります。 詳細については、「スマート タグのアーキテクチャ」を参照してください。

次の表は、スマート タグとアクションの型と、.NET Framework 4 を対象とするプロジェクトでの型のインスタンス作成に使用するメソッドを示しています。

スマート タグとアクションの型

.NET Framework 4 プロジェクトで使用するファクトリ メソッド

Microsoft.Office.Tools.Excel.Action

Microsoft.Office.Tools.Excel.Factory クラスの CreateAction メソッド。

Microsoft.Office.Tools.Excel.SmartTag

Microsoft.Office.Tools.Excel.Factory クラスの CreateSmartTag メソッド。

Microsoft.Office.Tools.Word.Action

Microsoft.Office.Tools.Word.Factory クラスの CreateAction メソッド。

Microsoft.Office.Tools.Word.SmartTag

Microsoft.Office.Tools.Word.Factory クラスの CreateSmartTag メソッド。

カスタム レコグナイザーを持つスマート タグ クラスの定義

カスタム レコグナイザーを持つ独自のスマート タグ クラスを定義する場合は、コードを変更する必要があります。 .NET Framework 3.5 を対象とするプロジェクトでは、クラスを Microsoft.Office.Tools.Word.SmartTag クラスまたは Microsoft.Office.Tools.Excel.SmartTag クラスから派生させます。 .NET Framework 4 を対象とするプロジェクトでは、代わりに Microsoft.Office.Tools.Word.ISmartTagExtension インターフェイスまたは Microsoft.Office.Tools.Excel.ISmartTagExtension インターフェイスを実装するクラスを定義します。

詳細については、「スマート タグのアーキテクチャ」を参照してください。

GetVstoObject メソッドと HasVstoObject メソッドを使用するコードの更新

.NET Framework 3.5 を対象とするプロジェクトでは、GetVstoObject メソッドまたは HasVstoObject メソッドを、プロジェクトのいずれかのネイティブ オブジェクト (Microsoft.Office.Interop.Word.Document, Microsoft.Office.Interop.Excel.WorkbookMicrosoft.Office.Interop.Excel.Worksheet、または Microsoft.Office.Interop.Excel.ListObject) の拡張メソッドとして使用できます。 これらのメソッドを呼び出すときに、パラメーターを渡す必要はありません。 次のコード例は、.NET Framework 3.5 を対象とする Word アドインで GetVstoObject メソッドを使用する方法を示しています。

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

.NET Framework 4 を対象とするプロジェクトでは、次のいずれかの方法でこれらのメソッドにアクセスするようにコードを変更する必要があります。

  • 以前のように、Microsoft.Office.Interop.Word.DocumentMicrosoft.Office.Interop.Excel.WorkbookMicrosoft.Office.Interop.Excel.Worksheet、または Microsoft.Office.Interop.Excel.ListObject オブジェクトの拡張メソッドとしてこれらのメソッドにアクセスできます。 ただし、Globals.Factory プロパティによって返されるオブジェクトをこれらのメソッドに渡す必要があります。

    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);
    
  • または、Globals.Factory プロパティによって返されるオブジェクトでこれらのメソッドにアクセスできます。 この方法でこれらのメソッドにアクセスする場合は、拡張するネイティブ オブジェクトをメソッドに渡す必要があります。

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

詳細については、「アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張」および「ドキュメント レベルのカスタマイズにおけるネイティブな Office オブジェクトからの拡張オブジェクトの取得」を参照してください。

ドキュメント レベルのプロジェクトで生成されるクラスのインスタンスを使用するコードの更新

.NET Framework 3.5 を対象とするドキュメント レベルのプロジェクトでは、プロジェクトで生成されるクラスは Visual Studio Tools for Office Runtime の次のクラスから派生します。

.NET Framework 4 を対象とするプロジェクトでは、上記の Visual Studio Tools for Office Runtime の型はインターフェイスであり、クラスではありません。 .NET Framework 4 を対象とするプロジェクトで生成されるクラスは、Visual Studio Tools for Office Runtime の次の新しいクラスから派生します。

プロジェクトのコードで、生成されるいずれかのクラスのインスタンスを派生元の基本クラスとして参照している場合は、コードを変更する必要があります。

たとえば、.NET Framework 3.5 を対象とする Excel ブック プロジェクトでは、プロジェクトで生成される Sheetn クラスのインスタンスを操作するヘルパー メソッドを使用している場合があります。

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.
}

プロジェクトの対象を .NET Framework 4 に変更する場合は、コードに対して次のいずれかの変更を行う必要があります。

  • DoSomethingToSheet メソッドを呼び出すすべてのコードを変更し、プロジェクトの Microsoft.Office.Tools.Excel.WorksheetBase オブジェクトの Base プロパティを渡すようにします。 このプロパティは Microsoft.Office.Tools.Excel.Worksheet オブジェクトを返します。

    DoSomethingToSheet(Globals.Sheet1.Base)
    
    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • DoSomethingToSheet メソッドのパラメーターを変更し、代わりに Microsoft.Office.Tools.Excel.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.
    }
    

ドキュメント上の Windows フォーム コントロールを使用するコードの更新

Microsoft.Office.Tools.Excel 名前空間または Microsoft.Office.Tools.Word 名前空間に対する using (C#) ステートメントまたは Imports (Visual Basic) ステートメントを、Controls プロパティを使用してプログラムで Windows フォーム コントロールを文書またはワークシートに追加するコード ファイルの先頭に追加する必要があります。

.NET Framework 3.5 を対象とするプロジェクトでは、Windows フォーム コントロールを追加するメソッド (AddButton メソッドなど) を Microsoft.Office.Tools.Excel.ControlCollection クラスおよび Microsoft.Office.Tools.Word.ControlCollection クラスに定義します。

.NET Framework 4 を対象とするプロジェクトでは、これらのメソッドは Controls プロパティで使用できる拡張メソッドです。 これらの拡張メソッドを使用するには、メソッドを使用するコード ファイルに、Microsoft.Office.Tools.Excel 名前空間または Microsoft.Office.Tools.Word 名前空間に対する using ステートメントまたは Imports ステートメントが必要です。 このステートメントは、.NET Framework 4 を対象とする新しいプロジェクトでは自動的に生成されます。 ただし、このステートメントは、.NET Framework 3.5 を対象とするプロジェクトには自動的に追加されないため、プロジェクトの対象を変更するときに手動で追加する必要があります。

詳細については、「実行時の Office ドキュメントへのコントロールの追加」を参照してください。

Word コンテンツ コントロールのイベントを処理するコードの更新

.NET Framework 3.5 を対象とするプロジェクトでは、Word コンテンツ コントロールのイベントは汎用の EventHandler<TEventArgs> デリゲートによって処理されます。 .NET Framework 4 を対象とするプロジェクトでは、これらのイベントは他のデリゲートによって処理されます。

次の表は、Word コンテンツ コントロールのイベントと、.NET Framework 4 を対象とするプロジェクトでこれらのイベントに関連付けられているデリゲートを示しています。

イベント

.NET Framework 4 プロジェクトで使用するデリゲート

Added

ContentControlAddedEventHandler

ContentUpdating

ContentControlContentUpdatingEventHandler

Deleting

ContentControlDeletingEventHandler

Entering

ContentControlEnteringEventHandler

Exiting

ContentControlExitingEventHandler

StoreUpdating

ContentControlStoreUpdatingEventHandler

OLEObject クラスと OLEControl クラスを使用するコードの更新

.NET Framework 3.5 を対象とするプロジェクトでは、Microsoft.Office.Tools.Excel.OLEObject クラスと Microsoft.Office.Tools.Word.OLEControl クラスを使用して、カスタム コントロール (Windows フォームのユーザー コントロールなど) を文書またはワークシートに追加できます。

.NET Framework 4 を対象とするプロジェクトでは、これらのクラスは Microsoft.Office.Tools.Excel.ControlSite インターフェイスと Microsoft.Office.Tools.Word.ControlSite インターフェイスに置き換えられました。 Microsoft.Office.Tools.Excel.OLEObject および Microsoft.Office.Tools.Word.OLEControl を参照するコードを、Microsoft.Office.Tools.Excel.ControlSite および Microsoft.Office.Tools.Word.ControlSite を参照するように変更する必要があります。 新しい名前になったこと以外には、これらのコントロールの動作は .NET Framework 3.5 を対象とするプロジェクトでの動作と同じです。

詳細については、「実行時の Office ドキュメントへのコントロールの追加」を参照してください。

Controls.Item(Object) プロパティを使用するコードの更新

.NET Framework 3.5 を対象とするプロジェクトでは、Microsoft.Office.Tools.Word.Document.Controls コレクションまたは Microsoft.Office.Tools.Excel.Worksheet.Controls コレクションの Item(Object) プロパティを使用して、文書またはワークシートが特定のコントロールを持つかどうかを判断できます。

.NET Framework 4 を対象とするプロジェクトでは、Item(Object) プロパティはこれらのコレクションから削除されました。 文書またはワークシートが特定のコントロールを持つかどうかを判断するには、代わりに Document.Controls コレクションまたは Worksheet.Controls コレクションの Contains(System.Object) メソッドを使用します。

文書およびワークシートの Controls コレクションの詳細については、「実行時の Office ドキュメントへのコントロールの追加」を参照してください。

CollectionBase から派生するコレクションを使用するコードの更新

.NET Framework 3.5 を対象とするプロジェクトでは、Microsoft.Office.Tools.SmartTagCollectionMicrosoft.Office.Tools.Excel.ControlCollectionMicrosoft.Office.Tools.Word.ControlCollection など、Visual Studio Tools for Office Runtime のいくつかのコレクション型が CollectionBase クラスから派生します。

.NET Framework 4 を対象とするプロジェクトでは、これらのコレクション型はインターフェイスであるため、CollectionBase からは派生しません。 CapacityListInnerList などの一部のメンバーは、これらのコレクション型で使用できなくなりました。

参照

概念

スマート タグのアーキテクチャ

コンテンツ コントロール

アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張

ドキュメント レベルのカスタマイズにおけるネイティブな Office オブジェクトからの拡張オブジェクトの取得

実行時の Office ドキュメントへのコントロールの追加

Office プロジェクト内のオブジェクトへのグローバル アクセス

その他の技術情報

.NET Framework 4 への Office ソリューションの移行

履歴の変更

日付

履歴

理由

2010 年 5 月

Excel プロジェクトから Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute を削除するセクションを追加しました。

情報の拡充