废话不多说,直接上代码

这是点击导出的事件函数,因为我是从前端获取的Table的json数据,所以需要转换一下,大家直接用查询出来的DataTable即可

         protected void bt_export_ServerClick(object sender, EventArgs e)
{
DataTable dt = updateInfo(datajson.Value);//将json数据转为DataTable
string content = getExcelContent(dt);
string css = ".setwidth{width:200px;}";//表格的样式,可自定义
string filename = DateTime.Now.ToString("yyyyMMddHHmmssfffff") + ".xls"; ExportToExcel(filename, content, css);//调用函数
}

然后是转换为DataTable

  public DataTable getDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("订单号", typeof(System.String));
dt.Columns.Add("提现时间", typeof(System.String));
dt.Columns.Add("提现人姓名", typeof(System.String));
dt.Columns.Add("提现人手机号码", typeof(System.String));
dt.Columns.Add("提现卡号", typeof(System.String));
dt.Columns.Add("提现银行", typeof(System.String));
dt.Columns.Add("账户余额", typeof(System.String));
dt.Columns.Add("提现金额", typeof(System.String));
dt.Columns.Add("手续费", typeof(System.String));
dt.Columns.Add("当前状态", typeof(System.String));
return dt;
} /// <summary>
/// json转换为DataTable
/// </summary>
/// <param name="json">需要转化的json格式字符串</param>
/// <returns></returns>
public DataTable updateInfo(string json)
{
DataTable dt = getDataTable();
System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
if (!string.IsNullOrEmpty(json))
{
object[] obj = (object[])jss.DeserializeObject(json);
Dictionary<string, object> dic;
DataRow dr;
foreach (object _obj in obj)
{
dr = dt.NewRow();
dt.Rows.Add(dr);
dic = (Dictionary<string, object>)_obj;
dr["订单号"] = dic["orderid"];
dr["提现时间"] = dic["createtime"];
dr["提现人姓名"] = dic["cname"];
dr["提现人手机号码"] = dic["cphone"];
dr["提现卡号"] = dic["cno"];
dr["提现银行"] = dic["cbkname"];
dr["账户余额"] = dic["userye"];
dr["提现金额"] = dic["ofee"];
dr["手续费"] = dic["sxfee"];
string status = "";
switch (dic["ostatus"].ToString())
{
case "":
status = "审核拒绝";
break;
case "":
status = "放款成功";
break;
case "":
status = "待审核";
break;
case "":
status = "审核通过";
break;
case "":
status = "放款失败";
break;
}
dr["当前状态"] = status;
}
}
return dt;
}

最后是实现流导出Excel

         private string getExcelContent(DataTable dt)
{
StringBuilder sb = new StringBuilder(); sb.Append("<table borderColor='black' border='1' >");
sb.Append("<thead><tr>");
/*for (int j = 0; j < dt.Columns.Count; j++)
{
sb.Append("<th class='setwidth' bgColor='#ccfefe'>" + dt.Columns[j].ColumnName + "</th>");
}*/
sb.Append("<th style='width:150px;' bgColor='#ccfefe'>订单号</th>");
sb.Append("<th style='width:110px;' bgColor='#ccfefe'>提现时间</th>");
sb.Append("<th style='width:80px;' bgColor='#ccfefe'>提现人姓名</th>");
sb.Append("<th style='width:110px;' bgColor='#ccfefe'>提现人手机号</th>");
sb.Append("<th style='width:140px;' bgColor='#ccfefe'>提现卡号</th>");
sb.Append("<th style='width:110px;' bgColor='#ccfefe'>提现银行</th>");
sb.Append("<th style='width:80px;' bgColor='#ccfefe'>账户余额</th>");
sb.Append("<th style='width:80px;' bgColor='#ccfefe'>提现金额</th>");
sb.Append("<th style='width:80px;' bgColor='#ccfefe'>手续费</th>");
sb.Append("<th style='width:70px;' bgColor='#ccfefe'>当前状态</th>");
sb.Append("</tr></thead>");
sb.Append("<tbody>");
DataRow[] myRow = dt.Select();
int i = ;
int cl = dt.Columns.Count;
foreach (DataRow row in myRow)
{
sb.Append("<tr>");
for (i = ; i < cl; i++)
{
if (i == || i == )
{//在Excel中以文本的格式显示
sb.Append("<td style=\"vnd.ms-excel.numberformat:@\">" + row[i].ToString() + "</td>");
}
else
{
sb.Append("<td>" + row[i].ToString() + "</td>");
}
}
sb.Append("</tr>");
}
sb.Append("</tbody></table>");
return sb.ToString();
} /// <summary>
/// 以流的形式,可以设置很丰富复杂的样式
/// </summary>
/// <param name="content">Excel中内容(Table格式)</param>
/// <param name="filename">文件名</param>
/// <param name="cssText">样式内容</param>
public static void ExportToExcel(string filename, string content, string cssText)
{
var res = HttpContext.Current.Response;
content = String.Format("<style type='text/css'>{0}</style>{1}", cssText, content); res.Clear();
res.Buffer = true;
res.Charset = "UTF-8";
res.AddHeader("Content-Disposition", "attachment; filename=" + filename);
res.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
res.ContentType = "application/ms-excel;charset=UTF-8";
res.Write(content);
res.Flush();
res.End();
}

