例子做的比较简单,主要实现GridView导出Excel 和 DataTable直接导出Excel 不再需要绑定gridview再输出,网上的资料很多基本都说的差不多所以做了个小例子献给需要的朋友。
GridView打印Excel
/// <summary> /// GridView打印Excel /// </summary> /// <param name="ctl">GridView控件</param> public void ExportToExcel(System.Web.UI.Control ctl) { bool CurrCtlVisible = ctl.Visible; ctl.Visible = true; Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyy-MM-dd") + " GridviewExcel.xls"); Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); Response.ContentType = "application/ms-excel"; ctl.Page.EnableViewState = false; System.IO.StringWriter tw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw); ctl.RenderControl(hw); Response.Write(tw.ToString()); Response.End(); ctl.Page.EnableViewState = true; ctl.Visible = CurrCtlVisible; }
DataTable打印Excel
/// <summary> /// DataTable打印Excel
/// </summary> /// <param name="dataTable"></param> /// <param name="eFlag">(1)为Excel(2)为Xml</param> /// <param name="fileName">fileName为*.xls或*.xml</param> public void SaveDoc(DataTable dataTable, int eFlag, string fileName) { HttpResponse resp; resp = Page.Response; resp.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); resp.AppendHeader("Content-Disposition", "attachment;filename=" + fileName); string colHeaders = "", ls_item = ""; int i = 0;
//定义表对象和行对像,同时用DataSet对其值进行初始化 DataRow[] myRow = dataTable.Select(""); if (eFlag == 1) { //取得数据表各列标题,各标题之间以/t分割,最后一个列标题后加回车符 for (i = 0; i < dataTable.Columns.Count; i++) { if (i == dataTable.Columns.Count - 1) { colHeaders += dataTable.Columns[i].Caption.ToString() + "/n"; } else { colHeaders += dataTable.Columns[i].Caption.ToString() + "/t"; } } //向HTTP输出流中写入取得的数据信息 resp.Write(colHeaders); //逐行处理数据 foreach (DataRow row in myRow) { //在当前行中,逐列获得数据,数据之间以/t分割,结束时加回车符/n for (i = 0; i < dataTable.Columns.Count; i++) {
if (i == dataTable.Columns.Count - 1) { ls_item += row[i].ToString() + "/n"; } else { ls_item += row[i].ToString() + "/t"; } } //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据 resp.Write(ls_item); ls_item = ""; } } else if (eFlag == 2) { //从DataSet中直接导出XML数据并且写到HTTP输出流中 resp.Write(dataTable.DataSet.GetXml()); } //写缓冲区中的数据到HTTP头文档中 resp.End(); }
另外也就是我刚刚学的如果方便快捷的使用Access
/// <summary> /// 获取DATATABLE /// </summary> private static DataTable GetDataTable() { AccessDataSource accessdata = new AccessDataSource(); accessdata.DataFile = "~/App_Data/nwind.mdb"; accessdata.SelectCommand = "select * from [Customers]"; DataView dv = (DataView)accessdata.Select(DataSourceSelectArguments.Empty); DataTable dt = dv.Table; return dt; }
例子很简单,至于说gridview合并单元后在导出EXCEL我还没测试不知道好不好用有时间一定玩玩。
希望大家不要闲太简单我第一次写博客 呵呵。
实例下载 http://download.csdn.net/source/3201838