C#导出涉及行列合并的复杂的Excel数据

一、导出数据格式

二、实现代码

  1  public ActionResult ExportFundDataToExcel(Guid taskid, string taskname)
  2         {
  3             var dt = ProjectFundCalculateService.getFundDataTabe(taskid);
  4             if (null == dt)
  5             {
  6                 return Fail("当前任务没有要导出的经费数据");
  7             }
  8             if (dt.Rows.Count < 1)
  9             {
 10                 return Fail("当前任务没有要导出的经费数据");
 11             }
 12             var fileHtml = new StringBuilder();
 13             fileHtml.Append("<table border=\"1\" style=\"table-layout:fixed;\" cellspacing=‘0‘ cellpadding=‘0‘>");
 14             fileHtml.Append("<tr>");
 15             fileHtml.Append("<td colspan=\"10\" style=\"font-size: 16px; font-family: 宋体; text-align: center; height: 30px;\">");
 16             fileHtml.AppendFormat(" <strong> {0}经费概算</strong>", taskname);
 17             fileHtml.Append("</td>");
 18             fileHtml.Append(" </tr>");
 19             fileHtml.Append("<tr>");
 20             fileHtml.Append(" <td colspan=\"10\" style=\"font-size: 16px; text-align: center; height: 30px;\">");
 21             fileHtml.Append(" 计费依据:四川省物价局、四川省财政厅《关于调整环境监测服务收费标准的函》(川价函〔2007〕6号)附件“四川省环境监测服务收费标准”。");
 22             fileHtml.Append(" </td>");
 23             fileHtml.Append(" </tr>");
 24             fileHtml.Append(" <tr>");
 25             fileHtml.Append(" <td colspan=\"8\"></td>");
 26             fileHtml.Append(" <td colspan=\"2\" style=\"text-align: center;font-size: 12px;\">单位:元</td>");
 27             fileHtml.Append(" </tr>");
 28             fileHtml.Append("<tr>");
 29             for (int i = 0; i < dt.Columns.Count; i++)
 30             {
 31                 fileHtml.AppendFormat("<td>{0}</td>", dt.Columns[i].ColumnName);
 32             }
 33             fileHtml.Append(" </tr>");
 34             int rowspan = 1;//要合并的列数
 35             string flag = "";//rowspan="$flag"的初始值,后面用rowspan替换
 36             for (var j = 0; j < dt.Rows.Count; j++)
 37             {
 38                 fileHtml.Append("<tr>");
 39                 if (dt.Rows[j][0].ToString() == "小计" || dt.Rows[j][0].ToString() == "监测费用合计" || dt.Rows[j][0].ToString() == "总计")
 40                 {
 41                     fileHtml.AppendFormat("<td colspan=\"2\" style=\"text-align: center;\">{0}</td>", dt.Rows[j][0]);
 42                     var sumtotal = dt.Rows[j][2].ToString();
 43                     if (dt.Rows[j][0].ToString() == "总计")
 44                     {
 45                         sumtotal = new EcanRMB().CmycurD(sumtotal) + "(¥" + sumtotal + "元)";
 46                     }
 47                     fileHtml.AppendFormat("<td colspan=\"8\" style=\"text-align: center;\"><strong>{0}</strong></td>", sumtotal);
 48                 }
 49                 else if (dt.Rows[j][0].ToString() == "报告编制费" || dt.Rows[j][0].ToString() == "车船费")
 50                 {
 51                     fileHtml.AppendFormat("<td colspan=\"2\" style=\"text-align: center;\">{0}</td>", dt.Rows[j][0]);
 52                     fileHtml.AppendFormat("<td colspan=\"7\" style=\"text-align: center;\">{0}</td>", dt.Rows[j][2]);
 53                     fileHtml.AppendFormat("<td style=\"text-align: center;\"><strong>{0}</strong></td>", dt.Rows[j][dt.Columns.Count - 1]);
 54                 }
 55                 else if (dt.Rows[j][1].ToString() == "人工费")
 56                 {
 57
 58                     rowspan++;
 59                     //人工费第一列默认合并
 60                     fileHtml.AppendFormat("<td style=\"text-align: center;\">{0}</td>", dt.Rows[j][1]);
 61                     fileHtml.AppendFormat("<td colspan=\"7\" style=\"text-align: center;\">{0}</td>", dt.Rows[j][2]);
 62                     fileHtml.AppendFormat("<td style=\"text-align: center;\">{0}</td>", dt.Rows[j][dt.Columns.Count - 1]);
 63
 64                     fileHtml.Replace("$" + flag, rowspan.ToString());
 65                     rowspan = 1;
 66                     flag = "";
 67
 68                 }
 69                 else
 70                 {
 71                     if (j > 0)
 72                     {
 73                         //如果当前列与上一列的值相等则合并,否则初始化rowspan和flag
 74                         if (dt.Rows[j][0].ToString() == dt.Rows[j - 1][0].ToString())
 75                         {
 76                             rowspan++;
 77                         }
 78                         else
 79                         {
 80                             fileHtml.Replace("$" + flag, rowspan.ToString());
 81                             if (rowspan > 1)
 82                             {
 83                                 rowspan = 1;
 84                                 flag = "";
 85                             }
 86                         }
 87                     }
 88                     for (var k = 0; k < dt.Columns.Count; k++)
 89                     {
 90                         if (k == 0 && rowspan == 1)
 91                         {
 92                             flag = dt.Rows[j][0].ToString();
 93                             fileHtml.AppendFormat("<td rowspan=\"${0}\" style=\"text-align: center;\">{1}</td>", flag, dt.Rows[j][k]);
 94                         }
 95                         else if (k == 0 && rowspan > 1)
 96                         {
 97                             fileHtml.Append("");
 98                         }
 99                         else
100                         {
101                             fileHtml.AppendFormat("<td style=\"text-align: center;\">{1}</td>", j, dt.Rows[j][k]);
102                         }
103                     }
104
105                 }
106                 fileHtml.Append("</tr>");
107
108             }
109             fileHtml.Append("</table>");
110             byte[] fileContents = Encoding.Default.GetBytes(fileHtml.ToString());
111             return File(fileContents, "application/ms-excel", taskname + ".xls");
112
113         }
时间: 2024-10-10 15:41:32

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

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

