一、导出数据格式

二、实现代码

        /// <summary>
/// 导出经费统计excel表格
/// </summary>
/// <param name="taskid"></param>
/// <param name="taskname"></param>
/// <returns></returns>
public ActionResult ExportFundDataToExcel(Guid taskid, string taskname)
{
var fileHtml = getFundDataCollect(taskid, taskname);
if (fileHtml == "当前任务没有要导出的经费数据")
{
return Fail(fileHtml);
}
byte[] fileContents = Encoding.Default.GetBytes(fileHtml);
return File(fileContents, "application/ms-excel", taskname + ".xls");
} /// <summary>
/// 获取经费统计html表格
/// </summary>
/// <param name="taskid"></param>
/// <param name="taskname"></param>
/// <returns></returns>
public string getFundDataCollect(Guid taskid,string taskname)
{
var dt = ProjectFundCalculateService.getFundDataTabe(taskid);
if (null == dt)
{
return "当前任务没有要导出的经费数据";
}
if (dt.Rows.Count < )
{
return "当前任务没有要导出的经费数据";
}
var fileHtml = new StringBuilder();
fileHtml.Append("<table border=\"1\" style=\"table-layout:fixed;\" cellspacing='0' cellpadding='0'>");
fileHtml.Append("<tr>");
fileHtml.Append("<td colspan=\"10\" style=\"font-size: 16px; font-family: 宋体; text-align: center; height: 30px;\">");
fileHtml.AppendFormat(" <strong> {0}经费概算</strong>", taskname);
fileHtml.Append("</td>");
fileHtml.Append(" </tr>");
fileHtml.Append("<tr>");
fileHtml.Append(" <td colspan=\"10\" style=\"font-size: 16px; text-align: center; height: 30px;\">");
fileHtml.Append(" 计费依据:四川省物价局、四川省财政厅《关于调整环境监测服务收费标准的函》(川价函〔2007〕6号)附件“四川省环境监测服务收费标准”。");
fileHtml.Append(" </td>");
fileHtml.Append(" </tr>");
fileHtml.Append(" <tr>");
fileHtml.Append(" <td colspan=\"8\"></td>");
fileHtml.Append(" <td colspan=\"2\" style=\"text-align: center;font-size: 12px;\">单位:元</td>");
fileHtml.Append(" </tr>");
fileHtml.Append("<tr>");
for (int i = ; i < dt.Columns.Count; i++)
{
fileHtml.AppendFormat("<td>{0}</td>", dt.Columns[i].ColumnName);
}
fileHtml.Append(" </tr>");
int rowspan = ;//要合并的列数
string flag = "";//rowspan="$flag"的初始值,后面用rowspan替换
for (var j = ; j < dt.Rows.Count; j++)
{
fileHtml.Append("<tr>");
if (dt.Rows[j][].ToString() == "小计" || dt.Rows[j][].ToString() == "监测费用合计" || dt.Rows[j][].ToString() == "总计")
{
fileHtml.AppendFormat("<td colspan=\"2\" style=\"text-align: center;\">{0}</td>", dt.Rows[j][]);
var sumtotal = dt.Rows[j][].ToString();
if (dt.Rows[j][].ToString() == "总计")
{
sumtotal = new EcanRMB().CmycurD(sumtotal) + "(¥" + sumtotal + "元)";
}
fileHtml.AppendFormat("<td colspan=\"8\" style=\"text-align: center;\"><strong>{0}</strong></td>", sumtotal);
}
else if (dt.Rows[j][].ToString() == "报告编制费" || dt.Rows[j][].ToString() == "车船费")
{
fileHtml.AppendFormat("<td colspan=\"2\" style=\"text-align: center;\">{0}</td>", dt.Rows[j][]);
fileHtml.AppendFormat("<td colspan=\"7\" style=\"text-align: center;\">{0}</td>", dt.Rows[j][]);
fileHtml.AppendFormat("<td style=\"text-align: center;\"><strong>{0}</strong></td>", dt.Rows[j][dt.Columns.Count - ]);
}
else if (dt.Rows[j][].ToString() == "人工费")
{ rowspan++;
//人工费第一列默认合并
fileHtml.AppendFormat("<td style=\"text-align: center;\">{0}</td>", dt.Rows[j][]);
fileHtml.AppendFormat("<td colspan=\"7\" style=\"text-align: center;\">{0}</td>", dt.Rows[j][]);
fileHtml.AppendFormat("<td style=\"text-align: center;\">{0}</td>", dt.Rows[j][dt.Columns.Count - ]); fileHtml.Replace("$" + flag, rowspan.ToString());
rowspan = ;
flag = ""; }
else
{
if (j > )
{
//如果当前列与上一列的值相等则合并,否则初始化rowspan和flag
if (dt.Rows[j][].ToString() == dt.Rows[j - ][].ToString())
{
rowspan++;
}
else
{
fileHtml.Replace("$" + flag, rowspan.ToString());
if (rowspan > )
{
rowspan = ;
flag = "";
}
}
}
for (var k = ; k < dt.Columns.Count; k++)
{
if (k == && rowspan == )
{
flag = dt.Rows[j][].ToString();
fileHtml.AppendFormat("<td rowspan=\"${0}\" style=\"text-align: center;\">{1}</td>", flag, dt.Rows[j][k]);
}
else if (k == && rowspan > )
{
fileHtml.Append("");
}
else
{
fileHtml.AppendFormat("<td style=\"text-align: center;\">{1}</td>", j, dt.Rows[j][k]);
}
} }
fileHtml.Append("</tr>"); }
if (rowspan > )
{
fileHtml.Replace("$" + flag, rowspan.ToString());
}
fileHtml.Append("</table>");
return fileHtml.ToString();
}

