C#データベースデータインポートエクスポートシリーズの2つのデータベースをExcelにエクスポート



日常的なプロジェクトでは、Excel、Word、txtなどのフォーマットのデータをデータベースにインポートするのが一般的ですが、ここでまとめてみます
ここではAspに分ける.NetインポートSql Server、Oracleデータベース、WinFormインポートSql Server、Oracleデータベース.
C#データベースデータインポートエクスポートシリーズの一つであるASP.NET Excel Sql Serverデータベースのインポート
C#データベースデータインポートエクスポートシリーズの2つのデータベースをExcelにエクスポート
C#データベースデータインポートエクスポートシリーズの3つのデータベースをExcelにエクスポート
C#データベースデータインポートエクスポートシリーズの4 WinFormデータベースインポートExcelへエクスポート
(ここの4つの文章は基礎的な方法にすぎないことに注意して、もっと高い要求があれば、参考にすることができます.
http://www.cnblogs.com/atao/archive/2009/11/15/1603528.html
http://www.cnblogs.com/tonyqus/category/182110.html 
http://www.yongfa365.com/Item/NPOI-MyXls-DataTable-To-Excel-From-Excel.html .Net NPOIまたはMyXlsでデータTableをExcelにエクスポート
)
1,DataGirdを使用してExcelを生成する
基本思想:
(1)データベースからデータを取り出し、DataGridコントロールにバインドします.このDataGirdleコントロールの知識はデータのベアラとして、ページに表示する必要はありません.
(2)StringWriterを使用してDataGridを読み出し、Responseの別名保存機能を使用してhtmlページをXls形式のExcelファイルとして保存する.
コード:
//    
protected void ibtnExport_Click(object sender, ImageClickEventArgs e)
{
    ExportDataGrid("application/ms-excel", "test.xls"); //  Excel
}

具体的な実装
#region   DataGrid  Excel
        /// <summary>
        ///   DataGrid  Excel
        /// </summary>
        /// <param name="FileType">     MIME  </param>
        /// <param name="FileName">   </param>
        private void ExportDataGrid(string FileType, string FileName) // DataGrid  
        {
            System.Web.UI.WebControls.DataGrid dg = new System.Web.UI.WebControls.DataGrid();

			//      IBatis      ,      ADO          
            dg.DataSource = Helper.ContactExport().ExportDataIntoExcel();
            dg.DataBind();

            //      、       
            Response.Clear();
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
            Response.Charset = "UTF-8";
            Response.ContentEncoding = Encoding.Default;
            Response.ContentType = FileType;
            dg.EnableViewState = false;
            //          
            StringWriter tw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(tw);
            //             
            dg.RenderControl(hw);
            //GvContract   datagrid,     obj.RenderControl()        
            //ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "info", tw.ToString(), false);
            Response.Write(tw.ToString());
            Response.End();
        }
        #endregion

注意事項:
(1)私のページにはAjaxのUpdatePanelコントロールがあるので、コードには以下のコードを入れる必要があります.
        public override void VerifyRenderingInServerForm(Control control)
        {
            //base.VerifyRenderingInServerForm(control);
        }

(2)UpdatePanelのTriggersノードの下にボタンを登録する
        <Triggers>
            <asp:PostBackTrigger ControlID="ibtnExport" />
        </Triggers>

次に、ネット上でダウンロードしたパッケージされたクラスを示します.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Data;
using System.Text;
using System.Globalization;
using System.IO;

namespace VMS.Test.Classes
{
    public class ExcelHelper { 

        #region Fields 
 
        string _fileName; 
        DataTable _dataSource;         
        string[] _titles = null; 
        string[] _fields = null; 
        int _maxRecords = 1000; 
 
        #endregion 
 
        #region Properties 
 
        /**//// <summary> 
        ///       Excel       。        
        /// </summary> 
        public int MaxRecords { 
            set { _maxRecords = value; } 
            get { return _maxRecords; } 
        } 
 
        /**//// <summary> 
        ///         Excel     
        /// </summary> 
        public string FileName { 
            set { _fileName = value; } 
            get { return _fileName; } 
        } 
 
        #endregion 
 
        #region .ctor 
 
        /**//// <summary> 
        ///      
        /// </summary> 
        /// <param name="titles">     Excel        </param> 
        /// <param name="fields">     Excel        </param> 
        /// <param name="dataSource">   </param> 
        public ExcelHelper(string[] titles, string[] fields, DataTable dataSource): this(titles, dataSource)        { 
            if (fields == null || fields.Length == 0) 
                throw new ArgumentNullException("fields"); 
 
            if (titles.Length != fields.Length) 
                throw new ArgumentException("titles.Length != fields.Length", "fields"); 
             
            _fields = fields;             
        } 
 
        /**//// <summary> 
        ///      
        /// </summary> 
        /// <param name="titles">     Excel        </param> 
        /// <param name="dataSource">   </param> 
        public ExcelHelper(string[] titles, DataTable dataSource): this(dataSource) { 
            if (titles == null || titles.Length == 0) 
                throw new ArgumentNullException("titles"); 
            //if (titles.Length != dataSource.Columns.Count) 
            //    throw new ArgumentException("titles.Length != dataSource.Columns.Count", "dataSource"); 
 
            _titles = titles;             
        } 
 