项目中设计的报表table设计的列数相对过多,当拖动下方的滚动条时无法对应表头所对应的列,因此在网上搜索了好一段日子,最后在网上找到了一些参考资料,然后总结归纳出兼容行列合并的固定表头demo. 多浏览器没有做太多测试,在ie6中已测试通过. 功能期待了很久今天终于找到解决的方式,总结到javaeye中方便日后查阅.实现方式可能还有更好的,希望有大牛路过,给我留点更好的实现例子作日后交流之用. 以下是相关的css Html代码   <style type="text/css"&g

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

#1.引入模块 import os import pandas as pd #2.取出指定目录下的全部excel文件路径 path="C:\\TEST" dirlist=[] for dirpath,dirname,filename in os.walk(path): for i in filename: dirlist.append(os.path.join(dirpath,i)) #3.创建一个df对象列表,并进行合并操作 dflist=[] for i in dirlist: d

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

(一) 接需求  :   需求相关   (贴图 ) 生成三核对文件 1.新增三核对菜单页面中,增加生成三核对文件功能按钮,弹窗可根据变电站.电压等级查询定值单. 2.定值单信息以表格形式展示,根据选择情况,生成三核对文件. 整体就是这样的一个需求,分sheet,合并单元格,设置各种单元格格式,要有序号. (二)吐槽 新手,什么都不会,同事直接给了这么一个僵硬的需求,哈哈我当时整个人都是懵逼的.一会总结说. (三)具体流程 全部代码,控制层,service,前台,全都贴在最下面. 1 数据库查询

java中的excel数据的导入和导出

Excel数据导出 技术:Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.POI为"Poor Obfuscation Implementation"的首字母缩写,意为"可怜的模糊实现". 用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件.Apache

Python合并多个Excel数据

安装模块 1.找到对应的模块  http://www.python-excel.org/ 2.用pip install 安装 pip install xlrdpip install XlsxWriter pip list查看 XlsxWriter示例 1 import xlsxwriter 2 3 # 创建一个工作簿并添加一个工作表 4 workbook = xlsxwriter.Workbook("demo.xlsx") 5 worksheet = workbook.add_work

解决Java POI导出海量Excel数据内存溢出

使用POI导出Excel数据的时候有两个方法可以创建WorkBook: HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx 当数据量超出65536条后,在使用HSSFWorkbook或XSSFWorkbook,程序会报OutOfMemoryError:Javaheap space内存溢出错误. 从POI 3.8版本开始,提供了一种基于XSSF的低内存占用的API,也就是SXS

jsp(servlet)使用poi导出excel数据文件

网站通过Excel导出数据已经成为各种网站的一个基本功能,下面就详细介绍下如何使用poi.jar方式来导出excel文件.具体步骤如下: 1.创建一个网站,下面我创建一个叫test的网站,然后将poi的jar包放入lib文件夹.我这里是下载链接poi-2.5.1.jar. 结构目录如下: 2.然后我们可以创建一个用来访问的jsp界面(主要是提交到servlet,可有可无) 代码如下: <%@ page language="java" import="java.util.

jQuery_easyUI 合并单元格 (DataGrid 数据表格)

<table id="dg" style="height:350px;z-index:-5555; " class="easyui-datagrid" rownumbers="true" data-options="fitColumns: true, iconCls: 'icon-edit', scrollbarSize:0, multiSort:true, remoteSort:true, paginatio

导出EXCEL数据时防止数值变科学计数的办法

网上有很多说法,最简单直接正确的做法是判断一下是否为数值以及长度,然后给单元格加上以下CSS即可: mso-generic-font-family:auto;   mso-font-charset:134;    mso-number-format:"\@";   mso-background-source:auto;   mso-pattern:auto; 这个办法我是从:http://www.cnblogs.com/joinger/articles/1322931.html 这个博