asp.net下载并保存 excel 格式表格数据 点击下载链接 将表格保存为 excel 格式 虽然直接把网页标签输出 保存为 .excel扩展名但是用几十本打开就直接是 网页标签 怎样才能保存为 “真正”的.excel 格式另外在说说保存为文本文档格式的 方法 不要有html 标签 只要表格里面的数据 我的表格是用 gridview 显示的!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第1个方法.. 使用Office COM组件...让服务器保存出来你再下载.第2个方法.. 使用OLEDB写到一个空EXCEL文件里 让你下载. 真正的 Excel,你必须使用 Excel提供的 API。Excel.Application oExcel=new Excel.Application();等参见http://blog.csdn.net/jilm168/archive/2007/11/06/1869118.aspx后面的部分 Excel.Application oExcel=new Excel.Application();创建EXCEL。打开模板复制到单元格下载string fileName = "";//客户端保存的文件名 string filePath = Server.MapPath("");//路径 FileInfo fileInfo = new FileInfo(filePath); Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName); Response.AddHeader("Content-Length", fileInfo.Length.ToString()); Response.AddHeader("Content-Transfer-Encoding", "binary"); Response.ContentType = "application/octet-stream"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); Response.WriteFile(fileInfo.FullName); Response.Flush(); Response.End();过滤html 标签Regex.Replace(str,@"<[^> ]+>",""); 看看这个如何:http://blog.csdn.net/jilm168/archive/2007/11/06/1869118.aspx 自己手動創建一個excel,後綴名改成.txt,看看源代碼,用C#去拼這些源代碼吧。 楼主给分挺高的。个人建议使用NPOI吧,导出的XLS是标准的。而且使用特别简单,几行代码解决问题。 又一个下载Excel本来不想说的但知道作为程序员的你,做不出东西来是很恼火的一件事情。以后都不必为excel烦恼了,什么office组建、什么三方晕。用得了这么麻烦吗?从前我从事.net的时候,公司里的老大们怎么做,就是xml保存后为xls就可以了。这个是我从前写的代码,里面如果不能满足你的可以自己去改,就是一个思想:http://download.csdn.net/source/2647486以后就别说什么world、excel打印了。什么都xml做 MyXls写Excel类 下面是两种导出Excel的方法,一种是导出页面控件中的数据,另一种是在后台构建一个DataTable然后点击按钮导出这个Datatable:public static void ToExcel(System.Web.UI.Control ctl, string FileName) { HttpContext.Current.Response.Charset = "UTF-8"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default; HttpContext.Current.Response.ContentType = "application/ms-excel"; HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName + ".xls"); 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(); } public static void ToExcel1(DataTable Dt, string FileName) { System.Web.UI.WebControls.GridView dgExport = null; //当前对话 System.Web.HttpContext curContext = System.Web.HttpContext.Current; //IO用于导出并返回excel文件 System.IO.StringWriter strWriter = null; System.Web.UI.HtmlTextWriter htmlWriter = null; if (Dt != null) { //设置编码和附件格式 //System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8)作用是方式中文文件名乱码 curContext.Response.AddHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls"); curContext.Response.ContentType = "application nd.ms-excel"; curContext.Response.ContentEncoding = System.Text.Encoding.UTF8; curContext.Response.Charset = "GB2312"; //导出Excel文件 strWriter = new System.IO.StringWriter(); htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter); //为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的GridView dgExport = new System.Web.UI.WebControls.GridView(); dgExport.DataSource = Dt.DefaultView; dgExport.AllowPaging = false; dgExport.DataBind(); //下载到客户端 dgExport.RenderControl(htmlWriter); curContext.Response.Write(strWriter.ToString()); curContext.Response.End(); } } 其实这么做的还是把网页输出保存为 .xls扩展名而已 这里的 Response.ContentType = "application nd.ms-excel";属性你随便写个什么都是一样 下载后的文件 他只认 扩展名 所以用记事本打开 下载后的文件 可以看到还是 包含html标签的 文本而已 而 "真正" .xls文件用记事本打开后是加密的文本 所以是乱码 我在这里只 想保存为 "真正" 的 .xls 文件请问各位高手有什么方法可以办到吗??? 最好是首先完整的Excel格式保存在服务器中,再下载...我也是在找这种效果,但我不会,希望得到大师的帮助 # // <summary> # /// 把数据从DataTable导入到Excel文件里 # /// </summary> # /// <param name="dataTable">数据源</param> # /// <param name="AbsoluteExcelFilePath">Excel文件的绝对路径</param> # /// <param name="TblColName">TBL里对应的列名</param> # /// <param name="ColumnName">Excel中对应的列名</param> # /// <returns>操作成功返回True,失败返回False</returns> # public static bool ExportDataToExcel(DataTable dataTable, string AbsoluteExcelFilePath, string[] TblColName, string[] ColumnName) # { # int k = 0; # if (dataTable == null) return false; # # OleDbConnection Conn = new OleDbConnection(); # try # { # string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + AbsoluteExcelFilePath + ";Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB:Create System Database=True"; # Conn = new OleDbConnection(strConn); # Conn.Open(); # OleDbCommand command = Conn.CreateCommand(); # string strSQL = ""; # if (dataTable.Columns != null) # { # //建表 # strSQL = "CREATE TABLE " + dataTable.TableName + "("; # for (int i = 0; i < ColumnName.Length; i++) # { # strSQL += ColumnName[i] + " TEXT,"; # } # strSQL = strSQL.Substring(0, strSQL.Length - 1); # strSQL += ")"; # command.CommandText += strSQL; # command.ExecuteNonQuery(); # if (dataTable.Rows.Count > 0) # { # //导入数据 # foreach (DataRow row in dataTable.Rows) # { # strSQL = "insert into " + dataTable.TableName + "("; # for (k = 0; k < TblColName.Length; k++) # { # strSQL += ColumnName[k] + ","; # } # strSQL = strSQL.Substring(0, strSQL.Length - 1); # strSQL += ") values( "; # for (k = 0; k < TblColName.Length; k++) # { # strSQL += "'" + row[TblColName[k]] + "',"; # } # strSQL = strSQL.Substring(0, strSQL.Length - 1); # strSQL += ")"; # command.CommandText = strSQL; # command.ExecuteNonQuery(); # } # } # } # # } # catch (Exception ex) # { # Conn.Close(); # throw new Exception(ex.Message); # return false; # } # Conn.Close(); # return true; # } # 调用方法: # DataSet ds = (DataSet)Session["listMobile"];//获得要导出的表格的值 # # if (ds.Tables[0].Rows.Count <= 0) # { # Page.RegisterStartupScript("", "<mce:script type="text/javascript"><!-- # alert('没有内容不能导出!') # // --></mce:script>"); # } # else # { # //EXCEL页面的名称 # string[] tableName = { "["+DateTime.Now.ToString("yyyyMMddhhmmss")+"]" }; # # string fileName = tools.CreateID() + ".xls"; # string filePath = Server.MapPath("..\\DownloadFiles\\" + fileName); # if (tools.ExportDataToExcel(ds, filePath, tableName)==true) # { # Response.Clear(); # Response.Buffer = true; # Response.Charset = "GB2312"; # Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName); # Response.ContentType = "application/vnd.ms-excel"; # this.EnableViewState = false; # Response.WriteFile(filePath); # Response.Flush(); # if (System.IO.File.Exists(filePath)) System.IO.File.Delete(filePath); # Response.Redirect(this.Request.UrlReferrer.AbsoluteUri, true); # Response.End(); # } # } /// <summary> /// 生成EXCEL文件并直接下载 /// </summary> /// <param name="ctl">控件名称</param> /// <param name="filename">生成的文件的文件名</param> public void SettoExcel(System.Web.UI.Control ctl,string filename) { Response.Clear(); Response.Buffer = true; Response.Charset = "GB2312"; Response.ContentType = "application/octet-stream"; //通知浏览器下载文件而不是打开 Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8)); ctl.EnableViewState = false; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); ctl.RenderControl(htw ); Response.Write(sw.ToString()); Response.End(); } 以上的方法保存的 excel 文件不是我想要的 用记事本打开 可以看见 就是html 代码 我要的是真正的 excel 格式的文件 算了 各位告诉我一下 怎样保存为 文本文档格式的方法 (不要有html标签) 这里的 Excel.Application 是哪个命名空间里面的啊 需要添加什么引用 告诉我下 谢谢了 这算不算传说中的导出EXl? 我博客里有个,自己写的 一个月了 还没解决?汗npoi 百度一下 官方网站 什么都有; 看例子 1个小时就搞定了吧 一个月了 还没解决?汗npoi 百度一下 官方网站 什么都有; 看例子 1个小时就搞定了吧 http://msdn.microsoft.com/zh-tw/ee818993.aspx这个还是很好的。 #region 将dataset导出到excel下,让用户保存,不存在路径问题 /// <summary> /// 将dataset导出到excel下面 /// </summary> /// <param name="ds"></param> /// <param name="FileName"></param> /// <param name="page"></param> public static void CreateExcel(DataSet ds, string FileName, System.Web.UI.Page page) { 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 += NoHTML(row[i].ToString()) + "\n"; } else { ls_item += NoHTML(row[i].ToString()) + "\t"; } } resp.Write(ls_item); ls_item = ""; } resp.End(); } #endregion 现在只需要大家告诉我 怎样下载保存为.txt格式 感激不尽!!! (不要有html标签的纯文本格式) Response.Charset = "UTF-8"; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString()); Response.ContentType = FileType; this.EnableViewState = false; StringWriter tw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(tw); if (Rbtsaveone.Checked == true) { GridView1.RenderControl(hw); Response.Write(tw.ToString()); Response.End(); } else { GridView1.AllowPaging = false; bind(Convert.ToInt32(ddlCurrentPage.SelectedValue),0); GridView1.RenderControl(hw); Response.Write(tw.ToString()); Response.End(); GridView1.AllowPaging = true; bind(Convert.ToInt32(ddlCurrentPage.SelectedValue),0); } /// <summary> /// 把Data表中的内容导出到Excel /// </summary> /// <param name="Data">数据</param> /// <param name="HasTemplate">是否存在模板</param> /// <param name="FileFullName">文件全路径</param> /// <param name="LineBegin">开始行</param> /// <param name="ColumnBegin">开始列</param> /// <param name="HasHead">是否需要自动添加头部</param> /// <param name="HasBorder">是否需要自动添加边框</param> /// <param name="Print">是否打印</param> /// <param name="PrinterName">打印机名称</param> public void Export(DataTable Data, bool HasTemplate, string FileFullName, int LineBegin, int ColumnBegin, bool HasHead, bool HasBorder, bool Print, string PrinterName) { object missing = System.Reflection.Missing.Value;//missing定义 int iPageSize; //数据页大小 int iDataLineBegin; //数据开始行 int iPageLineBegin; //每页数据填充开始行 int iPageLineEnd; //每页数据填充结束行 int iPageDataBegin; //每页数据开始行 int iPageDataEnd; //每页数据结束行 int iSheetsCount; //Sheet个数 object[,] aDataBuffer; //数据导入缓冲 string strFileReadName; //真实文件名 try { //Excel初始化 //数据量相关参数 iPageSize = 65536;//每页数据行 iDataLineBegin = LineBegin + (HasHead == true ? 1 : 0);//首行 //Sheet数 iSheetsCount = (Data.Rows.Count + iDataLineBegin - 1) / (iPageSize + 1) + 1; //打开Excel: // 存在模板时,打开模板 // 不存在模板时,新建Excel if (HasTemplate == true)//存在模板 { this.OpenExcel(FileFullName); } else//不存在模板 { this.OpenNewExcel(iSheetsCount); } //导入文件头 if (HasHead == true) { //实例化数据缓冲 aDataBuffer = new string[1, Data.Columns.Count]; //准备数据 for (int i = 0; i < Data.Columns.Count; i++) { aDataBuffer[0, i] = Data.Columns[i].ColumnName; } //把缓冲区的数据写入到Excel WriteDataToRange((Excel.Worksheet)excelWorkbook.Worksheets[1], aDataBuffer, LineBegin, ColumnBegin, HasBorder); } //以Sheet为单位导出数据 for (int i = 0; i < iSheetsCount; i++) { //导出第i个数据的数据 //计算开始行和结束行 iPageLineBegin = i == 0 ? iDataLineBegin : 1; iPageLineEnd = i < iSheetsCount - 1 ? iPageSize : Data.Rows.Count - i * iPageSize + iDataLineBegin - 1; //计算数据开始行和结束行 iPageDataBegin = i == 0 ? 0 : i * iPageSize - iDataLineBegin + 1; iPageDataEnd = iPageDataBegin + iPageLineEnd - iPageLineBegin + 1; //实例化数据缓冲 GC.Collect(); aDataBuffer = new string[iPageLineEnd - iPageLineBegin + 1, Data.Columns.Count]; //准备数据 for (int iRow = iPageDataBegin; iRow < iPageDataEnd; iRow++) { for (int iCol = 0; iCol < Data.Columns.Count; iCol++) { aDataBuffer[iRow - iPageDataBegin, iCol] = Data.Rows[iRow][iCol].ToString(); } } //把缓冲区的数据写入到Excel WriteDataToRange((Excel.Worksheet)excelWorkbook.Worksheets[i + 1], aDataBuffer, iPageLineBegin, ColumnBegin, HasBorder); //给sheet命名 ((Excel.Worksheet)excelWorkbook.Worksheets[i + 1]).Name = (Data.TableName.Equals("") == true ? "Data" : Data.TableName) + (i == 0 ? "" : i.ToString()); } if (Print)//打印 excelApp.Workbooks[1].PrintOut(System.Reflection.Missing.Value, System.Reflection.Missing.Value, 1, false, PrinterName, false, true, ""); else { //获取真实文件名 strFileReadName = FileFullName.Substring(0, FileFullName.Length - 4) + ".xls"; //保存文件 if (System.IO.File.Exists(strFileReadName)) System.IO.File.Delete(strFileReadName); this.excelApp.Workbooks[1].SaveCopyAs(strFileReadName); } } catch (Exception ex) { throw ex; } finally { this.CloseExcel(); } } 加点protected Excel.Application excelApp;//Excel Application对象 protected Excel.Workbook excelWorkbook;//Excel workbook对象 现在只需要大家告诉我 怎样下载保存为.txt格式 感激不尽!!! (不要有html标签的纯文本格式) 支持web及winform从DataTable导出到Excel。 生成速度很快。 准确判断数据类型,不会出现身份证转数值等上面提到的一系列问题。 如果单页条数大于65535时会新建工作表。 列宽自适应。 支持读取Excel。 调用方便,只一调用一个静态类就OK了 Excel的csv格式就是txt格式,你用记事本打开就明白了。 忘了告诉你代码的下载地址了:http://download.csdn.net/source/3065905 跨年的帖子,好帖!试试NPOI吧 asp.net头文件问题 如何让JS在指定范围点击时刷新页面 求个XSL写法,坐等答案 在asp.net如何设计一个隔一段时间就重新提取一下数据库的“滚动”信息框? 如何从表中读取gridview的HeaderText? 在Visual Stdio 2005如何进行Mobile Internet Applicaton开发? 如何取得所有系统颜色? 怎样用.net访问Solaris环境下安装的Oracle?100分!呜。。呜。。呜。。。。。。 验证后为啥断点调试失灵? 《struts Web设计与开发大全》源代码和实例视频讲解 可以再catch里把错误的位置显示出来吗? 正则表达式高手请进
第2个方法.. 使用OLEDB写到一个空EXCEL文件里 让你下载.
http://blog.csdn.net/jilm168/archive/2007/11/06/1869118.aspx后面的部分
创建EXCEL。打开模板复制到单元格
下载
string fileName = "";//客户端保存的文件名
string filePath = Server.MapPath("");//路径 FileInfo fileInfo = new FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
过滤html 标签Regex.Replace(str,@"<[^> ]+>","");
个人建议使用NPOI吧,导出的XLS是标准的。
而且使用特别简单,几行代码解决问题。
以后都不必为excel烦恼了,什么office组建、什么三方晕。用得了这么麻烦吗?从前我从事.net的时候,公司里的老大们怎么做,就是xml保存后为xls就可以了。
这个是我从前写的代码,里面如果不能满足你的可以自己去改,就是一个思想:
http://download.csdn.net/source/2647486
以后就别说什么world、excel打印了。什么都xml做
public static void ToExcel(System.Web.UI.Control ctl, string FileName)
{ HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName + ".xls");
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();
} public static void ToExcel1(DataTable Dt, string FileName)
{
System.Web.UI.WebControls.GridView dgExport = null;
//当前对话
System.Web.HttpContext curContext = System.Web.HttpContext.Current;
//IO用于导出并返回excel文件
System.IO.StringWriter strWriter = null;
System.Web.UI.HtmlTextWriter htmlWriter = null; if (Dt != null)
{
//设置编码和附件格式
//System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8)作用是方式中文文件名乱码
curContext.Response.AddHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls");
curContext.Response.ContentType = "application nd.ms-excel";
curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
curContext.Response.Charset = "GB2312"; //导出Excel文件
strWriter = new System.IO.StringWriter();
htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter); //为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的GridView
dgExport = new System.Web.UI.WebControls.GridView();
dgExport.DataSource = Dt.DefaultView;
dgExport.AllowPaging = false;
dgExport.DataBind(); //下载到客户端
dgExport.RenderControl(htmlWriter);
curContext.Response.Write(strWriter.ToString());
curContext.Response.End();
}
}
其实这么做的还是把网页输出保存为 .xls扩展名而已
这里的 Response.ContentType = "application nd.ms-excel";
属性你随便写个什么都是一样 下载后的文件 他只认 扩展名 所以用记事本打开 下载后的文件 可以看到还是 包含html标签的 文本而已 而 "真正" .xls文件用记事本打开后是加密的文本 所以是乱码 我在这里只 想保存为 "真正" 的 .xls 文件请问各位高手有什么方法可以办到吗???
我也是在找这种效果,但我不会,
希望得到大师的帮助
# /// 把数据从DataTable导入到Excel文件里
# /// </summary>
# /// <param name="dataTable">数据源</param>
# /// <param name="AbsoluteExcelFilePath">Excel文件的绝对路径</param>
# /// <param name="TblColName">TBL里对应的列名</param>
# /// <param name="ColumnName">Excel中对应的列名</param>
# /// <returns>操作成功返回True,失败返回False</returns>
# public static bool ExportDataToExcel(DataTable dataTable, string AbsoluteExcelFilePath, string[] TblColName, string[] ColumnName)
# {
# int k = 0;
# if (dataTable == null) return false;
#
# OleDbConnection Conn = new OleDbConnection();
# try
# {
# string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + AbsoluteExcelFilePath + ";Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB:Create System Database=True";
# Conn = new OleDbConnection(strConn);
# Conn.Open();
# OleDbCommand command = Conn.CreateCommand();
# string strSQL = "";
# if (dataTable.Columns != null)
# {
# //建表
# strSQL = "CREATE TABLE " + dataTable.TableName + "(";
# for (int i = 0; i < ColumnName.Length; i++)
# {
# strSQL += ColumnName[i] + " TEXT,";
# }
# strSQL = strSQL.Substring(0, strSQL.Length - 1);
# strSQL += ")";
# command.CommandText += strSQL;
# command.ExecuteNonQuery();
# if (dataTable.Rows.Count > 0)
# {
# //导入数据
# foreach (DataRow row in dataTable.Rows)
# {
# strSQL = "insert into " + dataTable.TableName + "(";
# for (k = 0; k < TblColName.Length; k++)
# {
# strSQL += ColumnName[k] + ",";
# }
# strSQL = strSQL.Substring(0, strSQL.Length - 1);
# strSQL += ") values( ";
# for (k = 0; k < TblColName.Length; k++)
# {
# strSQL += "'" + row[TblColName[k]] + "',";
# }
# strSQL = strSQL.Substring(0, strSQL.Length - 1);
# strSQL += ")";
# command.CommandText = strSQL;
# command.ExecuteNonQuery();
# }
# }
# }
#
# }
# catch (Exception ex)
# {
# Conn.Close();
# throw new Exception(ex.Message);
# return false;
# }
# Conn.Close();
# return true;
# }
# 调用方法:
# DataSet ds = (DataSet)Session["listMobile"];//获得要导出的表格的值
#
# if (ds.Tables[0].Rows.Count <= 0)
# {
# Page.RegisterStartupScript("", "<mce:script type="text/javascript"><!--
# alert('没有内容不能导出!')
# // --></mce:script>");
# }
# else
# {
# //EXCEL页面的名称
# string[] tableName = { "["+DateTime.Now.ToString("yyyyMMddhhmmss")+"]" };
#
# string fileName = tools.CreateID() + ".xls";
# string filePath = Server.MapPath("..\\DownloadFiles\\" + fileName);
# if (tools.ExportDataToExcel(ds, filePath, tableName)==true)
# {
# Response.Clear();
# Response.Buffer = true;
# Response.Charset = "GB2312";
# Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
# Response.ContentType = "application/vnd.ms-excel";
# this.EnableViewState = false;
# Response.WriteFile(filePath);
# Response.Flush();
# if (System.IO.File.Exists(filePath)) System.IO.File.Delete(filePath);
# Response.Redirect(this.Request.UrlReferrer.AbsoluteUri, true);
# Response.End();
# }
# }
/// 生成EXCEL文件并直接下载
/// </summary>
/// <param name="ctl">控件名称</param>
/// <param name="filename">生成的文件的文件名</param>
public void SettoExcel(System.Web.UI.Control ctl,string filename)
{
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));
ctl.EnableViewState = false;
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
ctl.RenderControl(htw );
Response.Write(sw.ToString());
Response.End();
}
用记事本打开 可以看见 就是html 代码
我要的是真正的 excel 格式的文件
我博客里有个,自己写的
一个月了 还没解决?汗
npoi 百度一下 官方网站 什么都有; 看例子
1个小时就搞定了吧
一个月了 还没解决?汗
npoi 百度一下 官方网站 什么都有; 看例子
1个小时就搞定了吧
这个还是很好的。
/// <summary>
/// 将dataset导出到excel下面
/// </summary>
/// <param name="ds"></param>
/// <param name="FileName"></param>
/// <param name="page"></param>
public static void CreateExcel(DataSet ds, string FileName, System.Web.UI.Page page)
{
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 += NoHTML(row[i].ToString()) + "\n";
}
else
{
ls_item += NoHTML(row[i].ToString()) + "\t";
} }
resp.Write(ls_item);
ls_item = ""; }
resp.End();
}
#endregion
Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.ContentType = FileType;
this.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
if (Rbtsaveone.Checked == true)
{
GridView1.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();
}
else
{
GridView1.AllowPaging = false;
bind(Convert.ToInt32(ddlCurrentPage.SelectedValue),0);
GridView1.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();
GridView1.AllowPaging = true;
bind(Convert.ToInt32(ddlCurrentPage.SelectedValue),0);
}
/// <summary>
/// 把Data表中的内容导出到Excel
/// </summary>
/// <param name="Data">数据</param>
/// <param name="HasTemplate">是否存在模板</param>
/// <param name="FileFullName">文件全路径</param>
/// <param name="LineBegin">开始行</param>
/// <param name="ColumnBegin">开始列</param>
/// <param name="HasHead">是否需要自动添加头部</param>
/// <param name="HasBorder">是否需要自动添加边框</param>
/// <param name="Print">是否打印</param>
/// <param name="PrinterName">打印机名称</param>
public void Export(DataTable Data, bool HasTemplate, string FileFullName, int LineBegin, int ColumnBegin, bool HasHead, bool HasBorder, bool Print, string PrinterName)
{
object missing = System.Reflection.Missing.Value;//missing定义
int iPageSize; //数据页大小
int iDataLineBegin; //数据开始行
int iPageLineBegin; //每页数据填充开始行
int iPageLineEnd; //每页数据填充结束行
int iPageDataBegin; //每页数据开始行
int iPageDataEnd; //每页数据结束行
int iSheetsCount; //Sheet个数
object[,] aDataBuffer; //数据导入缓冲
string strFileReadName; //真实文件名 try
{
//Excel初始化 //数据量相关参数
iPageSize = 65536;//每页数据行
iDataLineBegin = LineBegin + (HasHead == true ? 1 : 0);//首行
//Sheet数
iSheetsCount = (Data.Rows.Count + iDataLineBegin - 1) / (iPageSize + 1) + 1; //打开Excel:
// 存在模板时,打开模板
// 不存在模板时,新建Excel
if (HasTemplate == true)//存在模板
{
this.OpenExcel(FileFullName);
}
else//不存在模板
{
this.OpenNewExcel(iSheetsCount);
} //导入文件头
if (HasHead == true)
{
//实例化数据缓冲
aDataBuffer = new string[1, Data.Columns.Count];
//准备数据
for (int i = 0; i < Data.Columns.Count; i++)
{
aDataBuffer[0, i] = Data.Columns[i].ColumnName;
} //把缓冲区的数据写入到Excel
WriteDataToRange((Excel.Worksheet)excelWorkbook.Worksheets[1], aDataBuffer, LineBegin, ColumnBegin, HasBorder);
} //以Sheet为单位导出数据
for (int i = 0; i < iSheetsCount; i++)
{
//导出第i个数据的数据 //计算开始行和结束行
iPageLineBegin = i == 0 ? iDataLineBegin : 1;
iPageLineEnd = i < iSheetsCount - 1 ? iPageSize : Data.Rows.Count - i * iPageSize + iDataLineBegin - 1;
//计算数据开始行和结束行
iPageDataBegin = i == 0 ? 0 : i * iPageSize - iDataLineBegin + 1;
iPageDataEnd = iPageDataBegin + iPageLineEnd - iPageLineBegin + 1; //实例化数据缓冲
GC.Collect();
aDataBuffer = new string[iPageLineEnd - iPageLineBegin + 1, Data.Columns.Count]; //准备数据
for (int iRow = iPageDataBegin; iRow < iPageDataEnd; iRow++)
{
for (int iCol = 0; iCol < Data.Columns.Count; iCol++)
{
aDataBuffer[iRow - iPageDataBegin, iCol] = Data.Rows[iRow][iCol].ToString();
}
} //把缓冲区的数据写入到Excel
WriteDataToRange((Excel.Worksheet)excelWorkbook.Worksheets[i + 1], aDataBuffer, iPageLineBegin, ColumnBegin, HasBorder); //给sheet命名
((Excel.Worksheet)excelWorkbook.Worksheets[i + 1]).Name =
(Data.TableName.Equals("") == true ? "Data" : Data.TableName) + (i == 0 ? "" : i.ToString());
}
if (Print)//打印
excelApp.Workbooks[1].PrintOut(System.Reflection.Missing.Value, System.Reflection.Missing.Value, 1, false, PrinterName, false, true, "");
else
{
//获取真实文件名
strFileReadName = FileFullName.Substring(0, FileFullName.Length - 4) + ".xls"; //保存文件
if (System.IO.File.Exists(strFileReadName))
System.IO.File.Delete(strFileReadName);
this.excelApp.Workbooks[1].SaveCopyAs(strFileReadName);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.CloseExcel();
}
}
protected Excel.Application excelApp;//Excel Application对象
protected Excel.Workbook excelWorkbook;//Excel workbook对象
支持web及winform从DataTable导出到Excel。
生成速度很快。
准确判断数据类型,不会出现身份证转数值等上面提到的一系列问题。
如果单页条数大于65535时会新建工作表。
列宽自适应。
支持读取Excel。
调用方便,只一调用一个静态类就OK了 Excel的csv格式就是txt格式,你用记事本打开就明白了。
试试NPOI吧