WebDataGrid : Excel インポート/ エクスポート (Excel、PDF、XPS)

0 ユーザーが評価
この投稿には確認済みの回答があります。 0 返信 | 1 サポーター

トップ 10 投稿者 
女性
投稿 18
IG Employee
[IG] Yoshimi 投稿済み: 2010/12/9 15:40

WebDataGrid : Excel インポート/ エクスポート (Excel、PDF、XPS)

 

元記事 (英語): Murtaza Abdeali - http://community.infragistics.com/aspnet/articles/webdatagrid-import-data-from-excel-amp-export-to-excel-pdf-or-xps.aspx

 インフラジスティックス コントロールでデータのインポート/エクスポートをする際に使用する Excel や Document API についての多くのご質問が寄せられています。そこで、この記事では、最近リリースされたばかりの WebDataGrid コントロールについてご説明しようと思います。 現在、Excel、PDF、XPS へのコンテンツのエクスポートはビルトインではサポートされていませんが、将来サポートされていく機能の 1 つだと思われます。

さて、Excel API の load メソッドを使用して Excel からデータを取得し、そのデータを WebDataGrid で表示する方法を見てみましょう。
データがグリッドへ接続されると、フィルタリング、並べ替え、編集など、さまざまな機能が使用できるようになります。 ユーザーが表示されているデータをエクスポートしたい場合は、同じ API Engine を使用して編集されたデータをエクスポートし、Excel、 PDF または XPS 形式で表示できます。

 

 

データのインポート

はじめにローカル変数を割り当てます。

 

  1. //Create the temporary table to store data DataTable myDataTable = new DataTable();    
  2. DataColumn myDataColumn;   
  3. DataRow myDataRow;    
  4.   
  5. //MIN/MAX Values used to frame the working size of the Excel data to be imported.    
  6. int minCellRow = Int32.MaxValue;    
  7. int maxCellRow = Int32.MinValue;    
  8. int minCellColumn = Int32.MaxValue;    
  9. int maxCellColumn = Int32.MinValue;  

次に NorthWind 顧客データを含む Excel シートを使用して、Excel API の Load メソッドを呼び出してデータを読み込み、データセットを構成します。

  1. Workbook internalWorkBook = Workbook.Load(Request.PhysicalApplicationPath + "Northwind.xls");  

 

Load メソッドは Excel コンテンツを読み込み、Excel ワークブック オブジェクトを返します。
ワークブックが返されたら、データが含まれるワークシートを検索してデータ オブジェクトを構成することができます。このデータ オブジェクトを WebDataGrid へバインドします。

この例では、DataTable を使用します。 まず、データのバインドおよび列の構造を決め、それに従って、データ オブジェクトの骨組みを作成することができます。
ワークブック オブジェクトを使用して行と列を反復し、WebDataGrid へ読み込むワークシートのセルの最大/最小を確定できます。

  1. foreach (Infragistics.Excel.WorksheetRow row in internalWorkBook.Worksheets["Customers"].Rows)    
  2. {   
  3.     foreach (Infragistics.Excel.WorksheetCell cell in row.Cells)    
  4.     {    
  5.         if (cell.Value != null)   
  6.         {    
  7.            //Logic For Determining the Range of Rows/Columns in the Excel File.   
  8.            minCellRow = Math.Min(minCellRow, cell.RowIndex);   
  9.            maxCellRow = Math.Max(maxCellRow, cell.RowIndex);   
  10.            minCellColumn = Math.Min(minCellColumn, cell.ColumnIndex);   
  11.            maxCellColumn = Math.Max(maxCellColumn, cell.ColumnIndex);   
  12.         }   
  13.     }    
  14. }  

 

ワークシートの構造情報を集めたら、データベースに行を作成すると同時に WebDataGrid の列を構成できます。
ここでインポートしない列または作成する WebDataGrid の列でプロパティを設定しない列の編集および削除ができます。

  1. for (int i = minCellColumn; i <= maxCellColumn; i++)    
  2. {    
  3.    //Get the column name    
  4.    string columnName = internalWorkBook.Worksheets["Customers"].Rows[minCellRow].Cells[ i].Value.ToString();   
  5.   
  6.    //The export that was demonstrated earlier utilizes the first row   
  7.    //for the column header. We can now use that to give column names.   
  8.    myDataColumn = new DataColumn(columnName);   
  9.   
  10.    //Add the columns to the datatable.   
  11.    myDataTable.Columns.Add(myDataColumn);   
  12.   
  13.    //Create WebDataGrid Columns and enable settings    
  14.    BoundDataField bdf = new BoundDataField(true);    
  15.    bdf.DataFieldName = columnName;    
  16.    bdf.Key = columnName;    
  17.    bdf.Header.Text = columnName;    
  18.    bdf.Width = Unit.Pixel(100);    
  19.    importGrid.Columns.Add(bdf); }  

 

