1.从数据查出数据扔进table中:

private DataTable getTable()
{
var dbHelper = applyBLL.CreateDataBase("VISAdoDb");
StringBuilder SB = new StringBuilder();
SB.AppendFormat("Select ApplyForID,Applicants,CardNo from VIS_ApplyFor where iState = 0 and (ApplyState ='B01')");
DbCommand cmd = dbHelper.GetSqlStringCommand(SB.ToString());
DataSet DTab = dbHelper.ExecuteDataSet(cmd); if (DTab != null && DTab.Tables != null && DTab.Tables.Count > 0 && DTab.Tables[0].Rows.Count > 0)
{
DataTable dt = DTab.Tables[0];
return dt;
}
else
{
return new DataTable();
}
}
2.用xml文件定义要输出的表头元素: string xml = string.Empty; xml = "../../../App_Data/Configs_Pages/HDDXReportAuth.xml";
Dictionary<string, string> dict = Common.XMLHelper.GetDictionaryByXML(xml); xml文件: <?xml version="1.0" encoding="utf-8" ?>
<ExcelDict Remark="核对对象导出名单">
<Field Name="ApplyForID" Value="主键" Visible="False"></Field>
<Field Name="Applicants" Value="申请人姓名"></Field>
<Field Name="CardNo" Value="证件号码"></Field>
</ExcelDict> 3.最关键的一步,将model对象转换为excel bool i = ModelToExcel.ExExcel(dt, "核对对象导出名单", dict, false, "", ref result); /// <summary>
/// 将一组对象导出成EXCEL
/// </summary>
/// <typeparam name="T">要导出对象的类型</typeparam>
/// <param name="objList">一组对象</param>
/// <param name="FileName">导出后的文件名</param>
/// <param name="columnInfo">列名信息</param>
/// <param name="IsExTotal">是否导出合计信息</param>
/// <param name="TotalMess">合计信息字符串</param>
public static bool ExExcel(DataTable objList, string FileName, Dictionary<string, string> columnInfo, bool IsExTotal, string TotalMess, ref string result)
{
FileName = FileName + "_" + DateTime.Now.ToString("yyyyMMddHH");
if (columnInfo.Count == 0)
{
//OutputResult(false, "请联系管理员,系统配置有问题!");
result = "请联系管理员,系统配置有问题!";
return false;
}
if (objList.Rows.Count == 0)
{
//OutputResult(false, "没有查询到数据");
result = "没有查询到数据";
return false;
} string TmepUrl = "Temp/" + DateTime.Now.ToString("yyyyMMddhhmmss") + "/";
string path = System.Web.HttpContext.Current.Server.MapPath("~/" + TmepUrl);
if (!Directory.Exists(path)) //如果文件夹不存在则创建
{
Directory.CreateDirectory(path);
}
if (!File.Exists(path + FileName + ".xls"))
{
//使用File.Create创建再复制/移动/删除时会提示:文件正由另一进程使用,因此该进程无法访问该文件
//改用 FileStream或StreamWriter 获取 File.Create 返回的 System.IO.FileStream 再进行关闭就无此问题
using (FileStream sw = new FileStream(path + FileName + ".xls", FileMode.Create))
{
}
} //生成EXCEL的HTML
System.Text.StringBuilder excelStr = new System.Text.StringBuilder();
excelStr.Append("<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">");
excelStr.Append("<tr style=\"height:50px; font-weight:bold;font-size:20pt\" align=\"center\">");
excelStr.Append("<td colspan='" + Convert.ToString(columnInfo.Count + 1) + "'>");
excelStr.Append(FileName);
excelStr.Append("</td>");
excelStr.Append("</tr>");
//是否导出合计信息
if (IsExTotal)
{
excelStr.Append("<tr style=\"height:30px;\" align=\"right\">");
excelStr.Append("<td colspan='" + Convert.ToString(columnInfo.Count + 1) + "'>");
excelStr.Append(TotalMess);
excelStr.Append("</td>");
excelStr.Append("</tr>");
} //Type myType = objList.Columns.GetType();
//根据反射从传递进来的属性名信息得到要显示的属性
List<DataColumn> myPro = new List<DataColumn>();
excelStr.Append("<tr style=\"height:30px;\">");
excelStr.Append("<td>序号</td>");
foreach (string cName in columnInfo.Keys)
{
DataColumn p = objList.Columns[cName]; //myType.GetProperty(cName);
if (p != null)
{
myPro.Add(p);
excelStr.Append("<td>");
excelStr.Append(columnInfo[cName]);
excelStr.Append("</td>");
}
}
excelStr.Append("</tr>");
//如果没有找到可用的属性则结束
if (myPro.Count == 0) { result = "请联系管理员,系统配置有问题!"; return false; }
int index = 0;
foreach (DataRow obj in objList.Rows)
{
excelStr.Append("<tr style=\"height:30px;\">");
excelStr.Append("<td style=\"vnd.ms-excel.numberformat:@\" >" + (++index).ToString() + "</td>");
foreach (DataColumn p in myPro)
{
excelStr.Append("<td style=\"vnd.ms-excel.numberformat:@\" >");
object value = obj[p.ColumnName];
if (p.DataType.Name.ToLower() == "datetime")
{
value = (value == null || string.IsNullOrEmpty(value.ToString())) ? "" : ((DateTime)value).ToString("yyyy-MM-dd");
}
else if(p.DataType.Name.ToLower()=="decimal"){
value = (value == null || string.IsNullOrEmpty(value.ToString())) ? "" : string.Format("{0:F2}", value);
}
excelStr.Append(value);
excelStr.Append("</td>");
} excelStr.Append("</tr>");
}
excelStr.Append("</table>");
//输出EXCEL
System.Text.StringBuilder ExportStr = new System.Text.StringBuilder();
ExportStr.Append("<html><head><META http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\"></head><body>");
ExportStr.Append(excelStr);
ExportStr.Append("</body></html>"); string Weburl = System.Web.HttpContext.Current.Request.ApplicationPath + TmepUrl + FileName + ".xls"; using (StreamWriter sw = new StreamWriter(path + FileName + ".xls", false, System.Text.Encoding.GetEncoding("utf-8")))
{
sw.Write(ExportStr);
sw.Close();
}
result = Weburl;
return true;
}
#endregion
}

  

