import java.util.ArrayList;
import java.util.List; import org.apache.poi.ss.util.CellRangeAddress; public class Util { /**
* 获取 和并列 List 并截图有效参数
* @param lc
* @return
*/ public static List<String> getMergedString(List <CellRangeAddress> lc){
//创建一个字符串链表
List<String> ls = new ArrayList<String>();
//遍历链表去掉多余的符号
for(CellRangeAddress cra : lc){
ls.add(cra.toString().substring(40).replaceAll("\\[", "").replaceAll("\\]", ""));
}
//将链表中的数据导进数组当中以便遍历比较
String[] ls1 = new String[ls.size()]; for(int i=0 ;i<ls1.length;i++){
ls1[i] = ls.get(i);
} // for(String s :ls1){
// System.out.println(s);
// } for(int i=0; i<ls1.length;i++){
for(int j=i;j<ls1.length;j++){
if(ls1[i].charAt(0)>ls1[j].charAt(0)){
String temp = ls1[i];
ls1[i] = ls1[j];
ls1[j] = temp;
}
}
} for(int i=0; i<ls1.length;i++){
for(int j=i;j<ls1.length;j++){
if(Util.getTheRangeNumber(ls1[i])>Util.getTheRangeNumber(ls1[j])){
String temp = ls1[i];
ls1[i] = ls1[j];
ls1[j] = temp;
}
}
}
// for(String s :ls1){
// System.out.println(s);
// } List<String> ls2 = new ArrayList<String>(); for(int i=0 ;i<ls1.length;i++){
ls2.add(ls1[i]);
} return ls2; }
public static int getTheRangeNumber(String s){ String str = s.substring(1); String[] strArr = str.split("\\:"); int i = Integer.parseInt(strArr[0]); return i; } public static int getTheRangeNumber2(String s){ String str = s.substring(1); String[] strArr = str.split("\\:"); String str2 = strArr[1].substring(1); int i = Integer.parseInt(str2); return i; } public static boolean isMerged(int i,int column,List<String> ls){ char c = (char) (column+65); List<String> ls1 = new ArrayList<String>(); for(String s :ls){
if(c==s.charAt(0)){
ls1.add(s);
}
} for(String s:ls1){
if(i>Util.getTheRangeNumber(s)&&i<Util.getTheRangeNumber2(s)){
return true;
} }
return false;
} }
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator; import org.apache.poi.ss.usermodel.Footer;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Test { /**
* @param args
* @throws IOException
*/
//定义文件所在位置
public static String FILE_TO_BE_READ = "C:\\Users\\Administrator\\Desktop\\健康档案.xlsx";
//定义第几张sheet;
public static int SHEET_NUM = 4;
//最小行数 从小0开始
public static int FIRST_ROW;
//最大行数
public static int LAST_ROW; public static void main(String[] args) throws IOException { //获取工作薄
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(FILE_TO_BE_READ));
//获取工作页
XSSFSheet sheet = workbook.getSheetAt(SHEET_NUM);
//获取单元格
XSSFCell s = sheet.getRow(1).getCell(0);
//获取最小行数
FIRST_ROW = sheet.getFirstRowNum();
//获取最大行数
LAST_ROW = sheet.getLastRowNum(); StringBuilder sb = new StringBuilder(); List <CellRangeAddress> al =sheet.getMergedRegions(); List<String> ls = Util.getMergedString(al); // for(int i=0;i<366;i++){
//
// XSSFCell s2 = sheet.getRow(i+1).getCell(0);
// if(s2.toString().trim()!="")
//
// System.out.print(s2+",");
// }
String temp = "{"; for(int i = 0; i<ls.size();i++){
String s1= ls.get(i);
// System.out.println(s1);
int column = s1.charAt(0)-65;
// System.out.println(column);
for(int i1=Util.getTheRangeNumber(s1);i1<=Util.getTheRangeNumber2(s1);i1++){
// System.out.println(i1);
// System.out.println(Util.getTheRangeNumber2(s1));
// System.out.println(column);
XSSFCell s2 = sheet.getRow(i1-1).getCell(column); if(s2.getStringCellValue().trim()!=""){
System.out.println(s2.getStringCellValue()); // temp+=s2.getStringCellValue()+":";
// temp+="[";
}
XSSFCell s3 = sheet.getRow(i1-1).getCell(column+1);
if(s3.getStringCellValue().trim()!=""&&!Util.isMerged(i1-1, column+1, ls)){
System.out.println(s3.getStringCellValue());
// temp+=s3.getStringCellValue()+":";
// temp+="}";
} }
} //
// System.out.println(Util.isMerged(60, 0, ls));
//
// XSSFCell s2 = sheet.getRow(60).getCell(2);
// System.out.println(s2.getStringCellValue());
// System.out.println(temp);
} }