最後にワークシートから DataTable へデータをプッシュします

  1. for (int rowIndex = minCellRow + 1; rowIndex <= maxCellRow; rowIndex++)    
  2. {    
  3.    //Create a new DataRow myDataRow = myDataTable.NewRow();    
  4.    //Loop through the columns and associate the value to each cell    
  5.    for (int columnIndex = minCellColumn; columnIndex <= maxCellColumn; columnIndex++)    
  6.    {    
  7.       myDataRow[columnIndex] = internalWorkBook.Worksheets["Customers"].Rows[rowIndex].Cells[columnIndex].Value;    
  8.    }    
  9.       
  10.    //Add The Row to a DataTable    
  11.    myDataTable.Rows.Add(myDataRow);    
  12. }  

 

DataTable と WebDataGrid 列の準備ができました。次は WebDataGrid へバインドします。

  1. //Set the primary key so that the WebDataGrid can perform Auto Crud    
  2. myDataTable.PrimaryKey = new DataColumn[] { myDataTable.Columns["CustomerID"] };   
  3.   
  4. //ImportGrid below is the grid that we have on our page    
  5. importGrid.DataSource = myDataTable; importGrid.DataBind();  

 

ソースコードを含むサンプルは、この記事の最後にあるリンクからダウンロードできます。

注 :コードは XLS ファイルがサーバーにあると仮定するため、 Excel Engine へフィードして WebDataGrid へデータをインポートできます。 クライアントでローカルの Excel ファイルをインポートするなどの動作を拡張する場合は、クライアントでファイルを一度サーバーへアップロードする機能を追加する必要があります。 サーバーへアップロードされたら、import メソッドを使用してデータを抽出できます。

 

データのエクスポート

API を使用してさまざまな形式でのデータ エクスポートのコンセプトは同じです。 まず WebDataGrid 列を反復してエクスポートするドキュメントの列構造を作成します。次にWebDataGrid の行を反復してエクスポートするデータの行を作成します。 どの形式でエクスポートする場合もコードはほとんど同じなため、ここでは Excel へのエクスポートを例として紹介します。すべての形式が含まれるコードは以下のリンクからダウンロードできます。

まず、データをエクスポートするワークブックとワークシートのオブジェクトを作成します。更にタスクを達成するためのヘルパー変数を作成します。

  1. //Create workbook and worksheet object for Excel Workbook    
  2. theWorkbook = new Workbook();    
  3. Worksheet theWorkSheet = theWorkbook.Worksheets.Add("WorkSheet1");    
  4. int iRow = 1; int iCell = 1;  

 

次は WebDataGrid 列を反復して Excel シートの列を作成し、その列のセルを埋めるために行を検索します。

  1. //Iterate through the columns of the WebDataGrid and create   
  2.  // columns within the worksheet that will be exported.    
  3. foreach(GridField gridField in this.WebDataGrid1.Columns)    
  4. {    
  5.    iRow = 1;    
  6.    theWorkSheet.Rows[iRow].Cells[iCell].Value = gridField.Header.Text;    
  7.    theWorkSheet.Columns[iCell].Width = 5000;    
  8.    iRow += 1;    
  9.   
  10.    //Now iterate through the grid rows to add rows to the worksheet    
  11.    foreach(GridRecord gridRecord in this.WebDataGrid1.Rows)    
  12.    {    
  13.       theWorkSheet.Rows[iRow].Cells[iCell].Value = gridRecord.Items[iCell-1].Text;    
  14.       iRow += 1;    
  15.    }    
  16.    iCell += 1;    
  17. }  

 

添付のサンプルには、エクスポートでセルを書式化するための追加コードが含まれます
ワークシートを作成してデータをエクスポートしたら、Excel シートをストリームへ書き込んでクライアントで表示できます。

  1. //Create the Stream class    
  2. System.IO.MemoryStream theStream = new System.IO.MemoryStream();    
  3.   
  4. //Write the in memory Workbook object to the Stream    
  5. theWorkbook.Save(theStream);    
  6.   
  7. //Create a Byte Array to contain the stream and send the exported sheet to the client    
  8. byte[] byteArr = (byte[])Array.CreateInstance(typeof(byte), theStream.Length);    
  9. theStream.Position = 0;    
  10. theStream.Read(byteArr, 0, (int)theStream.Length);    
  11. theStream.Close();    
  12. Response.Clear();    
  13. Response.AddHeader("content-disposition""attachment; filename=ExportedTo.xls");    
  14. Response.BinaryWrite(byteArr);    
  15. Response.End();  

 

完成です!
上記コード サンプルに弊社製品に含まれる API を使用して、Excel からのデータ インポート、更にデータを Excel, PDF または XPS へのエクスポートが可能になります。
以下のリンクから、このチュートリアルで使用したソースコードをダウンロードできます。

ソースコード: ExportWebDataGridContents.zip

注: サンプルでは 2008 Volume 3 コントロール セットおよび C# を使用しています。

 

弊社の API はコントロールやコンポーネントと直接接続していません。必要に応じてカスタム エクスポートに使用できます。
API を使用したその他の例は以下のリソースをご覧ください。

 

Manually Create Excel Files (英語)

Coloring Keywords in your Excel Worksheet (英語)

Export WinChart to Excel (英語)

Export WinTree to Excel (英語)

 

ページ 1 / 1 (1 項目) | RSS
Infragistics Japan
インフラジスティックス ジャパン