C# 将数据库里的数据整理出来导出Excel
标题中有"标准格式的Excel"是指,网上很多导出Excel的方法,但是打开该导出的Excel会弹出"您尝试打开的**.xls文件格式与文件扩展名指定的格式不一致",是因为该方法导出的文件只是扩展名是xls而已,并不是真正意义上的Excel。
可用迅雷下载是指迅雷可真正下载到导出的Excel文件,解决了网上很多人用迅雷下载完成只是个页面文件的疑问。文件名乱码等解决方案都包含在其中。
本案例利用第三方组件myxls来实现导出真正意义上的Excel,myxls的介绍很多,大家可以自己搜。在项目中尧使用myxls,只要导入一个dll文件,本文附件中有提供。
注:整个解决方案包含2个aspx文件和1个js文件,至于为什么要使用2个aspx页面,是因为要让迅雷下载到真正Excel文件,而不是下载aspx页面。项目需要引用到附件中的dll文件,请记得添加引用。
A.aspx页面(显示内容,包含导出按钮)文件:
js文件:
B.aspx页面并不需要写任何内容,浏览器或迅雷检测到Excel文件后,该页面会自动关闭。
[这里很关键]B.aspx.cs文件:
标题中有"标准格式的Excel"是指,网上很多导出Excel的方法,但是打开该导出的Excel会弹出"您尝试打开的**.xls文件格式与文件扩展名指定的格式不一致",是因为该方法导出的文件只是扩展名是xls而已,并不是真正意义上的Excel。
可用迅雷下载是指迅雷可真正下载到导出的Excel文件,解决了网上很多人用迅雷下载完成只是个页面文件的疑问。文件名乱码等解决方案都包含在其中。
本案例利用第三方组件myxls来实现导出真正意义上的Excel,myxls的介绍很多,大家可以自己搜。在项目中尧使用myxls,只要导入一个dll文件,本文附件中有提供。
注:整个解决方案包含2个aspx文件和1个js文件,至于为什么要使用2个aspx页面,是因为要让迅雷下载到真正Excel文件,而不是下载aspx页面。项目需要引用到附件中的dll文件,请记得添加引用。
A.aspx页面(显示内容,包含导出按钮)文件:
<asp:Button ID="Button1" runat="server" Text="导出报名表" ClientIDMode="Static" /> //这里仅列出导出按钮 ClientIDMode表示id不变可方便js中获取该元素
js文件:
//这是按钮点击事件 即点击"导出报名表"按钮后的处理 $("#Button1").click(function () { var title = escape(ActivityTitle); window.open('ExportExcel.aspx?id=' + ActivityID + '&title=' + title); }); //这里title是指文件名,使用escape是因为"文件名包含中文" ,必须使用这样的方式传中文参
B.aspx页面并不需要写任何内容,浏览器或迅雷检测到Excel文件后,该页面会自动关闭。
[这里很关键]B.aspx.cs文件:
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using org.in2bits.MyXls; using System.Data.SqlClient; using System.Text; using Microsoft.JScript; namespace XXXXX { public partial class B: System.Web.UI.Page { DataTable table = new DataTable(); //定义一个DataTable用来存放从数据库得到的数据 protected void Page_Load(object sender, EventArgs e) { GetData(); //获取数据 SendExcel(); //导出Excel } private void SendExcel() { org.in2bits.MyXls.XlsDocument doc = new org.in2bits.MyXls.XlsDocument(); string Title = Microsoft.JScript.GlobalObject.unescape(Request.QueryString["title"]); //解码传递过来的中文参 string FileName = Title + "-报名表"; string eFileName = HttpUtility.UrlEncode(FileName, Encoding.UTF8); //这里解决中文乱码 doc.FileName = eFileName + ".xls";//excel文件名称 //设置Excel格式,如果没有要求可忽略 XF TitleXF = doc.NewXF(); //设置表头的实例 TitleXF.UseBorder = true; TitleXF.TopLineStyle = 1; TitleXF.TopLineColor = Colors.Black; TitleXF.BottomLineStyle = 1; TitleXF.BottomLineColor = Colors.Black; TitleXF.LeftLineStyle = 1; TitleXF.LeftLineColor = Colors.Black; TitleXF.RightLineStyle = 1; TitleXF.RightLineColor = Colors.Black; //TitleXF.HorizontalAlignment = HorizontalAlignments.Centered; // 设定文字居中 TitleXF.VerticalAlignment = VerticalAlignments.Centered; // 垂直居中 TitleXF.Font.Bold = true; // 是否加粗 XF dataXF = doc.NewXF(); //设置单元格的实例 dataXF.UseBorder = true; dataXF.TopLineStyle = 1; dataXF.TopLineColor = Colors.Black; dataXF.BottomLineStyle = 1; dataXF.BottomLineColor = Colors.Black; dataXF.LeftLineStyle = 1; dataXF.LeftLineColor = Colors.Black; dataXF.RightLineStyle = 1; dataXF.RightLineColor = Colors.Black; //Excel格式设置结束 org.in2bits.MyXls.Worksheet sheet = doc.Workbook.Worksheets.AddNamed("sheet1");//Excel工作表名称 org.in2bits.MyXls.Cells cells = sheet.Cells; string[] Header = { "昵称", "姓名", "联系电话", "备注", "报名时间"}; //定义Excel表头 for (int i = 0; i < Header.Length; i++) { cells.Add(1, (i + 1), Header[i], TitleXF);//导出表头 其中TitleXF为上面设置的格式,如果不需要不用加这个参数,可写成cells.Add(1, (i + 1), Header[i]); } for (int i = 0; i < table.Rows.Count; i++) { for (int j = 0; j < Header.Length; j++) { cells.Add((i + 2), (j + 1), table.Rows[i][j].ToString(), dataXF); //导出数据 其中dataXF为上面设置的格式,如果不需要不用加这个参数,可写成ells.Add((i + 2), (j + 1), table.Rows[i][j].ToString()); } } //这一段也是格式设置,可忽略 ColumnInfo col0 = new ColumnInfo(doc, sheet); // 列对象 col0.ColumnIndexStart = 0; // 起始列为第1列,索引从0开始 col0.ColumnIndexEnd = 4; // 终止列为第1列,索引从0开始 col0.Width = 20 * 256; // 列的宽度计量单位为 1/256 字符宽 sheet.AddColumnInfo(col0); // 把格式附加到sheet页上 //格式设置结束 string path = Server.MapPath("TempFile/"); //设置存储路径 doc.Save(path, true); //为了解决让迅雷下载到Excel而保存在服务器的临时文件 doc.Send(); //发送Excel给客户端 System.IO.File.Delete(path + doc.FileName); //删除之前保存的临时文件 } private void GetData() { string ActivityID = Request.QueryString["id"]; //该值是执行SQL语句需要用到的参数 SqlConnection sqlcon; string strCon = "Data Source=(local);Database=数据库名;user=用户名;password=密码"; string sqlstr = "select * from 表名 where 列名=ActivityID order by time desc"; //SQL语句,请自行改动 sqlcon = new SqlConnection(strCon); //需要导出到Excel的每列值的数据类型,需要几列请定义几列,列名请与SQL语句查询结果的列名相对应 table.Columns.Add("列名1", Type.GetType("System.String")); table.Columns.Add("列名2", Type.GetType("System.String")); table.Columns.Add("列名3", Type.GetType("System.String")); table.Columns.Add("列名4", Type.GetType("System.String")); table.Columns.Add("列名5", Type.GetType("System.String")); //新建SqlCommand对象 SqlCommand cmd = new SqlCommand(sqlstr, sqlcon); //打开数据库连接 sqlcon.Open(); //返回dr对象 SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); //循环读取SQL查询结果并赋给DataTable while (dr.Read()) { string[] strs; //定义一数组 DataRow row = table.NewRow(); row[0] = dr["列名1"].ToString(); //假设列2会出现空值,需要以下处理,不然使用ToString会出错或单元格内容为 if (dr["列名2"] != "") row[1] = dr["列名2"].ToString(); row[2] = dr["列名3"].ToString(); row[3] = dr["列名4"].ToString(); row[4] = dr["列名5"].ToString(); table.Rows.Add(row); } sqlcon.Close(); } } }
- org.in2bits.MyXls.rar (42 KB)
- 下载次数: 0
发表评论
-
已超过传入消息(65536)的最大消息大小配额 解决方案
2015-01-05 21:47 2008在客户端Web.config做如下修改: //注意是客户端 ... -
C# 传值给js
2014-12-22 10:10 396传变量: public static string getUr ... -
创建windows services 实现定时操作 提供调试方法
2014-12-10 15:57 4171.VS-》文件-》新建项目,弹出窗口中选择Visual C# ... -
ASP.NET多个按钮同一事件 不同处理
2014-08-08 15:09 1096多个按钮都调用BtnUpload_Click事件,在cs文件中 ... -
C# 字符串截取
2014-07-08 15:16 721c#中字符串截取使用的 ... -
C# 获取系统当前时间 长格式
2014-07-08 15:10 454C# 获取系统当前时间(长格式) 时间格式:2014-05-0 ... -
C# 获取客户端IP
2014-07-08 15:08 559C#网页需要记录浏览页面的客户端IP地址,可通过以下方法: 1 ... -
ValidationSummary控件无法弹出错误提示框
2014-07-07 10:03 361使用控件RequiredFieldValidator加上Val ... -
C# 中object sender与EventArgs e
2014-07-07 10:02 383C#中方法的参数里经常会出现object sender与Eve ...
相关推荐
c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#) winform
C#导出图片到EXCEL,研究了好久,总算搞定了,贡献给大家。
C#导出excel文件
C# datatable直接导出数据到Excel,(数据量百万级只需3秒)
C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致
使用C#实现了excel表格的导出功能,包含xls和xlsx两种格式。 程序有添加关于NOPI的引用,有疑问可以参考我的csdn博客http://blog.csdn.net/my_clear_mind
这是一个关于C#把数据导出为Excel格式的一个实例,很实用的,还请大家多多指教呀,呵呵,有什么缺陷还请大家及时指正呀,呵呵!!!
C#导出数据到EXCEL表格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,...
C#大量数据导出到Excel,超过65536行时自动分页导出
导出到Excel表格功能,
C#前台Jhtml页面数据,列表数据使用javaScript导出数据到Excel
C# 导出EXCELC# 导出EXCELC# 导出EXCELC# 导出EXCELC# 导出EXCELC# 导出EXCELC# 导出EXCELC# 导出EXCEL
C# 导出excel代码C# 导出excel代码C# 导出excel代码C# 导出excel代码C# 导出excel代码C# 导出excel代码C# 导出excel代码C# 导出excel代码C# 导出excel代码C# 导出excel代码C# 导出excel代码C# 导出excel代码C# 导出...
c#导出导入excel 自定义字段 自定义列 OleDb方式的excel导入 可以实现自定义字段,不按照模版的方式导出
C# Treeview 数据导出到Excel,很好玩的.有注释....
C#数据导出到Excel自定义样式,带图片导出功
c#导出Excel文件 c#导出Excel文件
我其实不想要这个资源分的,但是这个提交资源最小是2基本,如果有需要的可以联系我,邮箱lzwwy2015@aliyun.com
C#导出Excel,利用第三方的dll文件,可以改变导出数据的样式,有实例代码。