在这里有个重点需要注意下,就是Excel的单元格格式

在这个时候,需要将数字格式转换为文本格式,也就是上面的代码块里的  style=\"vnd.ms-excel.numberformat:@\"

OK,至此,以流导出Excel便完成了,大家如果有什么意见,可以在下面留言,博主看到会回复大家的

asp.net以流导出Excel的更多相关文章

  1. ASP.NET Core 导入导出Excel xlsx 文件

    ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...

  2. ASP.NET Core导入导出Excel文件

    ASP.NET Core导入导出Excel文件 希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好 ...

  3. Asp.Net 使用Npoi导出Excel

    引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...

  4. ASP如何将table导出EXCEL表格

    网页导出excel表格非常常用,对于一些加载<table>的数据网页,经常会用到这种功能,下面和大家分享一下ASP如何导出EXCEL表格 工具/原料   ASP编辑器 方法/步骤     ...

  5. asp.net 控件 导出 excel

    //导出EXCEL protected void btnDaoChu_Click(object sender, EventArgs e) { HttpContext.Current.Response. ...

  6. asp.net webform/mvc导出Excel通用代码

    最近将自己在项目中经常用到的excel导出方法分析如下,如有不妥之处望他人指出,如果有更好的方法希望展示出来互相学习. //导出事件 protected void btnexcel_Click(obj ...

  7. Asp.net MVC NPOI导出Excel

    public class NpoiMemoryStream : MemoryStream { public NpoiMemoryStream() { AllowClose = true; } publ ...

  8. asp.net——XML格式导出Excel

    下面介绍一种导出Excel的方法: 此方法不需要在服务器上安装Excel,采用生成xml以excel方式输出到客户端,可能需要客户机安装excel,所以也不会有乱七八糟的权限设定,和莫名其妙的版本问题 ...

  9. 【ASP.NET】DataTable导出EXCEL,弹窗提示下载保存(完整代码)

    //新建ASPX protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); Data ...

随机推荐

  1. ArrayList源码解析(二)

    欢迎转载,转载烦请注明出处,谢谢. https://www.cnblogs.com/sx-wuyj/p/11177257.html 自己学习ArrayList源码的一些心得记录. 继续上一篇,Arra ...

  2. echarts折线图动态改变数据时的一个bug

    echarts折线图中当增加dataZoom,修改start大于0的时候,会出现折线混乱,变成竖直的线,绘制有问题. 解决方法,在dataZoom中增加filterMode: 'empty' http ...

  3. Python 常见异常类型

    python标准异常 异常名称                                   描述 BaseException                         所有异常的基类Sy ...

  4. Unity混合天空盒

    对于不同天气下天空盒的实现. 天空盒时通过天空盒材质更改实现的,新建材质,选择shader/skybox/6sided,然后添加六个天空盒贴图就可以实现天空盒,如果想实现天气变化则需要至少两套贴图,并 ...

  5. fenby C语言 P28

    #include <stdio.h> int main(){ int *p1,*p2,a=10,b=20,c; p1=&a; p2=&b; if(a<b) { c=a ...

  6. SpringBoot整合Mybatisplus3.x之CRUD(一)

    pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...

  7. leetcode算法小题(2)

    题目描述: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. package Simple;import java.util.Scanner;public class Prac ...

  8. 【XSY2505】tree

    Description 机房断网了!xj轻而易举地撬开了中心机房的锁,拉着zwl走了进去.他们发现中心主机爆炸了. 中心主机爆炸后分裂成了 n 块碎片,但碎片仍然互相连接,形成一个树的结构.每个碎片有 ...

  9. 学习笔记12JS异步请求

    *一般用JS来监听按钮事件,都应该先监听页面OnLoad事件. *Js写在哪里,就会在页面解析到哪里执行. 异步请求:所谓异步请求,就是使用JS来监听按钮点击事件,并且发送请求,等到回复后,再使用JS ...

  10. Oracle“ORA-00911: 无效字符”解决方式

    在工作中碰到ORA-00911:无效字符的问题, 代码如下: <select id="querySendMsg" parameterType="map" ...