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. 使用云服务器从0开始搭建云端Jupyter Lab|Notebook

    0.购买云服务器 购买服务器我只推荐硅云,因为香港服务器免备案!而且25岁以下仅需10元每月,至少可买3年!每年享有多次原价续费机会,可补价升级配置. 硅云服务器首页:https://www.vpso ...

  2. Mybatis的使用(2)

    1 :模糊查询 #{}占位符和¥{}的区别 #{}占位符:传参大部分用#{}传参,它的底层是PreparedStatement对象,是安全的数据库访问,它能够防止sql注入 1.1:如果parmete ...

  3. 【cartographer ros】十: 延时和误差分析

    上一节介绍了在cartographer进行建图和定位(在线和离线). 本节将分析cartographer运行时的误差与延迟,主要是在线定位时的,并尝试优化解决. 目录 1,误差分析 a,硬件精度 b, ...

  4. BTDetect用户协议和技术支持

    1.巴蜀生物科技检测用户协议 2.基于机器学习的生物检测项目 3.BTDetect用户手册和技术支持

  5. Eclipse里项目名有红叉,但是项目里的每一个文件都没有红叉

    原因一:导入的文件被删除了. 解决方法:右击项目名,在弹出的菜单中,选择"Bulid Path"-->"configure build path"--&g ...

  6. Git 03 理论

    参考源 https://www.bilibili.com/video/BV1FE411P7B3?spm_id_from=333.999.0.0 版本 本文章基于 Git 2.35.1.2 四个区域 G ...

  7. 初次认识 Canvas

    画布的概念 Canvas(画布)可以用于动画.游戏画面.数据可视化.图片编辑以及实时视频处理等方面.画布在 HTML5 中是通过canvas标签来表现,通过 JavaScript 提供的画布 API, ...

  8. jbd2的死锁分析

    已经运行多年的jbd2,它还是死锁了 背景:这个是在centos7的环境上复现的,内核版本为3.10.0-957.27.2.el7 下面列一下我们是怎么排查并解这个问题的. 一.故障现象 oppo云内 ...

  9. 刷题记录:Codeforces Round #719 (Div. 3)

    Codeforces Round #719 (Div. 3) 20210703.网址:https://codeforces.com/contest/1520. 没错,我是个做div3的蒟蒻-- A 大 ...

  10. 漂亮简洁的PHP导航源码-蘑菇导航

    蘑菇导航 蘑菇导航是根据SimpleWebNavigation修改而来的一个php网址导航.支持php8,支持左侧锚点,支持自定义fontawesome图标. 可以作为群组导航.图床导航.vps导航等 ...