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. 用JavaScript写一个进度条

    var porpressBar = document.getElementById('progressBar') var info = document.getElementById('info') ...

  2. ansible一键安装GreatSQL并构建MGR集群

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 利用ansible一键安装GreatSQL并完成MGR部署. 本次介绍如何利用ansible一键安装GreatSQL并完成 ...

  3. OC高仿iOS网易云音乐AFNetworking+SDWebImage+MJRefresh+MVC+MVVM

    效果 因为OC版本大部分截图和Swift版本一样,所以就不再另外截图了. 列文章目录 因为目录比较多,每次更新这里比较麻烦,所以推荐点击到主页,然后查看iOS云音乐专栏. 目简介 这是一个使用OC语言 ...

  4. Luogu3426 [POI2005]SZA-Template (KMP)(未完成)

    未理解透,鬼知道怎么A的 蒟蒻交了个乱猜贪心搞了10pts,一翻题解群佬乱舞,最后DP解决 $\exists i - next[i] <= j, f[j] = f[next[i]] $ #inc ...

  5. 删除MySQL数据用户

    mysql删除用户的方法: 1.使用"drop user 用户名;"命令删除: 2.使用"delete from user where user='用户名' and ho ...

  6. DevOps落地实践点滴和踩坑记录-(2) -聊聊平台建设

    很久没有写文章记录了,上一篇文章像流水账一样,把所见所闻一个个记录下来.这次专门聊聊DevOps平台的建设吧,有些新的体会和思考,希望给正在做这个事情的同学们一些启发吧. DevOps落地实践点滴和踩 ...

  7. Git 使用技巧(一):合并分支

    在合并分支之前最好保证你所有的分支都是最新的,所以你可以使用 git pull origin branchName 来拉取远程仓库到本地仓库. 假如有一个 dev 分支需要合并到 master 分支中 ...

  8. 无情摆烂我竟是cv怪物第四周周末总结

    无情摆烂我竟是cv怪物第四周周末总结 函数重要参数补充 1.*args 星号代表接收未被位置形参接收的额外的位置实参,无论有多少位置实参*args都可以将它全部接受 def func(*args): ...

  9. Java Stream 函数式接口外部实例的引用

    Java Function Interface 函数式接口: Stream.empty() .filter(Predicate) .map(Function) .forEach(Consumer); ...

  10. [HNOI2011]卡农 (数论计数,DP)

    题面 原题面 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则. 他将声音分成 n n n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 1 1 ...