一、导出数据格式

二、实现代码

        /// <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. jquery取<input>的readOnly属性,O要大写

    今天在jquery中取input的readonly属性时,发现 我这样写$(“#input”).readonly取这个属性时,总是undefined,后来一想,难道html中的属性only没有大写,是 ...

  2. js下关于onmouseout、事件冒泡的问题经验小结

    问题是这样的:一个div元素要触发onmouseout事件,同时这个div内部还有子元素,于是当鼠标移动到该div的子元素上时,onmouseout事件也被触发了.在要做浮动层效果的时候会经常遇到这个 ...

  3. 跟我从零基础学习Unity3D开发--NGUI入门基础

    英雄联盟(撸啊撸) QQ飞车 魔兽世界等等相信大家都玩过游戏吧,玩过那UI知道是什么吧?UI可能说得有点专业的话那么游戏中那些属性面板例如: 现在对UI有一定认识了吧!回想一下您玩过的游戏就一定知道什 ...

  4. 剑指offer 面试题65 滑动窗口的最大值

    import java.awt.print.Printable; import java.beans.VetoableChangeListenerProxy; import java.lang.ref ...

  5. 在Vi里面实现字符串的批量替换

    在Vi里面实现字符串的批量替换. a. 文件内全部替换: %s#abc#def#g(用def替换文件中所有的abc) 例如把一个文本文件里面的"linuxidc.com"全部替换成 ...

  6. PE启动菜单修改工具 MsgDiyer(GfxMenu Message制作工具) V2.0.3官方版

    MsgDiyer基本功能  1.新建message文件.修改现有message文件:2.自定义背景图片:3.制作message字体,包括行高.大小等(目前不兼容WIN7):4.自定义字库:5.导入外置 ...

  7. BZOJ2818 Gcd

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  8. SDL 1.2.15 issue

    SDL 1.2.15中,对于X11的函数,默认采用动态加载的方式 但相应的X11函数名在SDL中并没有重新命名(SDL2中都添加了前缀X11_) 这样在SDL与其他库混合静态编译链接时,X11的函数就 ...

  9. How to setup vsftpd FTP file Server on Redhat 7 Linux

    Forward from: https://linuxconfig.org/how-to-setup-vsftpd-ftp-file-server-on-redhat-7-linux How to s ...

  10. sql中的!=判断的注意事项

    sql查询中where过滤条件为某字段 colName='xx'时一般不会出什么问题, 但如果想达到不为xx的时候就要注意了,用colName!= 'xx'可能就有问题了,因为该字段可能为空,为nul ...