        /**//// <summary> 
        ///      
        /// </summary> 
        /// <param name="dataSource">   </param> 
        public ExcelHelper(DataTable dataSource) { 
            if (dataSource == null) 
                throw new ArgumentNullException("dataSource"); 
            // maybe more checks needed here (IEnumerable, IList, IListSource, ) ??? 
            //     ,       DataTable 
 
            _dataSource = dataSource; 
        } 
         
        public ExcelHelper() {} 
 
        #endregion 
         
        #region public Methods 
         
        /**//// <summary> 
        ///     Excel       
        /// </summary> 
        /// <param name="dg">DataGrid</param> 
        public void Export(DataGrid dg) { 
            if (dg == null) 
                throw new ArgumentNullException("dg"); 
            if (dg.AllowPaging || dg.PageCount > 1) 
                throw new ArgumentException("paged DataGrid can't be exported.", "dg"); 
 
            //        
            dg.HeaderStyle.Font.Bold = true; 
            dg.HeaderStyle.BackColor = System.Drawing.Color.LightGray; 
 
            RenderExcel(dg); 
        } 
 
        ///**//// <summary> 
        /////     Excel       
        ///// </summary> 
        ///// <param name="xgrid">ASPxGrid</param> 
        //public void Export(DataGrid xgrid) {  
        //    if (xgrid == null) 
        //        throw new ArgumentNullException("xgrid"); 
        //    if (xgrid.PageCount > 1) 
        //        throw new ArgumentException("paged xgird not can't be exported.", "xgrid"); 
 
        //    //        
        //    xgrid.HeaderStyle.Font.Bold = true; 
        //    xgrid.HeaderStyle.BackColor = System.Drawing.Color.LightGray; 
 
        //    RenderExcel(xgrid); 
        //} 
 
        /**//// <summary> 
        ///     Excel       
        /// </summary> 
        public void Export() { 
            if (_dataSource == null) 
                throw new Exception("        "); 
 
            if (_fields == null && _titles != null && _titles.Length != _dataSource.Columns.Count)  
                throw new Exception("_titles.Length != _dataSource.Columns.Count"); 
             
            if (_dataSource.Rows.Count > _maxRecords) 
                throw new Exception("          。    MaxRecords              。"); 
 
            DataGrid dg = new DataGrid(); 
            dg.DataSource = _dataSource; 
 
            if (_titles == null) { 
                dg.AutoGenerateColumns = true; 
            }  
            else { 
                dg.AutoGenerateColumns = false; 
                int cnt = _titles.Length; 
 
                System.Web.UI.WebControls.BoundColumn col; 
 
                if (_fields == null) { 
                    for (int i=0; i<cnt; i++) { 
                        col = new System.Web.UI.WebControls.BoundColumn(); 
                        col.HeaderText = _titles[i]; 
                        col.DataField = _dataSource.Columns[i].ColumnName; 
                        dg.Columns.Add(col); 
                    } 
                } 
                else { 
                    for (int i=0; i<cnt; i++) { 
                        col = new System.Web.UI.WebControls.BoundColumn(); 
                        col.HeaderText = _titles[i]; 
                        col.DataField = _fields[i]; 
                        dg.Columns.Add(col); 
                    } 
                } 
            } 
 
            //        
            dg.HeaderStyle.Font.Bold = true; 
            dg.HeaderStyle.BackColor = System.Drawing.Color.LightGray; 
            dg.ItemDataBound += new DataGridItemEventHandler(DataGridItemDataBound); 
 
            dg.DataBind(); 
            RenderExcel(dg); 
        } 
 
        #endregion 
 
        #region private Methods 
         
        private void RenderExcel(Control c) { 
            //               
            if (_fileName == null || _fileName == string.Empty || !(_fileName.ToLower().EndsWith(".xls"))) 
                _fileName = GetRandomFileName(); 
 
            HttpResponse response = HttpContext.Current.Response; 
             
            response.Charset = "GB2312"; 
            response.ContentEncoding = Encoding.GetEncoding("GB2312"); 
            response.ContentType = "application/ms-excel/msword"; 
            response.AppendHeader("Content-Disposition", "attachment;filename=" +  
                HttpUtility.UrlEncode(_fileName)); 
 
            CultureInfo cult = new CultureInfo("zh-CN", true); 
            StringWriter sw = new StringWriter(cult);             
            HtmlTextWriter writer = new HtmlTextWriter(sw); 
 
            writer.WriteLine("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=GB2312\">"); 
 
            DataGrid dg = c as DataGrid; 
             
            if (dg != null) { 
                dg.RenderControl(writer); 
            } 
            else {
                DataGrid xgrid = c as DataGrid; 
 
                if (xgrid != null) 
                    xgrid.RenderControl(writer); 
                else 
                    throw new ArgumentException("only supports DataGrid or ASPxGrid.", "c");     
            } 
            c.Dispose(); 
 
            response.Write(sw.ToString()); 
            response.End(); 
        } 
 
 
        /**//// <summary> 
        ///            
        /// </summary> 
        /// <returns></returns> 
        private string GetRandomFileName() { 
            Random rnd = new Random((int) (DateTime.Now.Ticks)); 
            string s = rnd.Next(Int32.MaxValue).ToString(); 
            return DateTime.Now.ToShortDateString() + "_" + s + ".xls"; 
        } 
 
        private void DataGridItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { 
            if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { 
                e.Item.Attributes.Add("style", "vnd.ms-excel.numberformat:@"); 
                //e.Item.Cells[3].Attributes.Add("style", "vnd.ms-excel.numberformat:¥#,###.00"); 
            } 
        } 
        #endregion 
    } 
}