C#导出涉及行列合并的复杂的Excel数据的更多相关文章

  1. python-利用xlrd模块中读取有合并单元格的excel数据

    前言 对于excel中有合并单元格的情况,合并的单元格只能取到第一个单元格的值,合并的单元格后面的单元格内容的值为空,针对这个情况,写了下面一段代码实现, 对单元格进行判断,如果是传入的索引是合并单元 ...

  2. flask使用tablib导出excel数据表

    在网页中常常有导出数据的需求,尤其是一下管理类平台.在flask中要导出excel数据表,通常可以使用xlwt库,创建文件并逐行写入数据,但是使用起来总是感觉很麻烦.tablib库相对操作更加方便. ...

  3. css控制固定表头,兼容行列合并

    项目中设计的报表table设计的列数相对过多,当拖动下方的滚动条时无法对应表头所对应的列,因此在网上搜索了好一段日子,最后在网上找到了一些参考资料,然后总结归纳出兼容行列合并的固定表头demo. 多浏 ...

  4. 利用os和pandas来合并当前目录下所有excel文件

    #1.引入模块 import os import pandas as pd #2.取出指定目录下的全部excel文件路径 path="C:\\TEST" dirlist=[] fo ...

  5. OpenXml Excel数据导入导出(含图片的导入导出)

    声明:里面的很多东西是基于前人的基础上实现的,具体是哪些人 俺忘了,我做了一些整合和加工 这个项目居于openxml做Excel的导入导出,可以用OpenXml读取Excel中的图片 和OpenXml ...

  6. (ssh整合web导出excel)在ssh框架中使用poi正确导出具有比较高级固定格式的excel 整体过程,查询导出前后台下载

    (一) 接需求  :   需求相关   (贴图 ) 生成三核对文件 1.新增三核对菜单页面中,增加生成三核对文件功能按钮,弹窗可根据变电站.电压等级查询定值单. 2.定值单信息以表格形式展示,根据选择 ...

  7. Python合并多个Excel数据

    安装模块 1.找到对应的模块  http://www.python-excel.org/ 2.用pip install 安装 pip install xlrdpip install XlsxWrite ...

  8. java实现Excel数据导出

    java实现Excel数据导出: 目前,比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel Jakarta POI 是一套用于访问微软格式文档的Java ...

  9. 利用PHPExcel 实现excel数据的导入导出(源码实现)

    利用PHPExcel 实现excel数据的导入导出(源码实现) 在开发过程中,经常会遇到导入导出的需求,利用phpexcel类实现起来也是比较容易的,下面,我们一步一步实现 提前将phpexcel类下 ...

随机推荐

  1. [CareerCup] 17.2 Tic Tac Toe 井字棋游戏

    17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...

  2. 跨域的另一种解决方案——CORS(Cross-Origin Resource Sharing)跨域资源共享

    在我们日常的项目开发时使用AJAX,传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片 ...

  3. 栈的理解以及如何计算程序所需栈的大小并在IAR中设置栈

    文章首发于浩瀚先森博客 #栈的理解 一个程序大体上讲都是由变量和函数组合而成,变量有全局变量和局部变量,还有函数间传值的参数以及返回值. Stack是为了程序运行过程中临时保存所需数据而在内存里分配的 ...

  4. 【JavaScript】图片上传预览

    上传文件实时显示[一张图片]: 个人理解:给img的src传值:这个值就是input[type='file']的value: 不过你要判断浏览器类型[很多]:IE6.0,IE7/8/9,Fixfox7 ...

  5. JavaScript中map函数和filter的简单举例(转)

    js的数组迭代器函数map和filter,可以遍历数组时产生新的数组,和python的map函数很类似1)filter是满足条件的留下,是对原数组的过滤:2)map则是对原数组的加工,映射成一一映射的 ...

  6. 基于Spring4+Hibernate4的通用数据访问层+业务逻辑层(Dao层+Service层)设计与实现!

    基于泛型的依赖注入.当我们的项目中有很多的Model时,相应的Dao(DaoImpl),Service(ServiceImpl)也会增多. 而我们对这些Model的操作很多都是类似的,下面是我举出的一 ...

  7. bzoj3110

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 5881  Solved: 1958[Submit][Sta ...

  8. 关于XML序列化与CultureInfo

    不同的计算机系统可能有着不同的CultureInfo,例如在中文环境下日期通常这样显示03/30/2016,而在有的操作系统下它可能是这样的30.3.2016. 这样的话带来一个问题,例如在中文环境下 ...

  9. css 拾遗

    1, 实现尖角 <style> .up{ border-top: 30px solid red; border-right:30px solid gold; border-bottom:3 ...

  10. 让你Android开发更简单

    转载:http://www.jianshu.com/p/22ff8b5fdadc 搭建一个新的Android项目,你会怎么做? 每个人对应用框架的理解不相同,但是最终达到的效果应该是一样: ①降低项目 ...