1、this.EnableViewState false;这里我们利用了ContentType属性,它默认的属性为text/html,这时将输出为超文本,即我们常见的网页格式到客户端,如果改为ms-excel将将输出excel格式,也就是说以电子表格的格式输出到客户端,这时浏览器将提示你下载保存。ContentType的属性还包括:image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword 。同理,我们也可以输出(导出)图片、word文档等。下面的方法,也均用了这个属性。2、将DataGrid控件中的数据导出Execl上述方法虽然实现了导出的功能,但同时把
2、按钮、分页框等html中的所有输出信息导了进去。而我们一般要导出的是数据,DataGrid控件上的数据。System.Web.UI.Control ctl=this.DataGrid1;/DataGrid1是你在窗体中拖放的控件HttpContext.Current.Response.AppendHeader(filename=Excel.xlsHttpContext.Current.Response.Charset =UTF-8HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;HttpCont
3、ext.Current.Response.ContentType =application/ms-excelctl.Page.EnableViewState =false;System.IO.StringWriter tw = new System.IO.StringWriter() ;System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);ctl.RenderControl(hw);HttpContext.Current.Response.Write(tw.ToString();HttpContext.C
4、urrent.Response.End();如果你的DataGrid用了分页,它导出的是当前页的信息,也就是它导出的是DataGrid中显示的信息。而不是你select语句的全部信息。为方便使用,写成方法如下:public void DGToExcel(System.Web.UI.Control ctl) HttpContext.Current.Response.AppendHeader( HttpContext.Current.Response.Charset = HttpContext.Current.Response.ContentEncoding =System.Text.Encodi
5、ng.Default; HttpContext.Current.Response.ContentType = ctl.Page.EnableViewState =false; System.IO.StringWriter System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw); ctl.RenderControl(hw); HttpContext.Current.Response.Write(tw.ToString(); HttpContext.Current.Response.End(); 用法:DGTo
6、Excel(datagrid1);3、将DataSet中的数据导出Execl有了上边的思路,就是将在导出的信息,输出(Response)客户端,这样就可以导出了。那么把DataSet中的数据导出,也就是把DataSet中的表中的各行信息,以ms-excel的格式Response到http流,这样就OK了。说明:参数ds应为填充有数据表的DataSet,文件名是全名,包括后缀名,如execl2006.xlspublic void CreateExcel(DataSet ds,string FileName) HttpResponse resp;resp = Page.Response;resp.
7、ContentEncoding = System.Text.Encoding.GetEncoding(GB2312resp.AppendHeader(, +FileName);string colHeaders= , ls_item= /定义表对象与行对象,同时用DataSet对其值进行初始化 DataTable dt=ds.Tables0;DataRow myRow=dt.Select();/可以类似dt.Select(id10)之形式达到数据筛选目的 int i=0; int cl=dt.Columns.Count;/取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符 for
8、(i=0;icl;i+)if(i=(cl-1)/最后一列,加ncolHeaders +=dt.Columnsi.Caption.ToString() +nelsecolHeaders+=dt.Columnsi.Caption.ToString()+tresp.Write(colHeaders);/向HTTP输出流中写入取得的数据信息 /逐行处理数据foreach(DataRow row in myRow) /当前行数据写入HTTP输出流,并且置空ls_item以便下行数据ls_item +=rowi.ToString()+ls_item+=rowi.ToString()+resp.Write(
9、ls_item);ls_item= resp.End(); 4、将dataview导出execl若想实现更加富于变化或者行列不规则的execl导出时,可用本法。public void OutputExcel(DataView dv,string str) /dv为要输出到Excel的数据,str为标题名称 GC.Collect(); Application excel;/ = new Application(); int rowIndex=4; int colIndex=1; _Workbook xBk; _Worksheet xSt; excel= new ApplicationClass(
10、); xBk = excel.Workbooks.Add(true); xSt = (_Worksheet)xBk.ActiveSheet; / /取得标题 foreach(DataColumn col in dv.Table.Columns) colIndex+; excel.Cells4,colIndex = col.ColumnName; xSt.get_Range(excel.Cells4,colIndex,excel.Cells4,colIndex).HorizontalAlignment = XlVAlign.xlVAlignCenter;/设置标题格式为居中对齐 /取得表格中的数
11、据 foreach(DataRowView row in dv) rowIndex +; colIndex = 1; colIndex +; if(col.DataType = System.Type.GetType(System.DateTime) excel.CellsrowIndex,colIndex = (Convert.ToDateTime(rowcol.ColumnName.ToString().ToString(yyyy-MM-dd xSt.get_Range(excel.CellsrowIndex,colIndex,excel.CellsrowIndex,colIndex).H
12、orizontalAlignment = XlVAlign.xlVAlignCenter;/设置日期型的字段格式为居中对齐 else System.String excel.CellsrowIndex,colIndex = +rowcol.ColumnName.ToString();/设置字符型的字段格式为居中对齐 excel.CellsrowIndex,colIndex = rowcol.ColumnName.ToString(); /加载一个合计行 int rowSum = rowIndex + 1; int colSum = 2; excel.CellsrowSum,2 = 合计 xSt
13、.get_Range(excel.CellsrowSum,2,excel.CellsrowSum,2).HorizontalAlignment = XlHAlign.xlHAlignCenter; /设置选中的部分的颜色 xSt.get_Range(excel.CellsrowSum,colSum,excel.CellsrowSum,colIndex).Select(); xSt.get_Range(excel.CellsrowSum,colSum,excel.CellsrowSum,colIndex).Interior.ColorIndex = 19;/设置为浅黄色,共计有56种 /取得整个
14、报表的标题 excel.Cells2,2 = str; /设置整个报表的标题格式 xSt.get_Range(excel.Cells2,2,excel.Cells2,2).Font.Bold = true; xSt.get_Range(excel.Cells2,2,excel.Cells2,2).Font.Size = 22; /设置报表表格为最适应宽度 xSt.get_Range(excel.Cells4,2,excel.CellsrowSum,colIndex).Select(); xSt.get_Range(excel.Cells4,2,excel.CellsrowSum,colInde
15、x).Columns.AutoFit(); /设置整个报表的标题为跨列居中 xSt.get_Range(excel.Cells2,2,excel.Cells2,colIndex).Select(); xSt.get_Range(excel.Cells2,2,excel.Cells2,colIndex).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection; /绘制边框 xSt.get_Range(excel.Cells4,2,excel.CellsrowSum,colIndex).Borders.LineStyle = 1;
16、xSt.get_Range(excel.Cells4,2,excel.CellsrowSum,2).BordersXlBordersIndex.xlEdgeLeft.Weight = XlBorderWeight.xlThick;/设置左边线加粗 xSt.get_Range(excel.Cells4,2,excel.Cells4,colIndex).BordersXlBordersIndex.xlEdgeTop.Weight = XlBorderWeight.xlThick;/设置上边线加粗 xSt.get_Range(excel.Cells4,colIndex,excel.CellsrowS
17、um,colIndex).BordersXlBordersIndex.xlEdgeRight.Weight = XlBorderWeight.xlThick;/设置右边线加粗 xSt.get_Range(excel.CellsrowSum,2,excel.CellsrowSum,colIndex).BordersXlBordersIndex.xlEdgeBottom.Weight = XlBorderWeight.xlThick;/设置下边线加粗 /显示效果 excel.Visible=true; /xSt.Export(Server.MapPath(.+this.xlfile.Text+,S
18、heetExportActionEnum.ssExportActionNone,Microsoft.Office.Interop.OWC.SheetExportFormat.ssExportHTML); xBk.SaveCopyAs(Server.MapPath( ds = null; xBk.Close(false, null,null); excel.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk); System.Runtime.InteropServices.Marshal.ReleaseComOb
19、ject(excel); System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt); xBk = null; excel = null; xSt = null; string path = Server.MapPath(this.xlfile.Text+ System.IO.FileInfo file = new System.IO.FileInfo(path); Response.Clear(); Response.Charset= Response.ContentEncoding=System.Text.Encoding.UT
20、F8; / 添加头信息,为文件下载/另存为对话框指定默认文件名 Response.AddHeader( filename= + Server.UrlEncode(file.Name); / 添加头信息,指定文件大小,让浏览器能够显示下载进度 Content-Length, file.Length.ToString(); / 指定返回的是一个不能被客户端读取的流,必须被下载 Response.ContentType = / 把文件流发送到客户端 Response.WriteFile(file.FullName); / 停止页面的执行 Response.End(); 上面的方面,均将要导出的exe
21、cl数据,直接给浏览器输出文件流,下面的方法是首先将其存到服务器的某个文件夹中,然后把文件发送到客户端。这样可以持久的把导出的文件存起来,以便实现其它功能。5、将execl文件导出到服务器上,再下载。二、winForm中导出Execl的方法:1、方法1:public void Out2Excel(string sTableName,string url)Excel.Application oExcel=new Excel.Application();Workbooks oBooks;Workbook oBook;Sheets oSheets;Worksheet oSheet;Range oCe
22、lls;string sFile=,sTemplate=/System.Data.DataTable dt=TableOut(sTableName).Tables0;sFile=url+myExcel.xlssTemplate=url+MyTemplate.xlsoExcel.Visible=false;oExcel.DisplayAlerts=false;/定义一个新的工作簿oBooks=oExcel.Workbooks;oBooks.Open(sTemplate,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing
23、,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing, Type.Missing, Type.Missing);oBook=oBooks.get_Item(1);oSheets=oBook.Worksheets;oSheet=(Worksheet)oSheets.get_Item(1);/命名该sheetoSheet.Name=Sheet1oCells=oSheet.Cells;/调用dumpdata过程,将数据导入到Excel中去DumpData(dt,oCell
24、s);/保存oSheet.SaveAs(sFile,Excel.XlFileFormat.xlTemplate,Type.Missing,Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing);oBook.Close(false, Type.Missing,Type.Missing);/退出Excel,并且释放调用的COM资源oExcel.Quit();GC.Collect();KillProcess(Excelprivate void KillProcess(string processName)System.Diagnostic
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2