次の方法で共有


.NET Framework 4.5 に移行する Excel と Word プロジェクトを更新する

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

Excel プロジェクトから ExcelLocale1033 属性を削除する

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

ExcelLocale1033Attribute を削除するには

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

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

    Note

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

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

    [assembly: ExcelLocale1033Proxy(true)]
    

ExcelLocal1033Proxy クラスへの参照を削除する

Microsoft Visual Studio 2005 Tools for the Microsoft Office System を使用して作成されたプロジェクトでは、Excel の Application オブジェクトをインスタンス化するために Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy クラスを使用します。 このクラスは、Visual Studio 2010 Tools for Office Runtime のうち、.NET Framework 4 以降をターゲットにするソリューションに使用される部分から削除されました。 そのため、このクラスを参照するコード行を削除するか、コメント アウトする必要があります。

ExcelLocal1033Proxy クラスへの参照を削除するには

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

  2. ソリューション エクスプローラーThisAddin.cs (C# の場合) または ThisAddin.vb (Visual Basic の場合) のショートカット メニューを開き、[コードの表示] を選択します。

  3. コード エディターの VSTO generated code 領域で、次のコード行を削除するか、コメント アウトします。

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

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

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

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

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

  • これらのメソッドに、 DocumentWorkbookWorksheet、または ListObject オブジェクトの拡張メソッドとして、今でもアクセスできます。 ただし、Globals.Factory プロパティによって返されるオブジェクトをこれらのメソッドに渡す必要があります。

    Microsoft.Office.Tools.Word.Document vstoDocument =
        Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(Globals.Factory);
    
  • または、Globals.Factory プロパティによって返されるオブジェクトに対してこれらのメソッドにアクセスすることもできます。 この方法でこれらのメソッドにアクセスする場合は、拡張するネイティブ オブジェクトをメソッドに渡す必要があります。

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

    詳細については、「実行時に VSTO アドインの Word 文書と Excel ブックを拡張する」を参照してください。

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

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

  • ThisDocument: Document

  • ThisWorkbook: Workbook

  • Sheetn: Worksheet

  • Chartn: ChartSheet

    .NET Framework 4 以降をターゲットとするプロジェクトでは、前述の Visual Studio Tools for Office ランタイムでの型は、クラスではなくインターフェイスです。 .NET Framework 4 以降をターゲットとするプロジェクトで生成されるクラスは、Visual Studio Tools for Office ランタイムの次の新しいクラスから派生します。

  • ThisDocument: DocumentBase

  • ThisWorkbook: WorkbookBase

  • Sheetn: WorksheetBase

  • Chartn: ChartSheetBase

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

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

private void DoSomethingToSheet(Microsoft.Office.Tools.Excel.Worksheet worksheet)
{
    // Do something to the worksheet object.
}

プロジェクトのターゲットを .NET Framework 4 以降に変更する場合は、次の変更のいずれかをコードに加える必要があります。

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

    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • DoSomethingToSheet メソッドのパラメーターを変更し、代わりに WorksheetBase オブジェクトを使用します。

    private void DoSomethingToSheet (Microsoft.Office.Tools.Excel.WorksheetBase worksheet)
    {
        // Do something to the worksheet object.
    }
    

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

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

.NET Framework 3.5 をターゲットとするプロジェクトでは、Windows フォーム コントロールを追加するメソッド (AddButton メソッドなど) は、ControlCollection クラスおよび ControlCollection クラスで定義されています。

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

詳細については、「実行時に Office 文書にコントロールを追加する」を参照してください。

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

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

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

Event .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 以降をターゲットとするプロジェクトでは、これらのクラスは ControlSiteControlSite の各インターフェイスに置き換えられました。 Microsoft.Office.Tools.Excel.OLEObject および Microsoft.Office.Tools.Word.OLEControl を参照するコードは、ControlSite および 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) プロパティはこれらのコレクションから削除されました。 指定されたコントロールが文書またはワークシートに含まれているかどうかを判断するには、代わりに Controls または 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 ランタイムのいくつかのコレクション型が CollectionBase クラスから派生します。

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