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. el-form 每行显示两列,底部按钮居中

    需求: el-form 每行显示两列,底部按钮居中 问题: 以前的解决办法是: el-col, el-row.但是这里只有一个 el-form-item 的 label 数据是已知的,其余项都是循环得 ...

  2. 20220723-Mac上使用IntelliJ IDEA

    目录 IDEA快捷键 IDEA模板 常用模板快捷键 个人随笔 软件:IntelliJ IDEA 电脑:Mac IDEA快捷键 打开/关闭 项目视图 快捷键:⌘ + 1 运行项目 快捷键:⌃ + ⇧ + ...

  3. CF242E XOR on Segment

    CF242E XOR on Segment codeforces 洛谷 关于异或,无法运用懒标记实现区间异或: 可以像trie树一样拆位,将每个值拆成二进制数,对此建相应个数的线段树. 0 1与 0异 ...

  4. 解决国内不能访问github的问题

    问题 最近访问GitHub总是不稳定,经常连不上, 出各种错误(OpenSSL SSL_read: Connection was reset, errno 10054, Connection refu ...

  5. 金灿灿的季节 - Apache DolphinScheduler收获5位新Committer

    在这个金灿灿的收获季节,经过 Apache DolphinScheduler PPMC 们的推荐和投票,Apache DolphinScheduler 收获了 5 位新Committer .他们是:n ...

  6. Luogu2290 [HNOI2004]树的计数 (组合计数,prufer编码)

    这不prufer编码吗,防爆long long就行了啊 #include <iostream> #include <cstdio> #include <cstring&g ...

  7. 部署 Vite 静态网站到 Gitee Pages

    开启仓库的 Gitee Pages 服务,部署目录 dist/: Vite 构建 build,输出到 dist 文件:取消 .gitignore 中的 dist: Vite preview 查看静态网 ...

  8. 什么?WPF 不支持 SVG ?

    什么?WPF 不支持 SVG ? 控件名:SharpVectors 作者:Elinam LLC (Japan) 项目地址: https://github.com/ElinamLLC/SharpVect ...

  9. Manacher算法讲解——字符串最长回文子串

    引 入 引入 引入 Manachar算法主要是处理字符串中关于回文串的问题的,这没什么好说的. M a n a c h e r 算 法 Manacher算法 Manacher算法 朴素 求一个字符串中 ...

  10. [多校 NOIP 联合模拟 20201130 T4] ZZH 的旅行(斜率优化dp,启发式合并,平衡树)

    题面 题目背景 因为出题人天天被 ZZH(Zou ZHen) 吊打,所以这场比赛的题目中出现了 ZZH . 简要题面 数据范围 题解 (笔者写两个log的平衡树和启发式合并卡过的,不足为奇) 首先,很 ...