.Net 中导出数据到Excel

合集下载

Asp.Net使用Npoi导入导出Excel的方法

Asp.Net使用Npoi导入导出Excel的方法

使⽤Npoi导⼊导出Excel的⽅法针对Excel⽂件的导⼊与导出是⾮常常见的功能之⼀。

本⽂实例讲述了使⽤Npoi导⼊导出Excel的⽅法。

分享给⼤家供⼤家参考之⽤。

具体⽅法如下:在使⽤Npoi导出Excel的时候,服务器可以不装任何office组件,⼀般在导出时⽤到Npoi导出Excel⽂件,所导Excel也符合规范,打开时也不会有任何⽂件损坏之类的提⽰。

但是在做导⼊时还是使⽤OleDb的⽅式,这种⽅式的导⼊在服务器端似乎还是需要装office组件的。

⼀、Npoi导出/下载Excel具体功能代码如下:public void NpoiExcel(DataTable dt, string title){erModel.HSSFWorkbook book = new erModel.HSSFWorkbook();erModel.ISheet sheet = book.CreateSheet("Sheet1");erModel.IRow headerrow = sheet.CreateRow(0);ICellStyle style = book.CreateCellStyle();style.Alignment = HorizontalAlignment.Center;style.VerticalAlignment = VerticalAlignment.Center;for (int i = 0; i < dt.Columns.Count; i++){ICell cell = headerrow.CreateCell(i);cell.CellStyle = style;cell.SetCellValue(dt.Columns[i].ColumnName);}MemoryStream ms = new MemoryStream();book.Write(ms);Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", HttpUtility.UrlEncode(title + "_" + DateTime.Now.ToString("yyyy-MM-dd"), System.Text.Encoding.UTF8))); Response.BinaryWrite(ms.ToArray());Response.End();book = null;ms.Close();ms.Dispose();}⼆、导⼊Excel导⼊仍然是⽤OleDb这种⽅式,感兴趣的朋友可以尝试⼀下其他⽅法。

.net导出excel的四种方法及评测

.net导出excel的四种方法及评测

一、概述在日常工作和生活中,我们经常会遇到需要导出Excel表格的情况,无论是数据分析报告、财务报表还是客户清单,Excel都是非常常见的工具。

而对于使用.net框架的开发人员来说,如何在程序中实现Excel 导出也是一个常见的需求。

本文将介绍四种常见的.net导出Excel的方法,并对它们进行评测,以便开发人员在实际项目中选择最合适的方案。

二、利用Microsoft.Office.Interop.Excel进行导出1. 使用COM组件操作ExcelMicrosoft.Office.Interop.Excel是.NET对Excel COM组件的封装,开发人员可以通过这个组件来操作Excel。

通过这种方法,可以实现对Excel表格的创建、读取、修改和导出。

2. 优点a. 功能丰富:可以实现对Excel表格的各种操作,包括格式设置、数据写入等。

b. 灵活性高:可以实现对Excel表格的各种定制操作,满足不同需求。

3. 缺点a. 依赖性强:需要安装Office软件,才能在服务器上执行。

b. 性能低:由于是通过COM组件进行操作,性能相对较低,特别是在大数据量的情况下。

三、利用NPOI库进行导出1. 使用NPOI库NPOI是一个.NET操作Office文件的开源库,支持对Excel、Word、PowerPoint的读写操作。

通过NPOI库,开发人员可以对Excel表格进行创建、读取、修改和导出。

2. 优点a. 轻量级:NPOI库较轻量,不需要依赖Office软件。

b. 跨评台性:NPOI库可以在Windows、Linux和MacOS等操作系统上使用。

3. 缺点a. API复杂:相对于Microsoft.Office.Interop.Excel,NPOI库的API设计相对复杂。

b. 功能相对局限:相对于Microsoft.Office.Interop.Excel,NPOI库的功能相对局限一些。

四、利用EPPlus库进行导出1. 使用EPPlus库EPPlus是一个用于操作Excel文件的开源库,可以在.NET环境下实现对Excel表格的创建、读取、修改和导出。

.NetcoreWebAPI导出数据到Excel

.NetcoreWebAPI导出数据到Excel

.NetcoreWebAPI导出数据到Excel前⾔产品经理有⼀个需求,就是将cosmosDB⾥的数据,导出到Excel中.1.新建⼀个.net core web api controller添加引⽤:EPPlus.CoreInstall-Package EPPlus.Core命名空间:using OfficeOpenXml;2.在HomeController⾥添加Export的⽅法这⾥会遇到⼏个坑:第⼀个是使⽤HttpResponseMessage的时候,返回的不是⼀个⽂件,⽽是⼀个HttpResponseMessage 类型的json;第⼆个是返回的File的时候,注意要加上stream.position=0;第三个是将stream保存在内存(⼩⽂件),有些虚机不⼀定有C盘,所以创建物理路径是存在risk,暂存在内存避免crash。

要是⼤⽂件还是另寻他法,万⼀out of memory。

这⾥我们使⽤IActionResult返回类型。

[HttpGet][Route("export")]public async Task<IActionResult> Export(){string fileName = $"{Guid.NewGuid().ToString()}.xlsx";//store in memory rather than pysical directoryvar stream = new MemoryStream();var messages = await ConversationManager.GetConversationMessagesAsync();var columns = new ConversationMessage();using (ExcelPackage package = new ExcelPackage(stream)){// add worksheetExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Conversation Message");//add headworksheet.Cells[1, 1].Value = "From Id";worksheet.Cells[1, 2].Value = "To Id";worksheet.Cells[1, 3].Value = "Message";worksheet.Cells[1, 4].Value = "Time";worksheet.Cells[1, 5].Value = "Attachment";worksheet.Cells[1, 6].Value = "Conversation Id";//add valuevar rowNum = 2; // rowNum 1 is headforeach (var message in messages){worksheet.Cells["A" + rowNum].Value = message.FromId;worksheet.Cells["B" + rowNum].Value = message.ToId;worksheet.Cells["C" + rowNum].Value = message.Message;worksheet.Cells["D" + rowNum].Value = message.MsgTime;worksheet.Cells["E" + rowNum].Value = message.Attachment;worksheet.Cells["F" + rowNum].Value = message.ConversationId;rowNum++;}package.Save();}stream.Position = 0;return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);}3.说明最后在浏览器打开api,成功下载:这⾥highlighted的部分就是代码中的Worksheets,还可以对表头进⾏加粗上⾊之类的,暂时没有这个需求就不深⼊了。

怎么将ASP.NET导出Excel表格

怎么将ASP.NET导出Excel表格

怎么将导出Excel表格怎么将导出Excel表格之前一直想研究导出Excel表格来着,但一直没有时间,这几天因为一个项目的需要,所以就钻研了一下。

小面小编告诉你怎么将导出Excel表格:1.在DownStudent.aspx页面上添加一个Label标签用来显示“请选择要查看数据的条件”静态文本;2.在该页面上添加DropDownList控件用来控制显示数据以及输出数据的条件,绑定DropDownList1_SelectedIndexChanged函数;3.在该页面上添加GridView控件来显示由DropDownList控件指定条件的数据;4.在该页面上添加SqlDataSource控件用来连接数据库并将查询的结果返给GridView控件;5.最后是一个确认按钮,绑定Button1_Click函数。

后台代码实现(DownStudent.aspx.cs):(具体代码见附录)后台代码的实现是导出Excel表格的关键所在,是重中之重。

1.首先是命名空间的问题,因为这里是导出Excel表格用到了输入输出流,所以必须在命名空间里引用IO流(using System.IO;),我这里用的是SQLServer数据库,所以还要用到(using System.Data;和using System.Data,Sql;);2.实现DropDownList1_SelectedIndexChanged函数,注意:SelectedIndexChanged方法的实现必须基于DropDownList1控件的AutoPostBack属性要设置为True(否则SelectedIndexChanged 方法无效),而DropDownList1_SelectedIndexChanged函数主要实现的就是根据DropDownList1控件选定的条件修改SqlDataSource 控件的SelectComand的值;代码示例:SqlDataSource1.SelectCommand = "SELECT [Chufen], [Zhibu], [Zhuanzheng] from bizusers WHERE (bizusers.Zhibu ='" + DropDownList1.SelectedItem.Text + "')";3.Button1_Click函数是精华所在,该函数实现思想是:先获取一个数据库连接(方法比较多,有传统通过SqlConnect获取的,也有调用外部类实现的),然后是一条SQL语句(Select查询字符串),再者是调用外部类的方法根据SQL语句生成一个DataSet结果集对象(把SQL 语句查询到的值放入DataSet里,方便下一次使用,而不是再去访问一次数据库),最后,调用CreateExcel函数,注意参数;4.实现CreateExcel函数(就是对生成的DataSet的进一步操作了);其他引用文件说明:在App_Code文件夹里主要有3个外部类,QueryString.cs文件这里不是重点,故跳过。

asp.net导出数据到EXCEL的方法总结

asp.net导出数据到EXCEL的方法总结

导出数据到EXCEL的方法总结在中导出数据到EXCEL里的方法很多,本文总结了常见的几种导出方式(由dataset生成,由datagrid生成,dataview ),供大家参考!1、由dataset生成public void CreateExcel(DataSet ds,string typeid,string FileName){HttpResponse resp;resp = Page.Response;resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);string colHeaders= "", ls_item="";int i=0;//定义表对象与行对像,同时用DataSet对其值进行初始化DataTable dt=ds.T ables[0];DataRow[] myRow=dt.Select("");// typeid=="1"时导出为EXCEL格式文件;typeid=="2"时导出为XML格式文件if(typeid=="1"){//取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符for(i=0;i colHeaders+=dt.Columns[i].Caption.ToString()+" \t";colHeaders +=dt.Columns[i].Caption.ToString() +"\n";//向HTTP输出流中写入取得的数据信息resp.Write(colHeaders);//逐行处理数据foreach(DataRow row in myRow){//在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\nfor(i=0;i ls_item +=row[i].ToString() + "\t";ls_item += row[i].T oString() +"\n";//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据resp.Write(ls_item);ls_item="";}}else{if(typeid=="2"){//从DataSet中直接导出XML数据并且写到HTTP输出流中resp.Write(ds.GetXml());}}//写缓冲区中的数据到HTTP头文件中resp.End();}2、由datagrid生成public void ToExcel(System.Web.UI.Control ctl){HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls");HttpContext.Current.Response.Charset ="UTF-8";HttpContext.Current.Response.ContentEncoding=System.Text.Encoding.Default;HttpContext.Current.Response.ContentType ="application/ms-excel";//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/mswordctl.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.Current.Response.End();}用法:ToExcel(datagrid1);3、这个用dataviewpublic void OutputExcel(DataView dv,string str){//// TODO: 在此处添加构造函数逻辑////dv为要输出到Excel的数据,str为标题名称GC.Collect();Application excel;// = new Application();int rowIndex=4;int colIndex=1;_Workbook xBk;_Worksheet xSt;excel= new ApplicationClass();xBk = excel.Workbooks.Add(true);xSt = (_Worksheet)xBk.ActiveSheet;////取得标题//foreach(DataColumn col in dv.Table.Columns){colIndex++;excel.Cells[4,colIndex] = col.ColumnName;xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]). HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐}////取得表格中的数据//foreach(DataRowView row in dv){rowIndex ++;colIndex = 1;foreach(DataColumn col in dv.Table.Columns){colIndex ++;if(col.DataType == System.Type.GetType("System.DateTime")){excel.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].T oString())).ToString ("yyyy-MM-dd");xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[row Index,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐}elseif(col.DataType == System.Type.GetType("System.String")) {excel.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].T oString();xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[row Index,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐}else{excel.Cells[rowIndex,colIndex] = row[col.ColumnName].T oString();}}}////加载一个合计行//int rowSum = rowIndex + 1;int colSum = 2;excel.Cells[rowSum,2] = "合计";xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]). HorizontalAlignment = XlHAlign.xlHAlignCenter;////设置选中的部分的颜色//xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSu m,colIndex]).Select();xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSu m,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种////取得整个报表的标题//excel.Cells[2,2] = str;////设置整个报表的标题格式//xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold = true;xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size = 22;////设置报表表格为最适应宽度//xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]). Select();xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]). Columns.AutoFit();////设置整个报表的标题为跨列居中//xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Horizo ntalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;////绘制边框//xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]). Borders.LineStyle = 1;xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Border s[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Border s[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置上边线加粗xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colI ndex]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设置右边线加粗xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colI ndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设置下边线加粗////显示效果//excel.Visible=true;//xSt.Export(Server.MapPath(".")+"\\"+this.xlfile.Text+".xls",S heetExportActionEnum.ssExportActionNone,Microsoft.Office.Int erop.OWC.SheetExportFormat.ssExportHTML );xBk.SaveCopyAs(Server.MapPath(".")+"\\"+this.xlfile.Text+". xls ");ds = null;xBk.Close(false, null,null);excel.Quit();System.Runtime.InteropServices.Marshal.ReleaseComObject (xBk);System.Runtime.InteropServices.Marshal.ReleaseComObject (excel);System.Runtime.InteropServices.Marshal.ReleaseComObject (xSt);xBk = null;excel = null;xSt = null;GC.Collect();string path = Server.MapPath(this.xlfile.Text+".xls");System.IO.FileInfo file = new System.IO.FileInfo(path);Response.Clear();Response.Charset="GB2312";Response.ContentEncoding=System.Text.Encoding.UTF8;// 添加头信息,为"文件下载/另存为"对话框指定默认文件名Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode());// 添加头信息,指定文件大小,让浏览器能够显示下载进度Response.AddHeader("Content-Length",file.Length.T oString());// 指定返回的是一个不能被客户端读取的流,必须被下载Response.ContentType = "application/ms-excel";// 把文件流发送到客户端Response.WriteFile(file.FullName);// 停止页面的执行Response.End();}本文来自: IT知道网() 详细出处参考:/html/net/aspnet/20091028/6722.html。

asp.net里导出excel表方法汇总

asp.net里导出excel表方法汇总
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}
用法:ToExcel(datagrid1);
4、这个用dataview ,代码好长
//
//设置报表表格为最适应宽度
//
xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();
xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();
}
//
//取得表格中的数据
//
foreach(DataRowView row in dv)
{
rowIndex ++;
colIndex = 1;
foreach(DataColumn col in dv.Table.Columns)
{
colIndex ++;
//
xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();
xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种
HttpContext.Current.Response.Charset ="UTF-8";

asp.net中导出excel数据的方法汇总

asp.net中导出excel数据的方法汇总

1、由dataset生成代码如下:public void createexcel(dataset ds,string typeid,string filename){httpresponse resp;resp = page.response;resp.contentencoding = system.text.encoding.getencoding(gb2312);resp.appendheader(content-disposition, attachment;filename= + filename); string colheaders= , ls_item=;int i=0;//定义表对象与行对像,同时用dataset对其值进行初始化datatable dt=ds.tables[0];datarow[] myrow=dt.select();// typeid==1时导出为excel格式文件;typeid==2时导出为xml格式文件if(typeid==1){//取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符for(i=0;i colheaders+=dt.columns[i].caption.tostring()+t;colheaders +=dt.columns[i].caption.tostring() +n;//向http输出流中写入取得的数据信息resp.write(colheaders);//逐行处理数据foreach(datarow row in myrow){//在当前行中,逐列获得数据,数据之间以t分割,结束时加回车符nfor(i=0;i ls_item +=row[i].tostring() + t;ls_item += row[i].tostring() +n;//当前行数据写入http输出流,并且置空ls_item以便下行数据resp.write(ls_item);ls_item=;}}else{if(typeid==2){//从dataset中直接导出xml数据并且写到http输出流中resp.write(ds.getxml());}}//写缓冲区中的数据到http头文件中resp.end();}2、由datagrid生成代码如下:public void toexcel(system.web.ui.control ctl){httpcontext.current.response.appendheader(content-disposition,attachment;filename=excel.xls);httpcontext.current.response.charset =utf-8;httpcontext.current.response.contentencoding =system.text.encoding.default;httpcontext.current.response.contenttype =application/ms-excel;//image/jpeg;text/html;image/gif;vnd.ms-excel/mswordctl.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.current.response.end();}用法:toexcel(datagrid1);3、这个用dataview代码如下:public void outputexcel(dataview dv,string str){//// todo: 在此处添加构造函数逻辑////dv为要输出到excel的数据,str为标题名称gc.collect();application excel;// = new application();int rowindex=4;int colindex=1;_workbook xbk;_worksheet xst;excel= new applicationclass();xbk = excel.workbooks.add(true);xst = (_worksheet)xbk.activesheet;////取得标题//foreach(datacolumn col in dv.table.columns){colindex++;excel.cells[4,colindex] = col.columnname;xst.get_range(excel.cells[4,colindex],excel.cells[4,colindex]).horizontalalignment =xlvalign.xlvaligncenter;//设置标题格式为居中对齐}////取得表格中的数据//foreach(datarowview row in dv){rowindex ++;colindex = 1;foreach(datacolumn col in dv.table.columns){colindex ++;if(col.datatype == system.type.gettype(system.datetime)){excel.cells[rowindex,colindex] = (convert.todatetime(row[col.columnname].tostring())).tostring(yyyy-mm-dd);xst.get_range(excel.cells[rowindex,colindex],excel.cells[rowindex,colindex]).horizontalalignment = xlvalign.xlvaligncenter;//设置日期型的字段格式为居中对齐}elseif(col.datatype == system.type.gettype(system.string)){excel.cells[rowindex,colindex] = '+row[col.columnname].tostring();xst.get_range(excel.cells[rowindex,colindex],excel.cells[rowindex,colindex]).horizontalalignment = xlvalign.xlvaligncenter;//设置字符型的字段格式为居中对齐}else{excel.cells[rowindex,colindex] = row[col.columnname].tostring();}}}////加载一个合计行//int rowsum = rowindex + 1;int colsum = 2;excel.cells[rowsum,2] = 合计;xst.get_range(excel.cells[rowsum,2],excel.cells[rowsum,2]).horizontalalignment = xlhalign.xlhaligncenter;////设置选中的部分的颜色//xst.get_range(excel.cells[rowsum,colsum],excel.cells[rowsum,colindex]).select();xst.get_range(excel.cells[rowsum,colsum],excel.cells[rowsum,colindex]).interior.colorindex = 19;//设置为浅黄色,共计有56种////取得整个报表的标题//excel.cells[2,2] = str;////设置整个报表的标题格式//xst.get_range(excel.cells[2,2],excel.cells[2,2]).font.bold = true;xst.get_range(excel.cells[2,2],excel.cells[2,2]).font.size = 22;////设置报表表格为最适应宽度//xst.get_range(excel.cells[4,2],excel.cells[rowsum,colindex]).select();xst.get_range(excel.cells[4,2],excel.cells[rowsum,colindex]).columns.autofit();////设置整个报表的标题为跨列居中//xst.get_range(excel.cells[2,2],excel.cells[2,colindex]).select();xst.get_range(excel.cells[2,2],excel.cells[2,colindex]).horizontalalignment = xlhalign.xlhaligncenteracrossselection;////绘制边框//xst.get_range(excel.cells[4,2],excel.cells[rowsum,colindex]).borders.linestyle = 1;xst.get_range(excel.cells[4,2],excel.cells[rowsum,2]).borders[xlbordersindex.xledgeleft].weight = xlborderweight.xlthick;//设置左边线加粗xst.get_range(excel.cells[4,2],excel.cells[4,colindex]).borders[xlbordersindex.xledgetop].weight = xlborderweight.xlthick;//设置上边线加粗xst.get_range(excel.cells[4,colindex],excel.cells[rowsum,colindex]).borders[xlbordersindex.xledg eright].weight = xlborderweight.xlthick;//设置右边线加粗xst.get_range(excel.cells[rowsum,2],excel.cells[rowsum,colindex]).borders[xlbordersindex.xledge bottom].weight = xlborderweight.xlthick;//设置下边线加粗////显示效果//excel.visible=true;//xst.export(server.mappath(.)++this.xlfile.text+.xls,sheetexportactionenum.ssexportactionnone,microsoft.office.interop.owc.sheetexportformat.ssexpo rthtml);xbk.savecopyas(server.mappath(.)++this.xlfile.text+.xls);ds = null;xbk.close(false, null,null);excel.quit();system.runtime.interopservices.marshal.releasecomobject(xbk);system.runtime.interopservices.marshal.releasecomobject(excel);system.runtime.interopservices.marshal.releasecomobject(xst);xbk = null;excel = null;xst = null;gc.collect();string path = server.mappath(this.xlfile.text+.xls);system.io.fileinfo file = new system.io.fileinfo(path);response.clear();response.charset=gb2312;response.contentencoding=system.text.encoding.utf8;// 添加头信息,为文件下载/另存为对话框指定默认文件名response.addheader(content-disposition, attachment; filename= + server.urlencode());// 添加头信息,指定文件大小,让浏览器能够显示下载进度response.addheader(content-length, file.length.tostring());// 指定返回的是一个不能被客户端读取的流,必须被下载response.contenttype = application/ms-excel;// 把文件流发送到客户端response.writefile(file.fullname);// 停止页面的执行response.end();}导入、导出excel中的一些问题汇总一、在项目中的添加引用:右击项目资源管理器的引用--&gt;添加引用--&gt;选择.net选项卡--&gt;选择microsoft.office.interop.excel--&gt;确定(如下图);在选择时注意一下.net组件的版本号,图是的12.0.0.0是office2007的版本:二、在项目中使用microsoft.office.interop.excel:如果想使用microsoft.office.interop.excel,首先需要在项目中引用命名空间:using microsoft.office.interop.excel;三、建立excel.application相关对象//建立application对象microsoft.office.interop.excel.application myexcel = new application();//建立workbooks对象workbooks mybooks = myexcel.application.workbooks;//建立一个system.reflection.missing的object对象object omissing = system.reflection.missing.value;四、打开或新建excel的book文件//打开excel文件,注意里的“exccelfilepath”为excel文件在服务器上的物理地址,包括文件名workbook mybook = mybooks.open(exccelfilepath,omissing, omissing, omissing, omissing, omissing, omissing, omissing, omissing, omissing, omissing, omissing, omissing);//新建workseet对象,,此处为要操作的工作表,当前要操作的工作表的获取方法有两种:使用工作表的索引值或使用工作表的名称,名称默认为:“sheet1”/“sheet2”等worksheet mysheet = (worksheet)mybook.worksheets[1];//如果是新建excel工作簿,需要设置如下两行内容,以保证工作簿中有一个工作表,workbook workbook1 = excel1.workbooks.add(true);worksheet mysheet= (worksheet)workbook1.worksheets[sheet1];//设置excel对象是否显示界面,默认为false不显示界面myexcel.visble=true;五、一些比较重要的针对excel的操作1、获取range对象①、获取一个单元格的range对象://选择第一行、第一列的单元的单元格为range对象range r = (excel.range)mysheet.cells[1, 1];//选择多个连续的单元格为range对象range r=(excel.range)range.get_range(a1:f3)②、给单元格赋值或取出单元格的值://已选择了range对象的赋值:r.text=中国;//未选择range对象的赋值:mysheet.cells[1,2].text=中国;//已选择了range对象的取值:string strvalue= r.text;//未选择range对象的取值:string strvalue= mysheet.cells[1,2].text;③、给单元格设置边框mysheet.cells[2, 1].borderaround(xllinestyle.xlcontinuous, xlborderweight.xlthin, xlcolorindex.xlcolorindexautomatic, null);//画线④、合并单元格//合并单元格前先要将要合并的单元格选择为range对象range r=range.get_range(a1:f3);//然后现设置合并单元格r.mergecells = true;⑤、设置单元格的字体、字号、背景色等属性mysheet.cells[1, 1] = 黑体;mysheet.cells[1, 1].font.size = 20;mysheet.rows[1:1].rowheight = 40;mysheet.cells[1, 1].interior.color = color.fromargb(224, 224, 224);//设置颜色⑥、删除一行://首先获取要删除的行的rangemicrosoft.office.interop.excel.range range = (microsoft.office.interop.excel.range)mysheet.rows[sendedrow[1], type.missing];//注意删除行后删除后的行号被下面的行替换,如果逐行删除,请先从最大的行号往最小的行号删除range.delete(microsoft.office.interop.excel.xldeleteshiftdirection.xlshiftup);⑦、获取有数据的行数int rowsint = edrange.cells.rows.count;六、excel文件的保存与退出1、excel的保存与退出mybook.save();mybooks.close();myexcel.quit();2、excel指定文件保存mybook.close(true, filepath +_file_name, null);七、释放excle对象的资源与结束excel 进程关于这方面内容有好多网友都在讲多种方法,经过本人实践,以下方面才能真正做到结束excel的任务进程:1、将所有以上对excel的操作放到一个方法中,2、在操作excel后,即时将不使用对象一一释放并赋null值:system.runtime.interopservices.marshal.releasecomobject(mysheet);mysheet=null;system.runtime.interopservices.marshal.releasecomobject(mybook);mybook=null;//system.runtime.interopservices.marshal.releasecomobject(mybooks);mybooks=null;system.runtime.interopservices.marshal.releasecomobject(myexcel);myexcel=null;3、再新建一个方法,并以该方法中执行上面新建的操作excel方法,并在执行完操作excel方法的后面添加gc.collect()://下面方法中outputexcel()方法是输出excel文件的对excel操作的方法private void killexcel(){outputexcel();gc.collect();gc.waitforpendingfinalizers();}好多网友都在介绍使用gc.collect()释放excel占用的资源来结束excel进行,如果将“gc.collect();”与操作excel的业务写在一个程序块中,“gc”是永远不能结束excel进程的,在web应用程序中,这种现象是很可怕的事情。

.NET中将数据导入(导出)Excel文件

.NET中将数据导入(导出)Excel文件

.NET中将数据导出(导出)Excel文件我们在WinForm应用程序或者Web程序中都会遇到需要将DataGridView 或者DataSet中的数据导出成为Excel类型的.xls文件。

下面就通过一个示例向大家演示在WinForm程序中如何将DataGridView中的数据导出为Excel文件,从DataSet中将数据导出为Excel的方法跟这个差不多的,这里就不再介绍了。

?Private void DataGridViewToExcel(DataGridView dgv){SaveFileDialog sfDialog = new SaveFileDialog();//保存导出的excel对话框sfDialog.Filter = "Excel Files(*.xls)|*.xls";//文件过滤器,只能保存为.xls类型的文件sfDialog.CheckFileExists = false;//如果用户指定不存在的文件名是否提示sfDialog.CheckPathExists = false;//如果用户指定不存在的路径是否提示sfDialog.FilterIndex = 0;sfDialog.RestoreDirectory = true;sfDialog.CreatePrompt = true;//如果该文件不存在则提示用户创建新文件sfDialog.Title = "保存为Excel 文件!";if (sfDialog.ShowDialog() == DialogResult.OK){Stream saveStream = sfDialog.OpenFile();//打开要保存的excel文件StreamWriter sw = new StreamWriter(saveStream, Encoding.GetEncoding(-0));//以特定的编码向流中插入字符,GetEncoding(-0)<br>首选编码的代码页标识符。

.net core 5通用导出方法

.net core 5通用导出方法

在进行软件开发过程中,经常会遇到需要将数据导出为Excel、CSV等格式的需求。

针对这一需求,.NET Core 5提供了通用的导出方法,使得开发人员能够方便地实现数据导出功能。

本文将介绍.NET Core 5的通用导出方法,并结合具体的示例进行详细讲解。

一、准备工作在使用.NET Core 5进行数据导出之前,我们需要进行一些准备工作。

我们需要安装.NET Core 5 SDK,并确保我们的开发环境能够支持.NET Core 5。

我们需要引入一些必要的包,以便我们能够使用.NET Core 5的数据导出功能。

常见的包包括EPPlus用于Excel导出,CsvHelper用于CSV导出等。

安装包的方法非常简单,我们只需要在项目文件中添加对应的包引用即可。

二、Excel导出方法1. 创建Excel导出服务我们需要创建一个Excel导出的服务类,该类应该实现一个接口,以便我们能够方便地进行依赖注入。

在该类中,我们需要引入EPPlus包,并使用其提供的功能来实现数据导出。

```csharppublic class ExcelExportService : IExportService{public byte[] Export<T>(List<T> data){byte[] result;ExcelPackage.LicenseContext =LicenseContext.NonCommercial;using (var package = new ExcelPackage()){var sheet =package.Workbook.Worksheets.Add("Sheet1");sheet.Cells.LoadFromCollection(data, true);result = package.GetAsByteArray();}return result;}}```2. 注册Excel导出服务接下来,我们需要在.NET Core 5的DI容器中注册Excel导出服务,以便我们能够在其他地方方便地进行依赖注入。

.net把datatable导出到excel

.net把datatable导出到excel

.net把datatable导出到exceldsResult = BaseClass.Query(sql);#region 用NPOI方式导出,数据量过多则抛出内存溢出异常//using (System.IO.MemoryStream ms = Util.DataSetToExcel(dsResult))//{// string pathtmp = folder + name + ".xlsx";// using (System.IO.FileStream fs = new System.IO.FileStream(pathtmp, System.IO.FileMode.Create, System.IO.FileAccess.Write))// {// byte[] data = ms.ToArray();// fs.Write(data, 0, data.Length);// fs.Flush();// }//}#endregion//用数据流的方式导出//string path = folder + name + ".xlsx";//ExcelUtil.ExportT oExcel(dsResult.Tables[0], path);//用EPPlus.dll导出Excel(xlsx)string path = folder + name + ".xlsx";ExcelExport.ExportByEPPlus(table,dsResult.Tables[0], path);using System.Data;using System.IO;using erModel;using erModel;using erModel;using NPOI;using NPOI.HPSF;using NPOI.HSSF;using NPOI.HSSF.Util;using NPOI.POIFS;using NPOI.SS.Formula.Eval;using NPOI.Util;using NPOI.SS;using NPOI.DDF;using NPOI.SS.Util;using System.Collections;using System.Text.RegularExpressions;using NPOI.XSSF;using System.Text;using OfficeOpenXml;using OfficeOpenXml.Style;namespace Cis.DRGsSystem.Dal{/// <summary>/// 用NPOI插件导出Excel,如果数据量过大则抛内存溢出错误,改用数据流的方式导出Excel/// </summary>public static class Util{/// <summary>/// 拆分字符串1,2,3,4,5/// </summary>/// <param name="strid">1,2,3,4,5</param>/// <returns></returns>public static string StrArr(this string strid){string StrValue = "";if (!string.IsNullOrEmpty(strid)){string[] strarr = strid.Split(',');foreach (string item in strarr){StrValue += "'" + item.Trim() + "',";}StrValue = StrValue.Substring(0, StrValue.Length - 1);}return StrValue;}#region DataSet导出到Excel/// <summary>/// DataSet导出到Excel的MemoryStream/// </summary>/// <param name="dtSource">源DataSet</param> public static MemoryStream DataSetToExcel(DataSet ds) {XSSFWorkbook workbook = new XSSFWorkbook();for (int k = 0; k < ds.Tables.Count; k++){// HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();XSSFSheet sheet = (XSSFSheet)workbook.CreateSheet(ds.Tables[k].TableName.ToStr ing());#region 右击文件属性信息{DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();pany = "NPOI";// workbook.DocumentSummaryInformation = dsi;SummaryInformation si = PropertySetFactory.CreateSummaryInformation();si.Author = "文件作者信息"; //填加xls文件作者信息si.ApplicationName = "创建程序信息"; //填加xls文件创建程序信息stAuthor = "最后保存者信息"; //填加xls文件最后保存者信息ments = "作者信息"; //填加xls文件作者信息si.Title = "标题信息"; //填加xls文件标题信息si.Subject = "主题信息";//填加文件主题信息si.CreateDateTime = System.DateTime.Now;}#endregionXSSFCellStyle dateStyle = (XSSFCellStyle)workbook.CreateCellStyle();XSSFDataFormat format = (XSSFDataFormat)workbook.CreateDataFormat();dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");//取得列宽int rowIndex = 0;foreach (DataRow row in ds.Tables[k].Rows){#region 新建表,填充表头,填充列头,样式if (rowIndex == 0){#region 列头及样式{XSSFRow headerRow = (XSSFRow)sheet.CreateRow(0);XSSFCellStyle headStyle = (XSSFCellStyle)workbook.CreateCellStyle();//headStyle.Alignment = CellHorizontalAlignment.CENTER;XSSFFont font = (XSSFFont)workbook.CreateFont();font.FontHeightInPoints = 10;font.Boldweight = 700;headStyle.SetFont(font);foreach (DataColumn column in ds.T ables[k].Columns){headerRow.CreateCell(column.Ordinal).SetCellValue(column. ColumnName);headerRow.GetCell(column.Ordinal).CellStyle = headStyle;//设置列宽//sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256);}}#endregionrowIndex = 1;}#endregion#region 填充内容XSSFRow dataRow = (XSSFRow)sheet.CreateRow(rowIndex);foreach (DataColumn column in ds.T ables[k].Columns){XSSFCell newCell = (XSSFCell)dataRow.CreateCell(column.Ordinal);newCell.SetCellType(CellType.String);string drValue = row[column].ToString();switch (column.DataType.ToString()){case "System.String"://字符串类型newCell.SetCellValue(drValue);break;case "System.DateTime"://日期类型System.DateTime dateV;System.DateTime.TryParse(drValue, out dateV);newCell.SetCellValue(dateV);newCell.CellStyle = dateStyle;//格式化显示break;case "System.Boolean"://布尔型bool boolV = false;bool.TryParse(drValue, out boolV); newCell.SetCellValue(boolV); break;case "System.Int16"://整型case "System.Int32":case "System.Int64":case "System.Byte":int intV = 0;int.TryParse(drValue, out intV); newCell.SetCellValue(intV); break;case "System.Decimal"://浮点型case "System.Double":double doubV = 0;double.TryParse(drValue, out doubV); newCell.SetCellValue(doubV); break;case "System.DBNull"://空值处理newCell.SetCellValue("");break;default:newCell.SetCellValue("");break;}}#endregionrowIndex++;}}using (MemoryStream ms = new MemoryStream()){workbook.Write(ms);ms.Flush();return ms;}}#endregion}/// <summary>/// 用数据流方式导出Excel/// </summary>public class ExcelUtil{/// <summary>/// 导出文件,使用文件流。

.net导出excel自定义模板内容标签[]

.net导出excel自定义模板内容标签[]

.net导出excel自定义模板内容标签[]本文主要介绍了在C#语言中通过使用.NET导出Excel 自定义模板内容标签[]的方法。

在业务工作中,经常需要导出数据到Excel来进行数据分析和统计。

而Excel表格的排版和布局对数据展示的效果至关重要。

为了满足不同业务场景的需求,我们需要动态地生成Excel表格。

而使用.NET导出Excel自定义模板则可以满足这个需求。

首先,我们需要准备一个Excel模板文件。

在这个模板文件中,我们可以设定表格的样式、格式和排版。

然后在C#语言中,我们通过使用Excel模板,将数据源中的数据填充到模板文件中。

而在模板文件中,需要指定某些标记,用来表示数据应该填充的位置和格式。

这些标记就是本文所说的内容标签[]。

下面我们将用一个简单的示例来说明:1. 创建一个Excel模板,并在特定位置添加模板标记[]我们可以在Excel模板文件中创建一个表格,并在需要填充数据的单元格位置添加一些标记符号。

例如,在A2单元格中添加[],该单元格就作为数据填充的位置。

2. 加载Excel模板文件在C#代码中,我们可以使用Excel操作库,如NPOI、EPPlus等来操作Excel文件。

其中,我们使用EPPlus来操作Excel文件,如下:```C# using OfficeOpenXml; using System.IO;using System.Collections.Generic;// 加载Excel模板文件 using (var stream = new FileStream("Template.xlsx", FileMode.Open, FileAccess.Read)) { using (var package = new ExcelPackage(stream)) { // 获得Excel工作簿 var workbook = package.Workbook; // 获得Excel工作表 var worksheet = workbook.Worksheets[0];// 定义数据源 var data = newList<string> { "Tom", "Kate", "Jerry" };// 填充数据到Excel模板中worksheet.Cells["A2"].Value = data[0]; } } ```3. 填充数据源中的数据到Excel模板中在代码中,我们将数据源data中的第一个元素填充到Excel模板A2单元格中。

软件开发-.NET使用Aspose.Cells导入导出Excel文件-嘉为科技

软件开发-.NET使用Aspose.Cells导入导出Excel文件-嘉为科技

【摘要】在.NET软件开发项目中,开发人员经常会碰到Excel导入导出的需求,而传统的使用Microsoft.Office.Interop 或者 Microsoft.ACE.OLEDB 都具有一些使用限制:●需要在服务器端装Excel或者Microsoft.ACE.OLEDB,且及时更新它,以防漏洞,还需要设定权限允许.NET访问COM+,如果在导出过程中出问题可能导致服务器宕机。

●Excel会把只包含数字的列进行类型转换,本来是文本型的,Excel会将其转成数值型的,比如编号000123会变成123。

●导出时,如果字段内容以“-”或“=”开头,Excel会把它当成公式进行,会报错。

●Excel会根据Excel文件前8行分析数据类型,如果正好你前8行某一列只是数字,那它会认为该列为数值型,自动将该列转变成类似1.42702E+17格式,日期列变成包含日期和数字的。

本文将介绍Excel导入导出的另一种方法:Aspose.Cells,它能克服Microsoft.Office.Interop 或者 Microsoft.ACE.OLEDB的这些缺点【正文】使用Aspose.CellsAspose.Cells是比一个比较好用的第三方类库,使用它导入导出Excel不需要服务器安装Excel软件。

利用Aspose.Cells导入Excel第一步:首先必须要下载Aspose.Cells.dll文件,然后在在项目中引用,不需安装。

第二步:在CS文件中添加引用。

using Aspose.Cells;●将用户选择的Excel文件导入到DataTable对象中if (!fileLoad.HasFile){ShowMessage("请选择要导入的Excel文件");return;}string ex = fileLoad.FileName.Split('.').Last();if (ex != "xlsx" && ex != "xls"){ShowMessage("模板必须是Excel文件,请下载正确的模板");return;}Workbook workbook = new Workbook(fileLoad.FileContent);Worksheet worksheet = workbook.Worksheets[0];Cells cells = worksheet.Cells;DataTable dt;dt = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1,cells.MaxDataColumn + 1, true);上面的代码是将用户选择的Excel文件的内容导入到DataTable,当然Aspose.Cells还提供将Excel的数据导入到GridView、DataView等等数据绑定控件并支持众多参数设置的方法。

C#.NET将控件(DataGridView)中的数据导出到Excel中

C#.NET将控件(DataGridView)中的数据导出到Excel中

C#.NET将控件(DataGridView)中的数据导出到Excel中public static void Exeort2Excel(string strCaption, DataGridView dgv){try{TimeSpan dateBegin = new TimeSpan(DateTime.Now.Ticks);//SaveFileDialog file = new SaveFileDialog();//file.DefaultExt = "xls";//file.Filter = "Excel文件|*.xls";////file.FilterIndex = 1;//string saveFilePath = "";//if (file.ShowDialog() == DialogResult.OK)//{// saveFilePath = file.FileName;//}//else//{// return;//}//-***************获取excel对象***************Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();if (app == null){MessageBox.Show("无法启动,可能你的机器上没有安装Excel!", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;Microsoft.Office.Interop.Excel.Workbook workbook = app.Workbooks.Add(true);Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets [1];Microsoft.Office.Interop.Excel.Range range;//string oldCaption = "jiang_gy";//列索引,行索引,总列数,总行数int colIndex = 0;int rowIndex = 0;int colCount = dgv.Columns.Count;int rowCount = dgv.Rows.Count;// *****************获取数据*********************// 创建缓存数据object[,] objData = new object[rowCount + 3, colCount];// 创建列标题foreach (DataGridViewColumn col in dgv.Columns){objData[rowIndex, colIndex++] = col.HeaderText;}// 获取具体数据for (rowIndex = 1; rowIndex < rowCount; rowIndex++){for (colIndex = 0; colIndex < colCount; colIndex++){objData[rowIndex, colIndex] = dgv.Rows[rowIndex - 1].Cells[colIndex].Value;}objData[rowCount + 1, 0] = "合计:";// rowCount.ToString();objData[rowCount + 1, 1] = rowCount.ToString();//********************* 写入Excel*******************range = worksheet.get_Range(app.Cells[2, 1], app.Cells[rowCount + 3, colCount]);range.Value2 = objData;//range.Borders.LineStyle = 1;System.Windows.Forms.Application.DoEvents();range = worksheet.get_Range(app.Cells[2, 1], app.Cells[rowCount + 1, colCount]);range.Borders.LineStyle = 1;//********************* 设置输出格式****************//设置顶部说明range = worksheet.get_Range(app.Cells[1, 1], app.Cells[1, colCount]);range.MergeCells = true;range.RowHeight = 38;range.Font.Bold = true;range.Font.Size = 14;//range.Font.ColorIndex = 10;range.Borders.LineStyle = 1;app.ActiveCell.FormulaR1C1 = strCaption;//特殊数据格式//range = worksheet.get_Range(app.Cells[2, 1], app.Cells[rowCount, colCount]);//range.NumberFormat = "yyyy-MM-dd hh:mm:ss";app.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;range = worksheet.get_Range(app.Cells[2, 1], app.Cells[2, colCount]);//range.Interior.ColorIndex = 10;range.Font.Bold = true;range.RowHeight = 20;range.Borders.LineStyle = 1;((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 1]).ColumnWidth = 15;((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 2]).ColumnWidth = 30;((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 3]).ColumnWidth = 15;((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 4]).ColumnWidth = 32;((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 5]).ColumnWidth = 30;//设置合计为右对齐并加粗//range = worksheet.get_Range(app.Cells[rowCount + 2, 1], app.Cells[rowCount + 4, colCount]);//range.Borders.LineStyle = 0;range = worksheet.get_Range(app.Cells[rowCount + 3, 1], app.Cells[rowCount + 3, 1]);range.Font.Bold = true;range.HorizontalAlignment =Microsoft.Office.Interop.Excel.Constants.xlRight;//设置合计值为左对齐range = worksheet.get_Range(app.Cells[rowCount + 3, 2], app.Cells[rowCount + 3, 2]);range.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlLeft;//*********************** 保存 *********************try{//app.Save(saveFilePath);app.Visible = true;//workbook.Saved = true;//workbook.SaveCopyAs(saveFilePath);}catch (Exception ex){MessageBox.Show("保存文件出错:" + ex.Message);}//********************* 释放************************app.Quit();GC.Collect();TimeSpan dateEnd = new TimeSpan(DateTime.Now.Ticks);TimeSpan tspan = dateBegin.Subtract(dateEnd).Duration();//MessageBox.Show(tspan.ToString());//if (File.Exists(saveFileName))//{// System.Diagnostics.Process.Start(saveFileName);//}}catch (Exception ex){MessageBox.Show("无法启动,可能你的机器上没有安装Excel!"+ex.Message.ToString(), "", MessageBoxButtons.OK, MessageBoxIcon.Warning);}}。

asp.net 将DataTable中的数据导出到Excel并下载方法

asp.net 将DataTable中的数据导出到Excel并下载方法

将DataTable中的数据导出到Excel并下载方法我上一篇文章介绍了Excel导入到DataTable的方法,总觉得少些什么,这篇我就将DataTable中的数据导出到Excel并提供下载的方法记录下来。

调用如下:CreateExcel(dtexcel, "application/ms-excel", excel);方法如下:/// &lt;summary&gt;/// DataTable中的数据导出到Excel并下载/// &lt;/summary&gt;/// &lt;param name="dt"&gt;要导出的DataTable&lt;/param&gt;/// &lt;param name="FileType"&gt;类型&lt;/param&gt;/// &lt;param name="FileName"&gt;Excel的文件名&lt;/param&gt;public void CreateExcel(DataTable dt, string FileType, string FileName){Response.Clear();Response.Charset = "UTF-8";Response.Buffer = true;Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");Response.AppendHeader("Content-Disposition", "attachment;filename=\"" +System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls\"");Response.ContentType = FileType;string colHeaders = string.Empty;string ls_item = string.Empty;DataRow[] myRow = dt.Select();int i = 0;int cl = dt.Columns.Count;foreach (DataRow row in myRow){for (i = 0; i &lt; cl; i++){if (i == (cl - 1)){ls_item += row[i].ToString() + "\n";}else{ls_item += row[i].ToString() + "\t";}}Response.Output.Write(ls_item);ls_item = string.Empty;}Response.Output.Flush();Response.End();}将Excel中某个工作簿的数据导入到DataTable方法最近在网上看了几篇将Excel中某个工作簿的数据导入到DataTable的文章,自己总结了一套最实用的方法。

.NET中用C#将DataTable中的数据集导出为EXCEL或CSV文件

.NET中用C#将DataTable中的数据集导出为EXCEL或CSV文件

.NET中用C#将DataTable中的数据集导出为EXCEL 或CSV文件有的时候客户需要将筛选后的数据从服务器上以EXCEL或CSV文件格式保存到本地,比如:用户需要将服务器存储的客户邮箱信息下载到本地,然后导入到126邮箱。

进行处理:CSVDataTable dt = DBHelper.GetTable(CommandType.Text, cmdText);if (dt.Rows.Count != 0){int rows = dt.Rows.Count;Response.ClearHeaders();Response.ContentType = "application/vnd.ms-excel";Response.Charset = "";Response.AppendHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode("数据导出文件" + DateTime.Now.Ticks + ".csv"));System.IO.StreamWriter objWriter = newSystem.IO.StreamWriter(Response.OutputStream,System.Text.Encoding.UTF8);StringBuilder result = new StringBuilder();result.Append("联系组,");result.Append("姓名,");result.Append("邮件地址,");result.Append("联系地址,");result.Append("邮政编码,");result.Append("联系电话,");result.Append("移动电话,");result.Append("公司,");result.Append("部门,");result.Append("职位,");objWriter.WriteLine(result.ToString()); //输出标题行CSV文件中以“,”隔开,当拼凑到一行时,用WriteLine输出,而不是Writefor (int i = 0; i < rows; i++){result = new StringBuilder();result.Append("邮箱联系组,");result.Append(dt.Rows[i]["lianxiren"].ToString() + ",");result.Append(dt.Rows[i]["email"].ToString() + ","); result.Append(dt.Rows[i]["addr"].ToString() + ",");result.Append(dt.Rows[i]["postcode"].ToString() + ","); result.Append(dt.Rows[i]["tel"].ToString() + ",");result.Append(dt.Rows[i]["mobile"].ToString() + ","); result.Append(dt.Rows[i]["compname"].ToString() + ","); result.Append(dt.Rows[i]["dpt"].ToString() + ",");result.Append(dt.Rows[i]["position"].ToString() + ","); objWriter.WriteLine(result.ToString());}objWriter.Close();Response.End();}EXCELDataTable dt = DBHelper.GetTable(CommandType.Text, cmdText);if (dt.Rows.Count != 0){int rows = dt.Rows.Count;Response.ContentType = "application/vnd.ms-excel";Response.Charset = "";Response.AppendHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode("导出文件.xls"));System.IO.StreamWriter objWriter = newSystem.IO.StreamWriter(Response.OutputStream,System.Text.Encoding.UTF8);objWriter.WriteLine("<?xml version=\"1.0\"?>");objWriter.WriteLine("<?mso-applicationprogid=\"Excel.Sheet\"?>");objWriter.WriteLine("<Workbookxmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"xmlns:o=\"urn:schemas-microsoft-com:office:office\"xmlns:x=\"urn:schemas-microsoft-com:office:excel\"xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"xmlns:html=\"/TR/REC-html40\">");objWriter.WriteLine("<Worksheet ss:Name=\"Sheet1\">");objWriter.WriteLine("<Table>");objWriter.WriteLine("<Column ss:AutoFitWidth=\"0\"ss:Width=\"33\"/>");objWriter.WriteLine("<Column ss:AutoFitWidth=\"0\"ss:Width=\"250\"/>");objWriter.WriteLine("<Column ss:AutoFitWidth=\"0\"ss:Width=\"250\"/>");objWriter.WriteLine("<Column ss:AutoFitWidth=\"0\"ss:Width=\"250\"/>");objWriter.WriteLine("<Column ss:AutoFitWidth=\"0\"ss:Width=\"130\"/>");objWriter.WriteLine("<Row>");objWriter.WriteLine("<Cell><Data ss:Type=\"String\">编号</Data></Cell>");objWriter.WriteLine("<Cell><Data ss:Type=\"String\">第一列</Data></Cell>");objWriter.WriteLine("<Cell><Data ss:Type=\"String\">第二列</Data></Cell>");objWriter.WriteLine("<Cell><Data ss:Type=\"String\">第三列</Data></Cell>");objWriter.WriteLine("<Cell><Data ss:Type=\"String\">第四列</Data></Cell>");objWriter.WriteLine("</Row>");for (int i = 0; i < rows; i++) //注:一直用WriteLine进行输出,因为CSV文件是以“,”为分割的简单文件格式。

.net core 通用导出方法

.net core 通用导出方法

在软件开发过程中,常常会遇到需要将数据导出成Excel、CSV等格式的需求。

针对这种需求,我们可以通过编写通用的导出方法来简化开发过程,并提高代码的复用性和可维护性。

本文将介绍如何使用.NET Core编写通用的导出方法,以满足不同类型的数据导出需求。

二、导出方法的设计1. 参数设计在设计通用的导出方法时,我们需要考虑到导出的数据类型可能是多种多样的,例如实体类、匿名类型、DataTable等。

在方法的参数设计上,我们可以使用泛型类型来接收不同类型的数据。

2. 导出格式通常情况下,数据的导出格式有很多种,比如Excel、CSV、JSON等。

为了让导出方法更加灵活,我们可以在方法的参数中添加导出格式的选项,以便在调用方法时指定导出的格式。

3. 自定义导出配置有些情况下,导出的数据需要进行一些定制化的处理,比如设置Excel 表头、调整列的顺序、设置日期格式等。

为了满足这种定制化的需求,我们可以设计一个导出配置的参数,让用户可以通过配置参数来自定义导出的规则。

在.NET Core中,我们可以通过使用EPPlus库来实现Excel格式的导出,使用CsvHelper库来实现CSV格式的导出。

以下是一个示例代码,演示了如何编写一个通用的数据导出方法:```csharppublic class ExportHelper{public static void Export<T>(IEnumerable<T> data, ExportFormat format, ExportConfig config){switch (format){case ExportFormat.Excel:ExportToExcel(data, config);break;case ExportFormat.Csv:ExportToCsv(data, config);break;// 可以根据需要添加其他导出格式的实现}}private static void ExportToExcel<T>(IEnumerable<T> data, ExportConfig config){// 使用EPPlus库来实现Excel格式的导出// 根据配置参数来设置Excel的格式、样式等}private static void ExportToCsv<T>(IEnumerable<T> data, ExportConfig config){// 使用CsvHelper库来实现CSV格式的导出// 根据配置参数来设置CSV的格式、分隔符等}}```四、使用方法有了通用的导出方法之后,我们可以在项目中轻松地实现数据的导出操作。

【转】Vb.net史上最快的数据导入到EXCEL程序

【转】Vb.net史上最快的数据导入到EXCEL程序

【转】史上最快的数据导入到EXCEL程序最近一直为从程序中导入数据到EXCEL速度太慢而苦恼(从程序中提取的数据量有几万行),因此到处查找一些最快的方法,甚至请教朋友手下的工程师也无果。

从网上搜索的一些资料也大同小异。

后来在车上时突然灵光一闪,把其中一种方法改一下形式可不可以达到呢?回家迫不及待地一试,没想到成功了。

本着乐于分享的精神,拿出来在这里供大家参考一下,如果有用得着别忘了留言给我哦!目前,从程序中导入EXCEL有三种通用方法(据我所知的~),按快到慢的顺序如下:1..数据导入dataset的表中,然后FOR循环表的行与列,并将值写入EXCEL的CELL中(最慢)2。

数据导入dataset的表中,然后FOR循环表的行与列,并将值写入数组DataArray(,),然后利用MyExcel.Range("A2").resize(m,n).value=DataArray (较快)3..最近一直为从程序中导入数据到EXCEL速度太慢而苦恼(从程序中提取的数据量有几万行),因此到处查找一些最快的方法,甚至请教朋友手下的工程师也无果。

从网上搜索的一些资料也大同小异。

后来在车上时突然灵光一闪,把其中一种方法改一下形式可不可以达到呢?回家迫不及待地一试,没想到成功了。

本着乐于分享的精神,拿出来在这里供大家参考一下,如果有用得着别忘了留言给我哦1目前,从程序中导入EXCEL有三种通用方法(据我所知的~),按快到慢的顺序如下:1..数据导入dataset的表中,然后FOR循环表的行与列,并将值写入EXCEL的CELL中(最慢)2。

数据导入dataset的表中,然后FOR循环表的行与列,并将值写入数组DataArray(,),然后利用MyExcel.Range("A2").resize(m,n).value=DataArray (较快,但数据一大特慢)3..数据导入dataset的表中,然后FOR循环表的行与列,并将值写入数组DataArray(,),然后将数组发送给剪贴板System.Windows.Forms.Clipboard.SetDataObject(DataArray),然后在EXCEL对象中MyExcel.Range("A1").Select() -----MyExcel.Paste即可(较快,但数据一大特慢)在发现这几种方法不如意后我一直在思考这个问题。

.net实现数据导出,以excel方式导出

.net实现数据导出,以excel方式导出

导出Excel表格public void CreateExcel(IListShouldGatheringInfo list, string FileName){HttpResponse resp;resp = Page.Response;resp.ContentEncoding = System.Text.Encoding.GetEncoding(GB2312);resp.AppendHeader(Content-Disposition, attachment;filename= + FileName);string colHeaders = , ls_item = ;string[] tableName = new string[] { 序号,应收款编号, 客户名称(联系人), 业务名称, 业务内容, 应收款金额,应收款时间, 收款金额, 收款时间, 开单人, 是否结清};int stringLenght = tableName.Length;int i = 0;取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符for (i = 0; i stringLenght; i++){if (i == (stringLenght - 1))最后一列,加n{colHeaders += tableName[i].ToString() + n;}else{colHeaders += tableName[i].ToString() + t;}}resp.Write(colHeaders);向HTTP输出流中写入取得的数据信息逐行处理数据int nums = 1;foreach (ShouldGatheringInfo templist in list){ls_item += nums + t + templist.ShouldGatheringId + t + templist.ClientsModel.ClientName + (+ templist.ClientsModel.LinkName + )+ t + templist.ServiceModel.Entrust + t + templist.ServiceModel.ServiceProjectsName + t + string.Format({0f2}元, templist.ShouldGatheringSum) + t + templist.ShouldGatheringDate.ToString(yyyyMMdd) +t + string.Format({0f2}元, templist.GatheringSum) + t + templist.GatheringDate.ToString(yyyyMMdd) + t + templist.EmployeeModel.TrueName + t + templist.ShouldGatheringCountType + n;nums++;resp.Write(ls_item);ls_item = ;}resp.End();}点击导出Excel表按钮触发时间protected void btnDaochuAll_Click(object sender, EventArgs e){string tempBeingtime = TimeHelper.getStringDateTime(txtBeginDate.Text.Trim().ToString());string tempEndtime = TimeHelper.getStringDateTime(txtEndDate.T ext.T rim().ToString());if (Convert.ToInt32(tempBeingtime) > Convert.ToInt32(tempEndtime)){MsgBoxHelper.ShowMsgBox(起始时间不能大于结束时间!,this.Page);}else{IListShouldGatheringInfo list = new ShouldGatheringBiz().GetCheckGatheringDataSetByBeginEndDate(tempBeingtime, tempEndtime);string fileName = string.Empty;if (Convert.ToInt32(tempBeingtime) == Convert.ToInt32(tempEndtime)){fileName += tempBeingtime+.xls;}else{fileName += tempBeingtime + - + tempEndtime + .xls;}CreateExcel(list, fileName);}}。

.net 导出excel并设置格式

.net 导出excel并设置格式

asp教程.net 导出excel并设置格式添加引用:microsoft excel 11.0 object library ;添加:using microsoft.office.interop.excel;一、打开excel文件============================microsoft.office.interop.excel.application excel1 = new microsoft.office.interop.excel.application();workbook workbook1 = excel1.workbooks.open(@"e:aaa.xls", type.missing, type.missing, type.missing, type.missing, type.missing, type.missing, type.missing, type.missing, type.missing, type.missing, type.missing, type.missing, type.missing, type.missing);excel1.visible = true;二、新建excel对象============================microsoft.office.interop.excel.application excel1 = new microsoft.office.interop.excel.application();workbook workbook1 = excel1.workbooks.add(xlwbatemplate.xlwbatworksheet或true);worksheet1.activate();//激活sheet1表excel1.visible = true;三、新建excel表============================microsoft.office.interop.excel.application excel1 = new microsoft.office.interop.excel.application();workbook workbook1 = excel1.workbooks.add(true);worksheet worksheet1 = (worksheet)workbook1.worksheets["sheet1"];worksheet worksheet1 =(worksheet)workbook1.worksheets.add(type.missing,workbook1.worksheets[1], 1, type.missing);excel1.visible = true;四、重命名excel表名============================microsoft.office.interop.excel.application excel1 = new microsoft.office.interop.excel.application();workbook workbook1 = excel1.workbooks.add(true);worksheet worksheet1 = (worksheet)workbook1.worksheets["sheet1"或1]; = "工作计划表";excel1.visible = true;五、设置或修改excel表单元格内容========================microsoft.office.interop.excel.application excel1 = new microsoft.office.interop.excel.application(); workbook workbook1 = excel1.workbooks.add(true);worksheet worksheet1 = (worksheet)workbook1.worksheets["sheet1"];worksheet1.cells[1, 1] = "姓名";worksheet1.cells[1, 2] = "性别";excel1.visible = true;六、设置excel表行宽和列高===========================microsoft.office.interop.excel.application excel1 = new microsoft.office.interop.excel.application(); workbook workbook1 = excel1.workbooks.add(true);worksheet worksheet1 = (worksheet)workbook1.worksheets["sheet1"];worksheet1.columns.columnwidth = 20;//全局行宽worksheet1.columns.rowheight = 20;//全局列高range range1 = (range) worksheet1.cells[2, 1];range1.columns.columnwidth = 40;//单元格行宽range1.columns.rowheight = 40;//单元格列高excel1.visible = true;七、设置excel表单元格边框===========================microsoft.office.interop.excel.application excel1 = new microsoft.office.interop.excel.application(); workbook workbook1 = excel1.workbooks.add(true);worksheet worksheet1 = (worksheet)workbook1.worksheets["sheet1"];range range1 = (range)worksheet1.cells[2, 2];range1.borders.color = system.drawing.colortranslator.toole(color.red);range1.borders.get_item(xlbordersindex.xledgeright).linestyle = xllinestyle.xlcontinuous;range1.borders.get_item(xlbordersindex.xledgebottom).linestyle = xllinestyle.xlcontinuous;range1.borders.get_item(xlbordersindex.xledgeleft).linestyle = xllinestyle.xlcontinuous;//也可用后面的代码代替上面四项range1.borderaround(xllinestyle.xlcontinuous, xlborderweight.xlthin, xlcolorindex.xlcolorindexautomatic,null);range1.borders.get_item(xlbordersindex.xldiagonaldown).linestyle = xllinestyle.xlcontinuous;//斜杠range1.borders.get_item(xlbordersindex.xldiagonalup).linestyle = xllinestyle.xlcontinuous;//反斜杠range1.borders.get_item(xlbordersindex.xldiagonaldown).color = system.drawing.colortranslator.toole(color.gold);excel1.visible = true;八、excel表块操作============================microsoft.office.interop.excel.application excel1 = new microsoft.office.interop.excel.application();workbook workbook1 = excel1.workbooks.add(true);worksheet worksheet1 = (worksheet)workbook1.worksheets["sheet1"];range range1 = worksheet1.get_range("a2", "e8");//选择操作块range1.font.bold = true;//设置黑体range1.font.size = 18;//设置字体大小 = "仿宋";//设置字体range1.font.color = system.drawing.colortranslator.toole(color.blue);//设置字体颜色range1.horizontalalignment = xlhalign.xlhaligncenter;//设置水平对齐方式range1.verticalalignment = xlvalign.xlvaligncenter;//设置垂直对齐方式range1.value2 = "123rn456";range1.borders.get_item(xlbordersindex.xledgetop).linestyle = xllinestyle.xlcontinuous;range1.borders.get_item(xlbordersindex.xledgeright).linestyle = xllinestyle.xlcontinuous;range1.borders.get_item(xlbordersindex.xledgebottom).linestyle = xllinestyle.xlcontinuous;//也可用后面的代码代替上面四项range1.borderaround(xllinestyle.xlcontinuous, xlborderweight.xlthin, xlcolorindex.xlcolorindexautomatic,null);range1.borders.get_item(xlbordersindex.xlinsidehorizontal).linestyle = xllinestyle.xlcontinuous;//块内竖线range1.borders.get_item(xlbordersindex.xlinsidevertical).linestyle = xllinestyle.xlcontinuous;//块内横线excel1.visible = true;九、excel表单元格合并============================microsoft.office.interop.excel.application excel1 = new microsoft.office.interop.excel.application();workbook workbook1 = excel1.workbooks.add(true);worksheet worksheet1 = (worksheet)workbook1.worksheets["sheet1"];range range1 = worksheet1.get_range("a2", "e8");//选择操作块range1.value2 = "123rn456";excel1.application.displayalerts = false;//使合并操作不提示警告信息range1.merge(false);//参数为true则为每一行合并为一个单元格excel1.application.displayalerts = true;excel1.visible = true;十、复制excel表============================microsoft.office.interop.excel.application excel1 = new microsoft.office.interop.excel.application();workbook workbook1 = excel1.workbooks.add(true);worksheet worksheet1 = (worksheet)workbook1.worksheets["sheet1"];worksheet1.cells[1, 1] = "123";worksheet1.copy(type.missing, worksheet1);worksheet worksheet2 =(worksheet)worksheet1.next;// = "sheet2";excel1.visible = true;十一、页面设置============================microsoft.office.interop.excel.application excel1 = new microsoft.office.interop.excel.application(); workbook workbook1 = excel1.workbooks.add(true);excel1.caption = "我的报表";worksheet worksheet1 = (worksheet)workbook1.worksheets["sheet1"];worksheet1.pagesetup.papersize = xlpapersize.xlpapera3;//纸张大小worksheet1.pagesetup.printtitlerows = "$1:$3";//顶端标题行worksheet1.pagesetup.orientation = xlpageorientation.xllandscape;//页面方向为横向worksheet1.pagesetup.topmargin = excel1.centimeterstopoints(2);//上边距为2厘米(厘米转像素) worksheet1.pagesetup.bottommargin = excel1.centimeterstopoints(2);//下边距为2厘米(厘米转像素) worksheet1.pagesetup.leftmargin = excel1.centimeterstopoints(1.5);//左边距为1.5厘米(厘米转像素) worksheet1.pagesetup.rightmargin = excel1.centimeterstopoints(1.5);//右边距为1.5厘米(厘米转像素) worksheet1.pagesetup.headermargin = excel1.centimeterstopoints(1.2);//页眉边距为1.2厘米(厘米转像素) worksheet1.pagesetup.footermargin = excel1.centimeterstopoints(1);//页脚边距为1厘米(厘米转像素) worksheet1.pagesetup.centerhorizontally = true;//页面水平居中worksheet1.pagesetup.centervertically = false;//页面不垂直居中worksheet1.pagesetup.centerfooter = "第&p页,共&n页";//中间页脚内容excel1.visible = true;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、中导出Excel的方法:在 中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上;一种是将文件直接将文件输出流写给浏览器。

在Response输出时,t分隔的数据,导出Excel时,等价于分列,n等价于换行。

1、将整个 html全部输出Excel此法将html中所有的内容,如按钮,表格,图片等全部输出到Excel中。

Response.Clear();Response.Buffer= true;Response.AppendHeader("Content-Disposition","attachment;filename="+DateTime.Now.ToString("yyyyMMdd")+".xls");Response.ContentEncoding=System.Text.Encoding.UTF8;Response.ContentType = "application/vnd.ms-excel";this.EnableViewState = false;这里我们利用了ContentType属性,它默认的属性为text/html,这时将输出为超文本,即我们常见的网页格式到客户端,如果改为ms-excel将将输出excel格式,也就是说以电子表格的格式输出到客户端,这时浏览器将提示你下载保存。

ContentType的属性还包括:image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword 。

同理,我们也可以输出(导出)图片、word文档等。

下面的方法,也均用了这个属性。

2、将DataGrid控件中的数据导出Excel上述方法虽然实现了导出的功能,但同时把按钮、分页框等html中的所有输出信息导了进去。

而我们一般要导出的是数据,DataGrid控件上的数据。

System.Web.UI.Control ctl=this.DataGrid1;//DataGrid1是你在窗体中拖放的控件HttpContext.Current.Response.AppendHeader("Content-Disposition","atta chment;filename=Excel.xls");HttpContext.Current.Response.Charset ="UTF-8";HttpContext.Current.Response.ContentEncoding=System.Text.Encoding.Default;HttpContext.Current.Response.ContentType ="application/ms-excel";ctl.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.Current.Response.End();如果你的DataGrid用了分页,它导出的是当前页的信息,也就是它导出的是DataGrid中显示的信息。

而不是你select语句的全部信息。

为方便使用,写成方法如下:public void DGToExcel(System.Web.UI.Control ctl){HttpContext.Current.Response.AppendHeader("Content-Disposition","a ttachment;filename=Excel.xls");HttpContext.Current.Response.Charset ="UTF-8";HttpContext.Current.Response.ContentEncoding=System.Text.Encoding.Default;HttpContext.Current.Response.ContentType ="application/ms-excel"; ctl.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.Current.Response.End();}用法:DGToExcel(datagrid1);页面中需要添加下面这个空方法.public override void VerifyRenderingInServerForm(Control control) {}3、将DataSet中的数据导出Excel有了上边的思路,就是将在导出的信息,输出(Response)客户端,这样就可以导出了。

那么把DataSet中的数据导出,也就是把DataSet中的表中的各行信息,以ms-excel的格式Response到http流,这样就OK了。

说明:参数ds应为填充有数据表的DataSet,文件名是全名,包括后缀名,如Excel2006.xlspublic void CreateExcel(DataSet ds,string FileName){HttpResponse resp;resp = Page.Response;resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");resp.AppendHeader("Content-Disposition","attachment;filename="+FileName);string colHeaders= "", ls_item="";//定义表对象与行对象,同时用DataSet对其值进行初始化DataTable dt=ds.Tables[0];DataRow[] myRow=dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的int i=0;int cl=dt.Columns.Count;//取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符 for(i=0;i<cl;i++){if(i==(cl-1))//最后一列,加n{colHeaders +=dt.Columns[i].Caption.ToString() +"n";}else{colHeaders+=dt.Columns[i].Caption.ToString()+"t";}}resp.Write(colHeaders);//向HTTP输出流中写入取得的数据信息//逐行处理数据foreach(DataRow row in myRow){//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据for(i=0;i<cl;i++){if(i== (cl-1))//最后一列,加n{ls_item +=row[i].ToString()+"n";}else{ls_item+=row[i].ToString()+"t";}}resp.Write(ls_item);ls_item="";}resp.End();}4、将dataview导出excel若想实现更加富于变化或者行列不规则的excel导出时,可用本法。

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();xBk = excel.Workbooks.Add(true);xSt = (_Worksheet)xBk.ActiveSheet;////取得标题//foreach(DataColumn col in dv.Table.Columns){colIndex++;excel.Cells[4,colIndex] = col.ColumnName;xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]).Ho rizontalAlignment = XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐 }////取得表格中的数据//foreach(DataRowView row in dv){rowIndex ++;colIndex = 1;foreach(DataColumn col in dv.Table.Columns){colIndex ++;if(col.DataType == System.Type.GetType("System.DateTime")){excel.Cells[rowIndex,colIndex] =(Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowInd ex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐}elseif(col.DataType == System.Type.GetType("System.String")){excel.Cells[rowIndex,colIndex] ="'"+row[col.ColumnName].ToString();xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowInd ex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐}else{excel.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString(); }}}////加载一个合计行//int rowSum = rowIndex + 1;int colSum = 2;excel.Cells[rowSum,2] = "合计";xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).Horizon talAlignment = XlHAlign.xlHAlignCenter;////设置选中的部分的颜色//xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colInd ex]).Select();xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colInd ex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种////取得整个报表的标题//excel.Cells[2,2] = str;////设置整个报表的标题格式//xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold = true; xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size = 22; ////设置报表表格为最适应宽度//xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Colum ns.AutoFit();////设置整个报表的标题为跨列居中//xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select(); xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Horizontal Alignment = XlHAlign.xlHAlignCenterAcrossSelection;////绘制边框//xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borde rs.LineStyle = 1;xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders[XlBo rdersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[Xl BordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置上边线加粗xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex] ).Borders[XlBordersIndex.xlEdgeRight].Weight =XlBorderWeight.xlThick;//设置右边线加粗xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]). Borders[XlBordersIndex.xlEdgeBottom].Weight =XlBorderWeight.xlThick;//设置下边线加粗////显示效果//excel.Visible=true;//xSt.Export(Server.MapPath(".")+""+this.xlfile.Text+".xls",SheetE xportActionEnum.ssExportActionNone,Microsoft.Office.Interop.OWC.Sheet ExportFormat.ssExportHTML);xBk.SaveCopyAs(Server.MapPath(".")+""+this.xlfile.Text+".xls");ds = null;xBk.Close(false, null,null);excel.Quit();System.Runtime.InteropServices.Marshal.ReleaseComObject(x Bk);System.Runtime.InteropServices.Marshal.ReleaseComObject(e xcel);System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);xBk = null;excel = null;xSt = null;GC.Collect();string path = Server.MapPath(this.xlfile.Text+".xls");System.IO.FileInfo file = new System.IO.FileInfo(path);Response.Clear();Response.Charset="GB2312";Response.ContentEncoding=System.Text.Encoding.UTF8;// 添加头信息,为"文件下载/另存为"对话框指定默认文件名Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode());// 添加头信息,指定文件大小,让浏览器能够显示下载进度Response.AddHeader("Content-Length", file.Length.ToString());// 指定返回的是一个不能被客户端读取的流,必须被下载Response.ContentType = "application/ms-excel";// 把文件流发送到客户端Response.WriteFile(file.FullName);// 停止页面的执行Response.End();}上面的方面,均将要导出的excel数据,直接给浏览器输出文件流,下面的方法是首先将其存到服务器的某个文件夹中,然后把文件发送到客户端。

相关文档
最新文档