利用POI遍历出层级结构的excel表格的更多相关文章

  1. mysql 表结构转excel表格

    最近需要写文档,由于开发模式是先开发后写文档(不想吐槽...),数据库表结构什么的都搞好了,然后写文档的时候需要贴表结构,什么字段,类型,相关说明需要一一对应起来,数据库表10多张,字段又多,手动复制 ...

  2. Java使用poi从数据库读取数据生成Excel表格

    想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...

  3. poi实现将数据输出到Excel表格当中

    今天简单的学习了一下POI,一下是所使用到的jar,这些jar可以到apache去下载

  4. 在sqlserver 中如何导出数据库表结构到excel表格中

    先建空白excel--在数据库中的左侧找到该表, 选中需要导出的数据--Ctrl+C复制--打开记事本修改编码格式为Unicode-不自动换行保存--Ctrl+A--Ctrl+C,再打开excel-- ...

  5. 使用apache的poi来实现数据导出到excel的功能——方式二

    此次,介绍利用poi与layui table结合导出excel.这次不需要从数据库中查询出来的数据进行每一行的拼接那么麻烦,我们这次将标题定义一个id值,对应从数据库中查找出来的字段名即可. 1.po ...

  6. 利用POI操作不同版本号word文档中的图片以及创建word文档

    我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写 ...

  7. spring boot 使用POI导出数据到Excel表格

    在spring boot 的项目经常碰到将数据导出到Excel表格的需求,而POI技术则对于java操作Excel表格提供了API,POI中对于多种类型的文档都提供了操作的接口,但是其对于Excel表 ...

  8. JAVAWeb SSH框架 利用POI 导出EXCEL,弹出保存框

    导入包这一些不多说,直接贴出关键代码,JSP只要点一个Action链接就行. poi包我是用:poi-3.11-20141221.jar 亲测有效: 效果: Action 类代码: private I ...

  9. java利用poi导出数据到excel

    背景: 上一篇写到利用jtds连接数据库获取对应的数据,本篇写怎样用poi将数据到处到excel中,此程序为Application 正文: 第三方poi jar包:poi驱动包下载 代码片段: /** ...

随机推荐

  1. Nginx 认证模块

    # Nginx用户认证模块 # 主要应用业务:文件下载.当用户需要下载某些文件的时候,我们增加用户名和密码机制来进行用户验证. # 该功能的实现是通过ngx_http_auth_basic_modul ...

  2. MyBatis-知识点详解

    Mybatis 中$与#的区别 1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的 ...

  3. 用固态U盘让你的办公环境随身移动

    有些人因为家中的电脑设备没有办公环境,或者是软件太多装起来麻烦,以及环境不同步等原因上下班总是背着电脑,其实大可不必,只要将系统装进U盘,就可以让你的办公环境随身移动.在公司时启动U盘系统工作,下班后 ...

  4. .NET 扩展 官方 Logger 实现将日志保存到本地文件

    .NET 项目默认情况下 日志是使用的 ILogger 接口,默认提供一下四种日志记录程序: 控制台 调试 EventSource EventLog 这四种记录程序都是默认包含在 .NET 运行时库中 ...

  5. Linux 08 磁盘管理

    参考源 https://www.bilibili.com/video/BV187411y7hF?spm_id_from=333.999.0.0 版本 本文章基于 CentOS 7.6 概述 Linux ...

  6. Java SE 9 多版本兼容 JAR 包示例

    Java SE 9 多版本兼容 JAR 包示例 作者:Grey 原文地址:Java SE 9 多版本兼容 JAR 包示例 说明 Java 9 版本中增强了Jar 包多版本字节码文件格式支持,也就是说在 ...

  7. Java精进-手写持久层框架

    前言 本文适合有一定java基础的同学,通过自定义持久层框架,可以更加清楚常用的mybatis等开源框架的原理. JDBC操作回顾及问题分析 学习java的同学一定避免不了接触过jdbc,让我们来回顾 ...

  8. CSS 选择器(一):属性选择器

    属性选择器的介绍 属性选择器顾名思义就是通过标签的属性来查找标签的选择器.让我们来回忆一下标签的属性是什么?HTML5 的所有标签共同拥有的属性叫作全局属性,除此之外还有标签自己拥有的属性,就叫作私有 ...

  9. Java SE 14 新增特性

    Java SE 14 新增特性 作者:Grey 原文地址:Java SE 14 新增特性 源码 源仓库: Github:java_new_features 镜像仓库: GitCode:java_new ...

  10. python进阶__struct数据处理详解

    一.此模块可以执行 Python 值和以 Python bytes 对象表示的 C 结构之间的转换 二.打包解包时,需要按照特定的方式来打包或者解包.该方式就是格式化字符串,它指定了数据类型,除此之外 ...