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
}
}