.NET Framework 4 または .NET Framework 4.5 に移行する Excel プロジェクトおよび Word プロジェクトの更新
Excel がある場合、または次の機能を使用するプロジェクトまたは Word プロジェクトのターゲット フレームワークを .NET Framework 4 か .NET Framework 4.5に変更する場合は、コードを変更する必要があります:
GetVstoObject メソッドと HasVstoObject メソッド
ドキュメント レベルのプロジェクトで生成されるクラス
ドキュメント上の Windows フォーム コントロール
Word コンテンツ コントロールのイベント
OLEObject クラスと OLEControl クラス
Controls.Item(Object) プロパティ
CollectionBase から派生するコレクション
また Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute を削除し、Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy への参照は .NET Framework 4 か .NET Framework 4.5に再ターゲットされた Excel プロジェクトからを並べ替えます。Visual Studio ではこの属性またはクラスの参照は削除されません。
Excel プロジェクトからの ExcelLocale1033 属性の削除
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute は .NET Framework 4 か .NET Framework 4.5を対象とするソリューションで使用される Office ランタイムの Visual Studio 2010 Tools の部分からは削除されています。.NET Framework 4 と .NET Framework 4.5 の共通言語ランタイム (CLR) は、Excel オブジェクト モデルにロケール ID 1033 が常に渡し、この動作を無効にするには、この属性は使用できません。詳細については、「Excel ソリューションのグローバリゼーションとローカリゼーション」を参照してください。
ExcelLocale1033Attribute を削除するには
Visual Studio でプロジェクトを開き、ソリューション エクスプローラーを開きます。
[プロパティ] ノード (C# の場合) または [マイ プロジェクト] ノード (Visual Basic の場合) の下で、AssemblyInfo コード ファイルをダブルクリックしてコード エディターで開きます。
[!メモ]
Visual Basic プロジェクトで AssemblyInfo コード ファイルを確認するには、ソリューション エクスプローラーの [すべてのファイルの表示] をクリックする必要があります。
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute を探し、ファイルから削除するか、コメント アウトします。
<Assembly: ExcelLocale1033Proxy(True)>
[assembly: ExcelLocale1033Proxy(true)]
ExcelLocal1033Proxy のクラスへの参照を削除できます。
Microsoft Visual Studio 2005 を使用して作成されたプロジェクトは Microsoft Office system の場合 Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy のクラスを使用してインスタンスを作成します Microsoft.Office.Interop.Excel.Application Excel のオブジェクトをツールの。このクラスは .NET Framework 4 か .NET Framework 4.5を対象とするソリューションで使用される Office ランタイムの Visual Studio 2010 Tools の部分からは削除されています。したがって、このクラスを参照する削除するか、コード行コメントする必要があります。
ExcelLocal1033Proxy への参照を削除するには、クラス。
Visual Studio でプロジェクトを開き、[ソリューション エクスプローラー] を開きます。
[ソリューション エクスプローラー] では、ThisAddin.cs、C (の場合) または ThisAddin.vb のショートカット メニュー (Visual Basic の場合) 開き、[コードの表示] を選択します。
コード エディターで、VSTO generated code 領域で、削除するか、次のコード行をコメントにします。
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);
GetVstoObject メソッドと HasVstoObject メソッドを使用するコードの更新
.NET Framework 3.5 を対象とするプロジェクトでは、GetVstoObject メソッドまたは HasVstoObject メソッドを、プロジェクトのいずれかのネイティブ オブジェクト (Microsoft.Office.Interop.Word.Document, Microsoft.Office.Interop.Excel.Workbook、Microsoft.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 か .NET Framework 4.5を対象とするプロジェクトでは、次の 1 とおりの方法でこれらのメソッドにアクセスするようにコードを変更する必要があります:
以前のように、Microsoft.Office.Interop.Word.Document、Microsoft.Office.Interop.Excel.Workbook、Microsoft.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 ブックの拡張」を参照してください。
ドキュメント レベルのプロジェクトで生成されるクラスのインスタンスを使用するコードの更新
.NET Framework 3.5 を対象とするドキュメント レベルのプロジェクトでは、プロジェクトで生成されるクラスは Visual Studio Tools for Office Runtime の次のクラスから派生します。
ThisDocument: Microsoft.Office.Tools.Word.Document
ThisWorkbook: Microsoft.Office.Tools.Excel.Workbook
.NET Framework 4 か .NET Framework 4.5を対象とするプロジェクトでは、上記のクラスの代わりに Visual Studio Tools for Office Runtime の型は、インターフェイスです。.NET Framework 4 か .NET Framework 4.5 を対象とするプロジェクトで生成されるクラスは Visual Studio Tools for Office Runtimeの次の新しいクラスから派生します:
ThisDocument: Microsoft.Office.Tools.Word.DocumentBase
ThisWorkbook: Microsoft.Office.Tools.Excel.WorkbookBase
プロジェクトのコードで、生成されるいずれかのクラスのインスタンスを派生元の基本クラスとして参照している場合は、コードを変更する必要があります。
たとえば、.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 か .NET Framework 4.5にプロジェクトの対象を、コードに対して次の変更のいずれかを行う必要があります: 1
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 か .NET Framework 4.5を対象とするプロジェクトでは、これらのメソッドは Controls のプロパティで使用できる拡張メソッドです。これらの拡張メソッドを使用するには、メソッドを使用するコード ファイルに、Microsoft.Office.Tools.Excel 名前空間または Microsoft.Office.Tools.Word 名前空間に対する using ステートメントまたは Imports ステートメントが必要です。このステートメントは .NET Framework 4 か .NET Framework 4.5を対象とする新しいプロジェクトに自動的に生成されます。ただし、このステートメントは、.NET Framework 3.5 を対象とするプロジェクトには自動的に追加されないため、プロジェクトの対象を変更するときに手動で追加する必要があります。
詳細については、「実行時の Office ドキュメントへのコントロールの追加」を参照してください。
Word コンテンツ コントロールのイベントを処理するコードの更新
.NET Framework 3.5 を対象とするプロジェクトでは、Word コンテンツ コントロールのイベントは汎用の EventHandler<TEventArgs> デリゲートによって処理されます。.NET Framework 4 か .NET Framework 4.5を対象とするプロジェクトでは、これらのイベントは他のデリゲートによって処理されます。
次の表は .NET Framework 4 か .NET Framework 4.5を対象とするプロジェクトでこれらのイベントに関連付けられたデリゲート、Word コンテンツ コントロールのイベントを示します。
Event |
.NET Framework 4 と .NET Framework 4.5 のプロジェクトで使用するデリゲート |
---|---|
OLEObject クラスと OLEControl クラスを使用するコードの更新
.NET Framework 3.5 を対象とするプロジェクトでは、Microsoft.Office.Tools.Excel.OLEObject クラスと Microsoft.Office.Tools.Word.OLEControl クラスを使用して、カスタム コントロール (Windows フォームのユーザー コントロールなど) を文書またはワークシートに追加できます。
.NET Framework 4 か .NET Framework 4.5を対象とするプロジェクトでは、これらのクラスは 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 か .NET Framework 4.5を対象とするプロジェクトでは、Item(Object) のプロパティは、これらのコレクションから削除されました。文書またはワークシートが特定のコントロールを持つかどうかを判断するには、代わりに Document.Controls コレクションまたは Worksheet.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 Runtime のいくつかのコレクション型が CollectionBase クラスから派生します。
これで、.NET Framework 4 か .NET Framework 4.5を対象とするプロジェクトでは、これらのコレクション型で CollectionBaseから派生インターフェイスです。Capacity、List、InnerList などの一部のメンバーは、これらのコレクション型で使用できなくなりました。
参照
概念
.NET Framework 4 または .NET Framework 4.5 への Office ソリューションの移行