ASP.NET列表信息以Excel形式导出的更多相关文章

  1. PHP中导出Excel,将数据以Excel形式导出

    现在,很多地方都需要导出数据,这里说一种简单的方法将数据以Excel的形式导出,方法如下: <?php date_default_timezone_set('PRC');//设置时区 /*设置h ...

  2. 数据以Excel形式导出导服务器,再将文件读取到客户端另存 以HSSFWorkbook方式实现

    public void exportExcel(List<P2pInfo> repayXist,HttpServletRequest request,HttpServletResponse ...

  3. Java将数据以Excel文件形式导出后台代码实现

    下面代码实现所需jar包: tomcat-embed-core-8.5.11.jar: commons-lang3-3.0.1.jar: commons-io-2.5.jar: poi-3.9.jar ...

  4. 【基于WinForm+Access局域网共享数据库的项目总结】之篇二:WinForm开发扇形图统计和Excel数据导出

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  5. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  6. ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码

    实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...

  7. 在ASP.NET Web Forms中使用页面导出伪xls Excel表格

    将数据导出为Excel表格是比较常见的需求,也有很多组件支持导出真正的Excel表格.由于Excel能打开HTML文件,并支持其中的table元素以及p之类的文本元素的显示,所以把.html扩展名改为 ...

  8. java导出excel 浏览器直接下载或者或以文件形式导出

    /** * excel表格直接下载 */ public static void exportExcelByDownload(HSSFWorkbook wb,HttpServletResponse ht ...

  9. 【微信公众号开发】【13】批量导出公众号所有用户信息到Excel

    前言: 1,一次拉取调用最多拉取10000个关注者的OpenID,当公众号关注者数量超过10000时,可通过填写next_openid的值,从而多次拉取列表的方式来满足需求 2,获取OpenID列表后 ...

随机推荐

  1. supervisor-2:event

    转载别人博客,做个记录 原文链接:http://lixcto.blog.51cto.com/4834175/1540169 supervisor的event机制其实,就是一个监控/通知的框架.抛开这个 ...

  2. JavaScript(三) 正则表达式 以及实现的功能

    RegExp 是正则表达式的缩写.定义RegExp正则表达式 RegExp 对象用于存储检索模式. 通过 new 关键词来定义 RegExp 对象.以下代码定义了名为 p 的 RegExp 对象,其模 ...

  3. Android Handler消息传递机制

    在Android系统中,类Handler主要有如下两个作用. 在新启动的线程中发送消息. 在主线程中获取.处理消息. 类Handler在实现上述作用时,首先在新启动的线程中发送消息,然后在主线程中获取 ...

  4. Apache Permission denied (httpd.conf配置和目录权限无问题)解决办法

    今天在CentOS5.9中配置zabbix时出现错误:Apache 403 error, (13)Permission denied: access to / denied 检查了一圈httpd.co ...

  5. leetcode 199 :Binary Tree Right Side View

    // 我的代码 package Leetcode; /** * 199. Binary Tree Right Side View * address: https://leetcode.com/pro ...

  6. 如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持

    一.什么是CEF CEF即Chromium Embeded Framework,由谷歌的开源浏览器项目Chromium扩展而来,可方便地嵌入其它程序中以得到浏览器功能. CEF包括CEF1和CEF3两 ...

  7. nodejs 单元测试

    之前项目开发因为改进度,基本都是粗放式开发.为了提高代码质量,单元测试是必不可少的. 针对restful api ,用supertest 测试框架.针对nodejs,引入mocha 和should 可 ...

  8. int.Parse()之异常

    首先对不起各位读者,我必须发泄一下,为了清明节能顺利的去洛阳玩,我周四赶出了一篇博客,就在快写完提交的时刻,11:30分断网了!!断网了!!断!!网!!了!!是的,你没有听错,他就这样毫无征兆的断网了 ...

  9. js知识点

    在变量复制方面,基本类型和引用类型也有所不同,基本类型复制的是值本身,而引用类型复制的是地址. 循环引用 一个很简单的例子:一个DOM对象被一个Javascript对象引用,与此同时又引用同一个或其它 ...

  10. js二进制与十进制互转

    十进制转换为二进制: var num = 100; console.log(num.toString(2)); toString()方法可把一个 Number 对象转换为一个字符串,并返回结果. 语法 ...