チュートリアル : サーバー上のブックへのデータの挿入
更新 : 2007 年 11 月
対象 |
---|
このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。 プロジェクトの種類
Microsoft Office のバージョン
詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。 |
このチュートリアルでは、ServerDocument クラスを使用して、Microsoft Office Excel ブックにキャッシュされたデータセットに、Excel を起動することなくデータを挿入する方法について説明します。このチュートリアルでは、「方法 : サーバー上のブックにデータを挿入する」で提供されているコード例を使用する方法の詳細な手順について説明します。
このチュートリアルでは、次の作業について説明します。
Microsoft SQL Server 2005 用 AdventureWorksLT データベースのデータを格納するデータセットを定義する。
Excel ブック プロジェクトおよびコンソール アプリケーション プロジェクトにデータセットのインスタンスを作成する。
ブックのデータセットにバインドされた ListObject を作成する。
ブックのデータセットをデータ キャッシュに追加する。
コンソール アプリケーションでコードを実行して、Excel を起動することなく、キャッシュされたデータセットにデータを挿入する。
このチュートリアルではコードを開発用コンピュータで実行することを想定していますが、ここで示すコードは、Excel がインストールされていないサーバー上でも実行できます。
メモ : |
---|
次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピュータでは名前や場所が異なる場合があります。これらの要素は、使用する Visual Studio のエディションとその設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。 |
前提条件
このチュートリアルを実行するには、次のコンポーネントが必要です。
Visual Studio Tools for Office (Visual Studio 2008 Professional および Visual Studio Team System のオプションの要素)
ここに挙げた Visual Studio のバージョンでは、Visual Studio Tools for Office が既定でインストールされます。インストールされているかどうかを確認する方法については、「Visual Studio Tools for Office のインストール」を参照してください。
Excel 2007 または Excel 2003。
AdventureWorksLT サンプル データベースが関連付けられている SQL Server 2005 または SQL Server 2005 Express の実行中のインスタンスへのアクセス。AdventureWorksLT データベースは、CodePlex の Web サイトからダウンロードできます。データベースを関連付ける方法の詳細については、以下のトピックを参照してください。
SQL Server Management Studio または SQL Server Management Studio Express を使用してデータベースを関連付ける方法については、「データベースをアタッチする方法 (SQL Server Management Studio)」を参照してください。
コマンド ラインを使用してデータベースを関連付ける方法については、「データベース ファイルを SQL Server Express にアタッチする方法」を参照してください。
データセットを定義するクラス ライブラリ プロジェクトの作成
Excel ブック プロジェクトとコンソール アプリケーションとで同じデータセットを使用するには、これらのプロジェクトの両方から参照される別個のアセンブリ内にデータセットを定義する必要があります。このチュートリアルでは、データセットをクラス ライブラリ プロジェクトに定義します。
クラス ライブラリ プロジェクトを作成するには
Visual Studio を起動します。
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[プロジェクトの種類] ペインで、[Visual C#] または [Visual Basic] を展開し、[Windows] をクリックします。
テンプレート ペインで [クラス ライブラリ] をクリックします。
[プロジェクト名] ボックスに「AdventureWorksDataSet」と入力します。
[参照] をクリックします。%UserProfile%\My Documents フォルダ (Windows XP 以前のバージョンの場合) または %UserProfile%\Documents (Windows Vista の場合) フォルダに移動し、[フォルダの選択] をクリックします。
[新しいプロジェクト] ダイアログ ボックスで、[ソリューションのディレクトリを作成] チェック ボックスがオフになっていることを確認します。
[開く] をクリックします。
Visual Studio によって AdventureWorksDataSet プロジェクトがソリューション エクスプローラに追加され、Class1.cs コード ファイルまたは Class1.vb コード ファイルが開かれます。
ソリューション エクスプローラで、[Class1.cs] または [Class1.vb] を右クリックし、[削除] をクリックします。このファイルは、このチュートリアルには必要ありません。
クラス ライブラリ プロジェクトへのデータセットの定義
SQL Server 2005 用 AdventureWorksLT データベースのデータを格納する型指定されたデータセットを定義します。このチュートリアルの後半で、Excel ブック プロジェクトおよびコンソール アプリケーション プロジェクトからこのデータセットを参照します。
このデータセットは、AdventureWorksLT データベースの Product テーブルのデータを表す型指定されたデータセットです。型指定されたデータセットの詳細については、「Visual Studio のデータセットの概要」を参照してください。
クラス ライブラリ プロジェクトに型指定されたデータセットを定義するには
ソリューション エクスプローラで [AdventureWorksDataSet] プロジェクトをクリックします。
[データ] メニューの [新しいデータ ソースの追加] をクリックします。
データ ソースの構成ウィザードが開きます。
[データベース] をクリックし、[次へ] をクリックします。
AdventureWorksLT データベースへの接続が既に設定されている場合は、その接続を選択し、[次へ] をクリックします。
それ以外の場合は、[新しい接続] をクリックし、[接続の追加] ダイアログ ボックスを使用して新しい接続を作成します。詳細については、「方法 : SQL Server データベースへの接続を作成する」を参照してください。
[アプリケーション構成ファイルに接続文字列を保存] ページで、[次へ] をクリックしますSave the Connection String to the Application Configuration FileNext。
[データベース オブジェクトの選択] ページで、[テーブル] を展開し、[Product (SalesLT)] を選択します。
[終了] をクリックします。
AdventureWorksLTDataSet.xsd ファイルが AdventureWorksDataSet プロジェクトに追加されます。このファイルでは、次の項目を定義します。
AdventureWorksLTDataSet という名前の型指定されたデータセット。このデータセットは、AdventureWorksLT データベースの Product テーブルの内容を表します。
ProductTableAdapter という名前の TableAdapter。TableAdapter は、AdventureWorksLTDataSet のデータを読み書きするために使用します。詳細については、「TableAdapter の概要」を参照してください。
これらのオブジェクトはどちらもこのチュートリアルの後半で使用します。
ソリューション エクスプローラで、[AdventureWorksDataSet] を右クリックし、[ビルド] をクリックします。
プロジェクトがエラーを発生させずにビルドすることを確認します。
Excel ブック プロジェクトの作成
データとのインターフェイス用の Excel ブック プロジェクトを作成します。このチュートリアルの後半では、データを表示する ListObject を作成し、データセットのインスタンスをブック内のデータ キャッシュに追加します。
Excel ブック プロジェクトを作成するには
ソリューション エクスプローラで、[AdventureWorksDataSet] ソリューションを右クリックします。[追加] をポイントし、[新しいプロジェクト] をクリックします。
[プロジェクトの種類] ペインで、[Visual C#] または [Visual Basic] を展開し、[Office] を展開します。
[2007] フォルダ (開発用コンピュータ上で Excel 2007 を使用している場合) または [2003] フォルダ (Excel 2003 を使用している場合) を選択します。
[テンプレート] ペインで [Excel ブック] を選択します。
[プロジェクト名] ボックスに「AdventureWorksReport」と入力します。場所は変更しないでください。
[開く] をクリックします。
Visual Studio Tools for Office プロジェクト ウィザードが開きます。
[新規ドキュメントの作成] が選択されていることを確認し、[OK] をクリックします。
Visual Studio によって、デザイナで AdventureWorksReport ブックが開かれ、ソリューション エクスプローラに AdventureWorksReport プロジェクトが追加されます。
Excel ブック プロジェクトのデータ ソースへのデータセットの追加
Excel ブックにデータセットを表示するには、その前に Excel ブック プロジェクトのデータ ソースにデータセットを追加する必要があります。
Excel ブック プロジェクトのデータ ソースにデータセットを追加するには
ソリューション エクスプローラで、[AdventureWorksReport] プロジェクトの下の [Sheet1.cs] または [Sheet1.vb] をダブルクリックします。
ブックがデザイナで開かれます。
[データ] メニューの [新しいデータ ソースの追加] をクリックします。
データ ソースの構成ウィザードが開きます。
[オブジェクト] をクリックし、[次へ] をクリックします。
[バインド先のオブジェクトを選択します] ページで、[参照の追加] をクリックします。
[プロジェクト] タブで、[AdventureWorksDataSet] をクリックし、[OK] をクリックします。
[AdventureWorksDataSet] アセンブリの [AdventureWorksDataSet] 名前空間の下の [AdventureWorksLTDataSet] をクリックし、[完了] をクリックします。
[データ ソース] ウィンドウが開き、AdventureWorksLTDataSet がデータ ソースの一覧に追加されます。
データセットのインスタンスにバインドされた ListObject の作成
データセットをブックに表示するには、データセットのインスタンスにバインドされた ListObject を作成します。コントロールのデータへのバインドの詳細については、「コントロールへのデータのバインド」を参照してください。
データセットのインスタンスにバインドされた ListObject を作成するには
[データ ソース] ウィンドウで、[AdventureWorksDataSet] の下の [AdventureWorksLTDataSet] ノードを展開します。
[Product] ノードを選択し、表示されるドロップダウン矢印をクリックします。ドロップダウン リストで [ListObject] を選択します。
ドロップダウン矢印が表示されない場合は、デザイナにブックが開かれていることを確認します。
Product テーブルをセル A1 にドラッグします。
productListObject という名前の ListObject コントロールが、セル A1 を始点にワークシートに作成されます。同時に、adventureWorksLTDataSet という名前のデータセット オブジェクトと、productBindingSource という名前の BindingSource がプロジェクトに追加されます。ListObject が BindingSource にバインドされ、さらにこれがデータセット オブジェクトにバインドされます。
データ キャッシュへのデータセットの追加
Excel ブック プロジェクトの外部のコードからブック内のデータセットにアクセスできるようにするには、データセットをデータ キャッシュに追加する必要があります。データ キャッシュの詳細については、「ドキュメント レベルのカスタマイズのデータ モデル」および「キャッシュされたデータ」を参照してください。
データ キャッシュにデータセットを追加するには
デザイナで、[adventureWorksLTDataSet] をクリックします。
[プロパティ] ウィンドウで、[Modifiers] プロパティを [Public] に設定します。
[CacheInDocument] プロパティを [True] に設定します。
チェックポイント
Excel ブック プロジェクトをビルドして実行して、エラーが発生することなくコンパイルおよび実行されることを確認します。
プロジェクトをビルドして実行するには
ソリューション エクスプローラで、[AdventureWorksReport] プロジェクトを右クリックします。[デバッグ] を選択し、[新しいインスタンスを開始] をクリックします。
プロジェクトがビルドされ、ブックが Excel で開かれます。データ キャッシュ内の adventureWorksLTDataSet オブジェクトにはまだデータが設定されていないので、Sheet1 の ListObject は空になっています。次のセクションでは、コンソール アプリケーションを使用して、adventureWorksLTDataSet オブジェクトにデータを設定します。
Excel を終了します。変更を保存しないでください。
コンソール アプリケーション プロジェクトの作成
ブックのキャッシュされたデータセットにデータを挿入するためのコンソール アプリケーション プロジェクトを作成します。
コンソール アプリケーション プロジェクトを作成するには
ソリューション エクスプローラで、[AdventureWorksDataSet] ソリューションを右クリックします。[追加] をポイントし、[新しいプロジェクト] をクリックします。
[プロジェクトの種類] ペインで、[Visual C#] または [Visual Basic] を展開し、[Windows] をクリックします。
[テンプレート] ペインで [コンソール アプリケーション] を選択します。
[プロジェクト名] ボックスに「DataWriter」と入力します。場所は変更しないでください。
[開く] をクリックします。
Visual Studio によって DataWriter プロジェクトがソリューション エクスプローラに追加され、Program.cs コード ファイルまたは Module1.vb コード ファイルが開きます。
コンソール アプリケーションを使用したキャッシュされたデータセットへのデータの追加
ブックのキャッシュされたデータセットにデータを設定するには、コンソール アプリケーションで ServerDocument クラスを使用します。
キャッシュされたデータセットにデータを追加するには
ソリューション エクスプローラで、[DataWriter] プロジェクトを右クリックし、[参照の追加] をクリックします。
[.NET] タブで、次のどちらかのアセンブリを選択します。
開発用コンピュータ上で Excel 2007 を使用している場合は、Microsoft.VisualStudio.Tools.Applications.ServerDocument.v9.0 を選択します。
Excel 2003 を使用している場合は、Microsoft.VisualStudio.Tools.Applications.Runtime を選択します。
これらのアセンブリは、2007 Microsoft Office システムと Microsoft Office 2003 のプロジェクトで使用される ServerDocument クラスの異なるバージョンを定義します。詳細については、「ServerDocument クラスによるサーバー上のドキュメントの管理」を参照してください。
[開く] をクリックします。
ソリューション エクスプローラで、[DataWriter] プロジェクトを右クリックし、[参照の追加] をクリックします。
[プロジェクト] タブで、[AdventureWorksDataSet] を選択し、[OK] をクリックします。
コード エディタで Program.cs ファイルまたは Module1.vb ファイルを開きます。
コード ファイルの先頭に次の using ステートメント (C# の場合) または Imports ステートメント (Visual Basic の場合) を追加します。
Imports Microsoft.VisualStudio.Tools.Applications
using Microsoft.VisualStudio.Tools.Applications;
Main メソッドに次のコードを追加します。このコードは、次のオブジェクトを宣言します。
AdventureWorksDataSet プロジェクトに定義されている AdventureWorksLTDataSet 型および ProductTableAdapter 型のインスタンス
AdventureWorksReport プロジェクトのビルド フォルダ内の AdventureWorksReport ブックへのパス
ブックのデータ キャッシュにアクセスするための ServerDocument オブジェクト
メモ : 次のコードでは、ファイル拡張子として .xlsx を持つ Excel 2007 ブックを使用していると想定しています。プロジェクトのブックで異なるファイル拡張子を使用している場合は、必要に応じてパスを変更してください。
Dim productDataSet As New AdventureWorksDataSet.AdventureWorksLTDataSet() Dim productTableAdapter As _ New AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter() Dim workbookPath As String = System.Environment.GetFolderPath( _ Environment.SpecialFolder.MyDocuments) & _ "\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx" Dim serverDocument1 As ServerDocument = Nothing
AdventureWorksDataSet.AdventureWorksLTDataSet productDataSet = new AdventureWorksDataSet.AdventureWorksLTDataSet(); AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter productTableAdapter = new AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter(); string workbookPath = System.Environment.GetFolderPath( Environment.SpecialFolder.MyDocuments) + @"\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx"; ServerDocument serverDocument1 = null;
前の手順で追加したコードの後で、次のコードを Main メソッドに追加します。このコードは次のタスクを実行します。
テーブル アダプタを使用して、型指定されたデータセット オブジェクトに値を設定します。
ServerDocument クラスの CachedData プロパティを使用して、ブックのキャッシュされたデータセットにアクセスします。
SerializeDataInstance メソッドを使用して、キャッシュされたデータセットにローカルの型指定されたデータセットのデータを設定します。
Try productTableAdapter.Fill(productDataSet.Product) Console.WriteLine("The local dataset is filled.") serverDocument1 = New ServerDocument(workbookPath) Dim dataHostItem1 As CachedDataHostItem = _ serverDocument1.CachedData.HostItems("AdventureWorksReport.Sheet1") Dim dataItem1 As CachedDataItem = dataHostItem1.CachedData("AdventureWorksLTDataSet") ' Initialize the worksheet dataset with the local dataset. If dataItem1 IsNot Nothing Then dataItem1.SerializeDataInstance(productDataSet) serverDocument1.Save() Console.WriteLine("The data is saved to the data cache.") Else Console.WriteLine("The data object is not found in the data cache.") End If Catch ex As System.Data.SqlClient.SqlException Console.WriteLine(ex.Message) Catch ex As System.IO.FileNotFoundException Console.WriteLine("The specified workbook does not exist.") Finally If Not (serverDocument1 Is Nothing) Then serverDocument1.Close() End If Console.WriteLine(vbLf & vbLf & "Press Enter to close the application.") Console.ReadLine() End Try
try { productTableAdapter.Fill(productDataSet.Product); Console.WriteLine("The local dataset is filled."); serverDocument1 = new ServerDocument(workbookPath); CachedDataHostItem dataHostItem1 = serverDocument1.CachedData.HostItems["AdventureWorksReport.Sheet1"]; CachedDataItem dataItem1 = dataHostItem1.CachedData["adventureWorksLTDataSet"]; // Initialize the worksheet dataset with the local dataset. if (dataItem1 != null) { dataItem1.SerializeDataInstance(productDataSet); serverDocument1.Save(); Console.WriteLine("The data is saved to the data cache."); Console.ReadLine(); } else { Console.WriteLine("The data object is not found in the data cache."); } } catch (System.Data.SqlClient.SqlException ex) { Console.WriteLine(ex.Message); } catch (System.IO.FileNotFoundException) { Console.WriteLine("The specified workbook does not exist."); } finally { if (serverDocument1 != null) { serverDocument1.Close(); } Console.WriteLine("\n\nPress Enter to close the application."); Console.ReadLine(); }
ソリューション エクスプローラで、[DataWriter] プロジェクトを右クリックします。[デバッグ] をポイントし、[新しいインスタンスを開始] をクリックします。
プロジェクトがビルドされ、ローカル データセットにデータを設定する処理、およびデータをブックのキャッシュされたデータセットに保存する処理が実行されている間、コンソール アプリケーションによっていくつかのステータス メッセージが表示されます。Enter キーを押してアプリケーションを閉じます。
ブックのテスト
ブックを開くと、コンソール アプリケーションを使用してキャッシュされたデータセットに追加されたデータが ListObject に表示されます。
ブックをテストするには
Visual Studio デザイナに AdventureWorksReport ブックが開かれている場合はこれを閉じます。
Windows エクスプローラで、AdventureWorksReport プロジェクトのビルド フォルダ内にある AdventureWorksReport ブックを開きます。ビルド フォルダは、既定で次のどちらかの場所に設定されます。
%UserProfile%\My Documents\AdventureWorksReport\bin\Debug (Windows XP 以前のバージョンの場合)
%UserProfile%\Documents\AdventureWorksReport\bin\Debug (Windows Vista の場合)
ブックを開いた後、ListObject にデータが設定されていることを確認します。
次の手順
キャッシュされたデータの操作については、以下のトピックを参照してください。
キャッシュされたデータセット内のデータを Excel を起動することなく変更する。詳細については、「チュートリアル : サーバー上のブックにキャッシュされたデータの変更」を参照してください。
データをハード ディスクに保存する代わりに、メモリ内のバイトの配列として Word 文書のデータ キャッシュに挿入する。詳細については、「方法 : ディスクに書き込まずにドキュメントにデータを挿入する」を参照してください。
参照
処理手順
チュートリアル : サーバー上のブックにキャッシュされたデータの変更
方法 : ディスクに書き込まずにドキュメントにデータを挿入する