C#导出涉及行列合并的复杂的Excel数据
一、导出数据格式
二、实现代码
/// <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数据的更多相关文章
- python-利用xlrd模块中读取有合并单元格的excel数据
前言 对于excel中有合并单元格的情况,合并的单元格只能取到第一个单元格的值,合并的单元格后面的单元格内容的值为空,针对这个情况,写了下面一段代码实现, 对单元格进行判断,如果是传入的索引是合并单元 ...
- flask使用tablib导出excel数据表
在网页中常常有导出数据的需求,尤其是一下管理类平台.在flask中要导出excel数据表,通常可以使用xlwt库,创建文件并逐行写入数据,但是使用起来总是感觉很麻烦.tablib库相对操作更加方便. ...
- css控制固定表头,兼容行列合并
项目中设计的报表table设计的列数相对过多,当拖动下方的滚动条时无法对应表头所对应的列,因此在网上搜索了好一段日子,最后在网上找到了一些参考资料,然后总结归纳出兼容行列合并的固定表头demo. 多浏 ...
- 利用os和pandas来合并当前目录下所有excel文件
#1.引入模块 import os import pandas as pd #2.取出指定目录下的全部excel文件路径 path="C:\\TEST" dirlist=[] fo ...
- OpenXml Excel数据导入导出(含图片的导入导出)
声明:里面的很多东西是基于前人的基础上实现的,具体是哪些人 俺忘了,我做了一些整合和加工 这个项目居于openxml做Excel的导入导出,可以用OpenXml读取Excel中的图片 和OpenXml ...
- (ssh整合web导出excel)在ssh框架中使用poi正确导出具有比较高级固定格式的excel 整体过程,查询导出前后台下载
(一) 接需求 : 需求相关 (贴图 ) 生成三核对文件 1.新增三核对菜单页面中,增加生成三核对文件功能按钮,弹窗可根据变电站.电压等级查询定值单. 2.定值单信息以表格形式展示,根据选择 ...
- Python合并多个Excel数据
安装模块 1.找到对应的模块 http://www.python-excel.org/ 2.用pip install 安装 pip install xlrdpip install XlsxWrite ...
- java实现Excel数据导出
java实现Excel数据导出: 目前,比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel Jakarta POI 是一套用于访问微软格式文档的Java ...
- 利用PHPExcel 实现excel数据的导入导出(源码实现)
利用PHPExcel 实现excel数据的导入导出(源码实现) 在开发过程中,经常会遇到导入导出的需求,利用phpexcel类实现起来也是比较容易的,下面,我们一步一步实现 提前将phpexcel类下 ...
随机推荐
- MySQL大小写补坑记
背景:由于项目开始时数据库设计经验不足,数据库名和部分数据表名都含有大写字母.但问题是,Linux上数据库名和表名是区分大小写的,而Windows上是不区分大小写的.结果就是在看本地的数据库的时候,对 ...
- C#软件设计——小话设计模式原则之:接口隔离原则ISP
前言:有朋友问我,设计模式原则这些东西在园子里都讨论烂了,一搜一大把的资料,还花这么大力气去整这个干嘛.博主不得不承认,园子里确实很多这方面的文章,并且不乏出色的博文.博主的想法是,既然要完善知识体系 ...
- 点击按钮后到底发生了什么,Touch,LongClick或者Click?
按钮点击事件详解 最近一个项目需要给应用初始界面上的动态按钮添加在不同状态的变换效果,如点击(俗一点也可称为按压)后实现背景图的更换或者图标的缩放等效果.由于按钮点击的时间有长有短,所以采用OnTou ...
- CSS基本知识6-CSS字体
首先要考虑的是文本的排版,实际上有这玩意,Word还需要吗?不需要了.我们列下文本所涉及的操作: CSS 文本属性 属性 描述 color 设置文本颜色 direction 设置文本方向. line- ...
- Spark在Ubuntu中搭建开发环境
一.在Windows7中安装Ubuntu双系统 工具/原料 windows7 64位 ubuntu 16.04 32位 UltraISO最新版(用来将镜像文件烤到U盘中) 空U盘(若有文件,请先备 ...
- 数据存储单位的换算关系(TB、PB、EB、ZB、YB)
- react.js 生命周期componentDidUpdate的另类用法:防止页面过渡刷新
场景:数据新增成功之后,需要返回原来的查询表,这时候的查询,需要使用react的生命周期:componentDidUpdate componentDidUpdate() 这个生命周期的作用是当prop ...
- C#-WinForm-Winform TextBox中只能输入数字的几种常用方法(C#)
方法一: private void tBox_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 0x20) e.KeyCh ...
- java异常
java之异常 认识java中的异常: 有过编程经历的人都会知道,出错在编写程序时,是再正常不过的事,当运行程序时,每次看到那个程序出错时,都会觉得心塞,但是最让人心塞的事情往往是——程序运行的结果和 ...
- 表格不被内容撑大,且超出的内容变为省略号(css)
今天写代码,发现表格会被内容撑大,影响到了网页的整体布局. 百度了一解决方法,下面是代码和我的备注 table{table-layout: fixed;} //固定表格 table td ...