数据的动态合并和导出至EXCEL
最近一段时间都在处理数据的动态合并和导出EXCEL的问题,写个demo记录下,希望和我碰到同样问题的博友可以顺利解决;后面会提供demo下载链接。
(VS2012,ASP.NET)
一、主要解决以下问题:
1、根据业务逻辑动态合并table单元格
2、动态合并后序号重写
3、datatable导出excel
4、datatable导出excel特殊字符处理
5、在实际问题中可能还有少许BUG,自行调试
二、重要代码摘录:
1、前台获取table HTML代码:
<input type="hidden" runat="server" id="lblTableHtml" />
function getDataHtml() {
var table = document.getElementById("gridTable");
if (table != null) {
var html = table.innerHTML;
document.getElementById("lblTableHtml").value = html;
}
}
2、自定义合并单元格:
// 1、通过关联字段分组
for (int i = gridTable.Rows.Count - ; i > ; i--)
{
HtmlTableCell oCell_previous = gridTable.Rows[i - ].Cells[];
HtmlTableCell oCell = gridTable.Rows[i].Cells[];
if (oCell_previous != null && oCell != null)
{
if (oCell.InnerText == oCell_previous.InnerText)
{
for (int j = ; j <= ; j++)
{
HtmlTableCell oCell_previousI = gridTable.Rows[i - ].Cells[j];
HtmlTableCell oCellI = gridTable.Rows[i].Cells[j];
if (oCell_previousI != null && oCellI != null)
{
oCell_previousI.RowSpan = (oCell_previousI.RowSpan == -) ? : oCell_previousI.RowSpan;
oCellI.RowSpan = (oCellI.RowSpan == -) ? : oCellI.RowSpan;
} oCellI.Visible = false;
oCell_previousI.RowSpan += oCellI.RowSpan;
}
}
}
}
3、导出EXCEL逻辑:
Response.Clear();
Response.ContentType = "application/vnd.ms-excel";
string excelname = sFileName + DateTime.Now.ToString("yyyyMMddHHmmss");
Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(excelname, System.Text.Encoding.UTF8) + ".xls");
this.EnableViewState = false;
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter writer = new System.Web.UI.HtmlTextWriter(oStringWriter);
System.Text.StringBuilder builder = new System.Text.StringBuilder();
builder.Append("<table border='1'>");
// 取出已经排好版的table
string sHtml = lblTableHtml.Value;
builder.Append(sHtml);
builder.Append("</table>");
writer.Write(builder.ToString());
writer.Close();
Response.Write(oStringWriter.ToString());
Response.End();
三、Demo下载链接:
http://files.cnblogs.com/files/zhaosx/ExcelExportDemo.zip
数据的动态合并和导出至EXCEL的更多相关文章
- vue中把table导出表格excel
1.首先下载2个js,我的百度网盘有 2.安装依赖 npm install -S file-saver xlsx(这里其实安装了2个依赖) npm install -D script-loader 3 ...
- Java实现PDF和Excel生成和数据动态插入以及导出
一.序言 Excel.PDF的导出.导入是我们工作中经常遇到的一个问题,刚好今天公司业务遇到了这个问题,顺便记个笔记以防下次遇到相同的问题而束手无策. 公司有这么两个需求: 需求一.给了一个表单,让把 ...
- java导出标题多行且合并单元格的EXCEL
场景:项目中遇到有需要导出Excel的需求,并且是多行标题且有合并单元格的,参考网上的文章,加上自己的理解,封装成了可自由扩展的导出工具 先上效果,再贴代码: 调用工具类进行导出: public st ...
- DataSet导出到Excel,并生成文件(C#实现,可合并行和列)
using System; using System.IO; using System.Data; using System.Reflection; using System.Diagnostics; ...
- C#开发---利用特性自定义数据导出到Excel
网上C#导出Excel的方法有很多.但用来用去感觉不够自动化.于是花了点时间,利用特性做了个比较通用的导出方法.只需要根据实体类,自动导出想要的数据 1.在NuGet上安装Aspose.Cells或 ...
- asp.net将数据导出到excel
本次应用datatable导出,若用gridview(假设gridview设为了分页显示)会出现只导出当前页的情况. protected void btnPrn_Click(object sender ...
- JAVA实现数据库数据导入/导出到Excel(POI)
准备工作: 1.导入POI包:POI下载地址http://mirrors.tuna.tsinghua.edu.cn/apache/poi/release/src/(重要) 如下 2.导入Java界面美 ...
- Delphi 数据导出到Excel
好多办公软件特别是财务软件,都需要配备把数据导出到Excel,下面就来介绍两种数据导出方法 1.ADODB导出查询结果(此方法需要安装Excel) 2.二维表数据导出(根据Excel文件结构生成二进制 ...
- 树结构关系的数据导出为excel
该文针对的是关于树结构的数据的导出,每一个节点都可以创建不定数的子节点,在选择好某个节点进行导出 时,会把该节点以及子节点的数据都导出来.导出后的excel的格式大概如下图的形式,这个是一个比较理想 ...
随机推荐
- 【Java】java基本知识
1.int与Integer的区别 int是基本数据类型,Integer是一个引用数据类型. e.g: int num = 100; // 不是对象 Integer i = 100; // 是对象 // ...
- Android Studio 运行、编译卡死的解决办法
Android stuido作为google主推的IDE,配合gradle编译,有很多的优点和便捷性.唯一使用过程中不舒服的地方就是莫名其妙的卡顿,经常在Gradle Build的时候卡死强制重启电脑 ...
- Haskell缩进规则
Haskell也是使用缩进来表示一个表达式或者块延伸的范围的,这点与Python类似.Haskell的缩进规则简单总结起来只用下面三条: 1. 源文件中第一个顶级的定义或者声明的缩进,定义了该文 ...
- IP分片和TCP分片 MTU和MSS(转)
IP分片和TCP分片 MTU和MSS(转) 访问原文:http://blog.csdn.net/keyouan2008/article/details/5843388 1,MTU(Maximum Tr ...
- bzoj2809
可以先穷举那个是管理者,然后就发现其实就是求每个子树选尽可能多的人,使薪水和小于m这显然是从小往大选,可以用启发式合并但是用主席树写的更简单一点吧,dfs序之后每课线段树不仅维护出现出现个数,然后在维 ...
- VM Depot 镜像新增系列II – 学习管理系统,内容管理系统以及平台管理工具
发布于 2014-06-23 作者 刘 天栋 继上周企业管理软件和电子商务镜像的加盟之后,我们看到又有一批内容管理解决方案(CMS),学习管理解决方案(LMS)以及平台管理工具 (如 Open ...
- 最大流算法---Edmond-Karp
这个算法是基于FF方法,就是通过不断求残余网络的增广路来增广流量,直到找不到增广路为止.注意:每次找到增广路以后都要更新原网络.EK算法通过BFS寻找源S到汇T的一条最短路径,因此时间复杂度是O(VE ...
- http 协议的过程
当你输入某个网址的时候发生了什么? 首先:你该知道 a.http协议是应用层协议,他是浏览器像服务器请求网页,服务器返回网页的过程,他是基于tcp协议的. 1.假设随便输入输入域名 http://ww ...
- 3D FPS游戏中Player摄像机的运动
最近遇到一些类似3D FPS的game play.针对这里面Player摄像机的运动的问题,随便总结一些东西以备参考.首先,对问题做一些的假设: Player摄像机在多数情况下在场景中的位置是固定的, ...
- Error: rpmdb open failed
yumrpmdb: Thread/process 17132/140266190264064 failed: Thread died in Berkeley DB l ...