不生成Excel文件,将Datatable数据 Response.write 输出生成Excel (转载)
2012-09-12 00:12
357 查看
不生成Excel文件,将Datatable数据 Response.write 输出生成Excel
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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 System.Text;
namespace ExeclSaveAS
{
public partial class _Default : System.Web.UI.Page
{
//可以输出到Excel,并显示正确。但是会有错误提示信息。不知哪位高手有无办法解决?
protected void Page_Load(object sender, EventArgs e)
{
//ShowExecl();//提示三次
DataTable1Excel();//只提示一次
}
private void ShowExecl()
{
DataTable dt = GetDataSource();
Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AppendHeader("Content-Disposition", "attachment;filename=ccc_mys.xls");
Response.ContentType = "application/ms-excel";
string colHeaders = "", ls_item = "";
//定义表对象与行对象,同时用DataSet对其值进行初始化
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);
Response.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";
}
}
Response.Write(ls_item);
ls_item = "";
}
Response.Flush();
Response.End();
}
/// <summary>
/// 数据源(这里给的数据源是一个Datatable )
/// </summary>
/// <returns></returns>
private DataTable GetDataSource()
{
DataTable newdata = new DataTable();
newdata.Columns.Add("ID");
newdata.Columns.Add("Name");
object [] OneRowValue=new object []{"1","AAAA"};
object[] TwoRowValue = new object[] { "2", "BBBBB" };
newdata.Rows.Add(OneRowValue);
newdata.Rows.Add(TwoRowValue);
return newdata;
}
/// <summary>
/// 只提示一次
/// </summary>
public void DataTable1Excel()
{
DataTable dtData = GetDataSource();
System.Web.UI.WebControls.GridView gvExport = null;
// 当前对话
System.Web.HttpContext curContext = System.Web.HttpContext.Current;
// IO用于导出并返回excel文件
System.IO.StringWriter strWriter = null;
System.Web.UI.HtmlTextWriter htmlWriter = null;
if (dtData != null)
{
// 设置编码和附件格式
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
curContext.Response.Charset = "utf-8";
// 导出excel文件
strWriter = new System.IO.StringWriter();
htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
// 为了解决gvData中可能进行了分页的情况,需要重新定义一个无分页的GridView
gvExport = new System.Web.UI.WebControls.GridView();
gvExport.DataSource = dtData.DefaultView;
gvExport.AllowPaging = true;
gvExport.DataBind();
// 返回客户端
gvExport.RenderControl(htmlWriter);
curContext.Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />" + strWriter.ToString());
curContext.Response.End();
}
}
}
}
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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 System.Text;
namespace ExeclSaveAS
{
public partial class _Default : System.Web.UI.Page
{
//可以输出到Excel,并显示正确。但是会有错误提示信息。不知哪位高手有无办法解决?
protected void Page_Load(object sender, EventArgs e)
{
//ShowExecl();//提示三次
DataTable1Excel();//只提示一次
}
private void ShowExecl()
{
DataTable dt = GetDataSource();
Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AppendHeader("Content-Disposition", "attachment;filename=ccc_mys.xls");
Response.ContentType = "application/ms-excel";
string colHeaders = "", ls_item = "";
//定义表对象与行对象,同时用DataSet对其值进行初始化
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);
Response.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";
}
}
Response.Write(ls_item);
ls_item = "";
}
Response.Flush();
Response.End();
}
/// <summary>
/// 数据源(这里给的数据源是一个Datatable )
/// </summary>
/// <returns></returns>
private DataTable GetDataSource()
{
DataTable newdata = new DataTable();
newdata.Columns.Add("ID");
newdata.Columns.Add("Name");
object [] OneRowValue=new object []{"1","AAAA"};
object[] TwoRowValue = new object[] { "2", "BBBBB" };
newdata.Rows.Add(OneRowValue);
newdata.Rows.Add(TwoRowValue);
return newdata;
}
/// <summary>
/// 只提示一次
/// </summary>
public void DataTable1Excel()
{
DataTable dtData = GetDataSource();
System.Web.UI.WebControls.GridView gvExport = null;
// 当前对话
System.Web.HttpContext curContext = System.Web.HttpContext.Current;
// IO用于导出并返回excel文件
System.IO.StringWriter strWriter = null;
System.Web.UI.HtmlTextWriter htmlWriter = null;
if (dtData != null)
{
// 设置编码和附件格式
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
curContext.Response.Charset = "utf-8";
// 导出excel文件
strWriter = new System.IO.StringWriter();
htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
// 为了解决gvData中可能进行了分页的情况,需要重新定义一个无分页的GridView
gvExport = new System.Web.UI.WebControls.GridView();
gvExport.DataSource = dtData.DefaultView;
gvExport.AllowPaging = true;
gvExport.DataBind();
// 返回客户端
gvExport.RenderControl(htmlWriter);
curContext.Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />" + strWriter.ToString());
curContext.Response.End();
}
}
}
}
相关文章推荐
- 不生成Excel文件,将Datatable数据 Response.write 输出生成Excel (转载)
- 转载:ASP.NET中上传并读取Excel文件数据,附后生成EXCEL及杀掉EXCEL进程。
- NPOI 2.1.1 系列(2) 使用NPOI读取List或者datatable数据生成 Excel文档 ;Npoi生成 xlsx 2007以上文档
- Net使用Microsoft.Office.Interop.Excel;创建Excel文件(插入数据、修改格式、生成图表)的方法,以及Excel查看加密
- Response.Write("Sucess!!")不能输出数据的解决方法
- C#输出DataTable数据到Excel文件
- C# DataTable数据导入Excel数据【转载经过本人测试修改】
- C# 将内存中的datatable数据导出为Excel(方法一,以文件流方式导出)【转载】
- C# 将内存中的datatable数据导出为Excel(方法二,创建Excel对象导出)【转载】
- 通过Response.write输出Excel时,乱码
- asp.net 生成导出word表单 ,导出excel; dataTable生成xls文件,返回前台下载;asp.net启动excel错误 80070005;excel-xls columnName 不能改变; 读写excel的开源利器NPOI; 设置excel Cell的数据类型;
- POI3.10读取Excel模板填充数据后生成新的Excel文件
- 通过response的write留输出数据的问题
- Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"\@"
- Excel随机生成数据2
- 用datatable导出数据到excel
- 【转载】将sqlserver表中的数据导出sql语句或生成insert into语句
- vb.net 二级联动 datatable生成json数据
- 利用DevExpress将DataTable数据导出到Excel
- LINQ方式 把DataTable的数据 生成全新的DataTable