.NET Framework 4.5 に移行する Excel と Word プロジェクトを更新する
次の機能を使用する Excel または Word プロジェクトのターゲット フレームワークを .NET Framework 4 以降に変更する場合は、コードを変更する必要があります。
-
また、.NET Framework 4 以降にターゲットを変更する Excel プロジェクトからは、
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute
と、Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy
クラスへの参照を削除する必要もあります。 Visual Studio では、この属性やクラス参照が自動的に削除されることはありません。
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 を削除するには
Visual Studio でプロジェクトを開き、 ソリューション エクスプローラーを開きます。
[プロパティ] ノード (C# の場合) または [マイ プロジェクト] ノード (Visual Basic の場合) の下で、AssemblyInfo コード ファイルをダブルクリックしてコード エディターで開きます。
Note
Visual Basic プロジェクトで AssemblyInfo コード ファイルを表示するには、 ソリューション エクスプローラー の [すべてのファイルの表示] ボタンをクリックする必要があります。
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute
を探し、ファイルから削除するか、コメント アウトします。
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 クラスへの参照を削除するには
Visual Studio でプロジェクトを開き、 [ソリューション エクスプローラー]を開きます。
ソリューション エクスプローラーで ThisAddin.cs (C# の場合) または ThisAddin.vb (Visual Basic の場合) のショートカット メニューを開き、[コードの表示] を選択します。
コード エディターの
VSTO generated code
領域で、次のコード行を削除するか、コメント アウトします。
GetVstoObject メソッドと HasVstoObject メソッドを使用するコードを更新する
.NET Framework 3.5 をターゲットとするプロジェクトでは、GetVstoObject
メソッドまたは HasVstoObject
メソッドを、プロジェクトのネイティブ オブジェクト (Document、Workbook、Worksheet、または ListObject) の拡張メソッドとして使用できます。 これらのメソッドを呼び出すときに、パラメーターを渡す必要はありません。 次のコード例は、.NET Framework 3.5 をターゲットとする Word VSTO アドインで GetVstoObject メソッドを使用する方法を示しています。
Microsoft.Office.Tools.Word.Document vstoDocument =
Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject();
.NET Framework 4 以降をターゲットとするプロジェクトでは、次のいずれかの方法でこれらのメソッドにアクセスするようにコードを変更する必要があります。
これらのメソッドに、 Document、 Workbook、 Worksheet、または ListObject オブジェクトの拡張メソッドとして、今でもアクセスできます。 ただし、
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
: DocumentThisWorkbook
: WorkbookSheet
n: WorksheetChart
n: ChartSheet.NET Framework 4 以降をターゲットとするプロジェクトでは、前述の Visual Studio Tools for Office ランタイムでの型は、クラスではなくインターフェイスです。 .NET Framework 4 以降をターゲットとするプロジェクトで生成されるクラスは、Visual Studio Tools for Office ランタイムの次の新しいクラスから派生します。
ThisDocument
: DocumentBaseThisWorkbook
: WorkbookBaseSheet
n: WorksheetBaseChart
n: ChartSheetBaseプロジェクトのコードで、生成されるいずれかのクラスのインスタンスを派生元の基底クラスとして参照している場合は、コードを変更する必要があります。
たとえば、.NET Framework 3.5 をターゲットとする Excel ブック プロジェクトでは、プロジェクトで生成される
Sheet
n クラスのインスタンスに何かの操作を実行するヘルパー メソッドを使用する場合があります。
private void DoSomethingToSheet(Microsoft.Office.Tools.Excel.Worksheet worksheet)
{
// Do something to the worksheet object.
}
プロジェクトのターゲットを .NET Framework 4 以降に変更する場合は、次の変更のいずれかをコードに加える必要があります。
DoSomethingToSheet
メソッドを呼び出すすべてのコードを変更し、プロジェクトの Base オブジェクトの WorksheetBase プロパティを渡すようにします。 このプロパティは、 Worksheet オブジェクトを返します。DoSomethingToSheet
メソッドのパラメーターを変更し、代わりに WorksheetBase オブジェクトを使用します。
ドキュメントで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 以降をターゲットとするプロジェクトでこれらのイベントに関連付けられているデリゲートを次の表に示します。
OLEObject クラスと OLEControl クラスを使用するコードを更新する
.NET Framework 3.5 をターゲットとするプロジェクトでは、Microsoft.Office.Tools.Excel.OLEObject
クラスと Microsoft.Office.Tools.Word.OLEControl
クラスを使用して、カスタム コントロール (Windows フォームのユーザー コントロールなど) を文書またはワークシートに追加できます。
.NET Framework 4 以降をターゲットとするプロジェクトでは、これらのクラスは ControlSite と ControlSite の各インターフェイスに置き換えられました。 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.SmartTagCollection
、Microsoft.Office.Tools.Excel.ControlCollection
、Microsoft.Office.Tools.Word.ControlCollection
など、Visual Studio Tools for Office ランタイムのいくつかのコレクション型が CollectionBase クラスから派生します。
.NET Framework 4 以降をターゲットとするプロジェクトでは、これらのコレクション型はインターフェイスであり、CollectionBase からは派生しません。 Capacity、 List、 InnerListなどの一部のメンバーは、これらのコレクション型で使用できなくなりました。