分享一下以前做的.net版本的Excel多表头导出,其中使用了第三方插件NPOI (java推荐使用POI)。

demo下载

以下是算法部分:

  public static string ExportTable(ArrayList data, ArrayList columns){ArrayList columnsBottom = getColumnsBottom(columns);ArrayList columnsTable = getColumnsTable(columns);StringBuilder sb = new StringBuilder();//data = ds.DataSetName + "\n";//data += tb.TableName + "\n";sb.AppendLine("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">");sb.AppendLine("<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">");//写出列名for (int i = 0; i < columnsTable.Count; i++){ArrayList columnsRow = (ArrayList)columnsTable[i];sb.AppendLine("<tr style=\"font-weight: bold; white-space: nowrap;\">");foreach (Hashtable column in columnsRow){sb.AppendLine("<td colspan=" + column["colspan"] + " rowspan=" + column["rowspan"] + ">" + column["header"] + "</td>");}sb.AppendLine("</tr>");}//写出数据int count = 0;foreach (Hashtable row in data){sb.Append("<tr>");foreach (Hashtable column in columnsBottom){Object value;if (column["field"] != null){value = row[column["field"]];}else{value = "";}if (Convert.ToString(column["type"]) == "indexcolumn") value = count + 1;sb.AppendLine("<td >" + value + "</td>");}sb.AppendLine("</tr>");count++;}sb.AppendLine("</table>");return sb.ToString();}public static ArrayList getColumnsBottom(ArrayList columns){ArrayList columnsBottom = new ArrayList();for (int i = 0; i < columns.Count; i++){Hashtable column = (Hashtable)columns[i];if (column["columns"] != null){ArrayList childColumns = (ArrayList)column["columns"];columnsBottom.AddRange(getColumnsBottom(childColumns));}else{columnsBottom.Add(column);}}return columnsBottom;}public static ArrayList getColumnsTable(ArrayList columns){ArrayList table = new ArrayList();getColumnsRows(columns, 0, table);createTableSpan(table);return table;}public static void getColumnsRows(ArrayList columns, int level, ArrayList table){ArrayList row = null;if (table.Count > level){row = (ArrayList)table[level];}else{row = new ArrayList();table.Add(row);}for (int i = 0; i < columns.Count; i++){Hashtable column = (Hashtable)columns[i];ArrayList childColumns = (ArrayList)column["columns"];row.Add(column);if (childColumns != null){getColumnsRows(childColumns, level + 1, table);}}}public static void createTableSpan(ArrayList table){for (int i = 0; i < table.Count; i++){ArrayList row = (ArrayList)table[i];  //rowfor (int l = 0; l < row.Count; l++){Hashtable cell = (Hashtable)row[l];   //columnint colSpan = getColSpan(cell);cell["colspan"] = colSpan;if (colSpan > 1){cell["rowspan"] = 1;}else{cell["rowspan"] = table.Count - i;}}}}public static int getColSpan(Hashtable column){int colSpan = 0;ArrayList childColumns = (ArrayList)column["columns"];if (childColumns != null){for (int i = 0; i < childColumns.Count; i++){Hashtable child = (Hashtable)childColumns[i];colSpan += getColSpan(child);}}else{colSpan = 1;}return colSpan;}

转载于:https://www.cnblogs.com/romayn/p/7275621.html

Excel多表头导出(.net)相关推荐

  1. java多表头导出excel表格_【每日一点】1. Java如何实现导出Excel单表头或多表头

    一.背景 在后台项目中,经常会遇到将呈现的内容导出到Excel的需求,通过都是导出单个表头的Excel文件,如果存在级联关系的情况下,也就需要导出多表头的场景.今天这篇文章就是分享导出Excel单表头 ...

  2. 基于layui 的数据表格复杂表头导出到excel文件中

    基于layui,js-xlsx的前台数据复杂表头导出到excel文件中 前言 : layui table 加载 layui 表头样式 4. 封装之后的sheet !cols !rows ! merge ...

  3. poi读取excel多层表头模板写入数据并导出

    poi读取excel多层表头模板写入数据并导出 这两天刚好写excel,写了一份自定义表头的,写了一份模板的,这里展示一份读取excel模板写入数据并导出的 //title excel的名称 head ...

  4. EasyExcel导入导出excel 复杂表头 表头校验 数据校验

    目录 EasyExcel特点 一.导入excel案例 二.读取excel的相关技术点 1.读取excel的方式 2.读取sheet数量 3.指定从第几行开始读数据 三.导出excel 1.前端发起请求 ...

  5. Java实现Excel多表头动态数据导出

    好久没时间写帖子了,由于工作需要,写一个基于JAVA实现的Excel多表头动态导出功能,首先可能这个叫法比较啰嗦,大家多担待下,下面我们先看看什么是Excel多表头动态导出(效果图): 它包含两部分: ...

  6. Vue用Export2Excel导出excel,多级表头数据

    VUE 使用Export2Excel导出数据,以及多级表头 最近公司做项目,需要导出数据到excel表格 使用到了 element UI ,Export2Excel 特此记录,毕竟好记性不如烂笔头 不 ...

  7. JAVA实现创建Excel表并导出(转发)

    JAVA实现创建Excel表并导出(转发) 最近在做毕设,要求导出word,excel,pdf,这是excel. 原文是:http://blog.csdn.net/u014621859/article ...

  8. java ajax 导出excel文件_springMVC(4)---生成excel文件并导出

    springMVC(4)---生成excel文件并导出 在开发过程中,需要将数据库中的数据以excel表格的方式导出. 首先说明.我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口, ...

  9. Excel表格导入导出功能实现

    ## 01.员工管理-Excel导入功能介绍 ### 目标 在前面员工的添加是一个一个进行的,如果一次性添加多个员工信息,这时候就会很繁琐 因此需要我们开发一个批量导入的功能,将用户的信息存储到 ex ...

最新文章

  1. SQLite.swift的简单使用
  2. iOS 一行命令发布 Pod 框架
  3. Tensorflow快速入门2--实现手写数字识别
  4. 《棋牌游戏服务器》玩法服务器架构
  5. 粉红噪音_粉红的常绿力量
  6. HTML5 canvas 阴影
  7. 当程序员说“这代码写的可真烂”,他们的意思是“这烂代码不是我写的”。而当他们说这段代码有些“小问题”时,很可能这代码是他们自己写的...
  8. Java笔记(二十) 注解
  9. ai人工智能软件_您应该了解的5家创新AI软件公司
  10. 百度网盘下载器更新啦!PanDownload又带来了「资源搜索」功能!
  11. led屏背后线路安装图解_LED屏安装工程施工方案
  12. 电力拖动自动控制系统matlab,基于Matlab的《电力拖动自动控制系统》课程教学改革...
  13. SNP基因数据质控调研
  14. Vue事件修饰符——.prevent 和.passive
  15. 51单片机基于Proteus的8X8点阵滚动显示心形
  16. 如何开通个人微信公众号(订阅号)
  17. 小程序开发外包需要注意哪些问题?
  18. 操作符有哪些?有什么用处?
  19. MT5正版白标搭建。MT5CRM源码出售。
  20. Bilibili Helper - 哔哩哔哩弹幕网辅助扩展插件

热门文章

  1. android 传输日期,Android 跟日期和时间有关的操作
  2. python 3.7.4 shell_centos7上Virtualenv从python3.4升级到Python3.7.4
  3. 数据挖掘技术之离群点检测
  4. final类是否可以被代理_Java 动态代理机制分析及扩展,第 2 部分
  5. 我的世界java致命错误_《我的世界》六个“致命错误”,最后一个“不作死就不会死”...
  6. snmp trap 如何在浏览器中_SNMP Trap的功能介绍
  7. 曼彻斯特编码_数据通信之数据编码
  8. 相机模型与标定(十一)--LMEDS,M估计,RANSAC估计对比
  9. 系统学习数字图像处理之灰度变换和空域滤波
  10. 纯新手DSP编程--5.30--DSP/BIOS线程