利用POI遍历出层级结构的excel表格
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表格的更多相关文章
- mysql 表结构转excel表格
最近需要写文档,由于开发模式是先开发后写文档(不想吐槽...),数据库表结构什么的都搞好了,然后写文档的时候需要贴表结构,什么字段,类型,相关说明需要一一对应起来,数据库表10多张,字段又多,手动复制 ...
- Java使用poi从数据库读取数据生成Excel表格
想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...
- poi实现将数据输出到Excel表格当中
今天简单的学习了一下POI,一下是所使用到的jar,这些jar可以到apache去下载
- 在sqlserver 中如何导出数据库表结构到excel表格中
先建空白excel--在数据库中的左侧找到该表, 选中需要导出的数据--Ctrl+C复制--打开记事本修改编码格式为Unicode-不自动换行保存--Ctrl+A--Ctrl+C,再打开excel-- ...
- 使用apache的poi来实现数据导出到excel的功能——方式二
此次,介绍利用poi与layui table结合导出excel.这次不需要从数据库中查询出来的数据进行每一行的拼接那么麻烦,我们这次将标题定义一个id值,对应从数据库中查找出来的字段名即可. 1.po ...
- 利用POI操作不同版本号word文档中的图片以及创建word文档
我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写 ...
- spring boot 使用POI导出数据到Excel表格
在spring boot 的项目经常碰到将数据导出到Excel表格的需求,而POI技术则对于java操作Excel表格提供了API,POI中对于多种类型的文档都提供了操作的接口,但是其对于Excel表 ...
- JAVAWeb SSH框架 利用POI 导出EXCEL,弹出保存框
导入包这一些不多说,直接贴出关键代码,JSP只要点一个Action链接就行. poi包我是用:poi-3.11-20141221.jar 亲测有效: 效果: Action 类代码: private I ...
- java利用poi导出数据到excel
背景: 上一篇写到利用jtds连接数据库获取对应的数据,本篇写怎样用poi将数据到处到excel中,此程序为Application 正文: 第三方poi jar包:poi驱动包下载 代码片段: /** ...
随机推荐
- 字符输出流_Writer类&FileWrite类介绍和字符输出流的基本使用_写出单个字符到文件
字符输出流_Writer类&FileWrite类介绍 java.io.Writer:字符输出流,是所有字符输出流的最顶层的父类,是一个抽象类 共性抽象方法: void write(int c) ...
- electron-vue打包出现问题汇总
打包过程中出现下载status code 404 1.可能是网络不好,导致相关electron包无法正常下载,也有可能是需要挂代理 2.可能是编译过程的链接出现错误,一般为网址中缺少或多了一个v,建议 ...
- Vue3系列2--项目目录介绍及运行项目
1 Vite项目目录 用Vscode打开创建的项目,看到下面的目录结构: 通过运行 npm install 初始化项目后生成两个初始化文件:node_modules和 package-lock.js ...
- 在Centos7.3下使用Siege对Django服务进行压力测试
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_87 Siege是linux下的一个web系统的压力测试工具,支持多链接,支持get和post请求,可以对web系统进行多并发下持续 ...
- 【原创】Python 懂车帝口碑爬虫
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! 懂车帝综合口碑 需求 操作环境 win1 ...
- 不会提交 PR 的小伙伴看过来,超详细的视频教程!
点击上方 蓝字关注我们 作者 | 严天奇 ✎ 编 者 按 最近有一些新加入社区的朋友反馈不太了解 Apache DolphinScheduler 提交 PR 的步骤和规则.这不,人帅心美的严天奇同学就 ...
- Luogu P1903 [国家集训队]数颜色 / 维护队列 (带修莫队)
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> ...
- django中视图函数的FBV和CBV
1.什么是FBV和CBV FBV是指视图函数以普通函数的形式:CBV是指视图函数以类的方式. 2.普通FBV形式 def index(request): return HttpResponse('in ...
- virtual box 安装虚拟机如何全屏
最近由于要进行微信小程序的开发.可恶的腾讯狗没有提供linux版的开发工具!不得以安装虚拟机!暗号虚拟机后发现win10的界面实在是太小,于是乎去解决这个问题!其实很简单,一般来是说直接点虚拟机面板上 ...
- Flutter 开启 Windows、macOS 平台支持的命令
Flutter 的多平台支持除了 Android 和 iOS 是默认开启的以外,比如 Windows.Linux 平台的支持需要手动开启. Flutter config 命令集中,有以下参数是对于平台 ...