java poi reader常用API汇总
注意:
(1)判断行的最大数量建议使用sheet.getLastRowNum();
(2)判断每行最大列数建议使用row.getLastCellNum();
- 【JAVA】特别注意,POI中getLastRowNum() 和getLastCellNum()的区别
- hssfSheet.getLastRowNum();//最后一行的下标,编号从0开始,即比行数小1。如果sheet中一行数据都没有,则返回-1,只有第一行有数据时,返回0
- hssfSheet.getRow(k).getLastCellNum();//获取列数,比最后一列列标大1.如果row中一列数据都没有,则返回-1,只有第一列有数据时,返回1
getLastRowNum()获取的是最后一行的编号(编号从0开始)。
int org.apache.poi.ss.usermodel.Sheet.getLastRowNum()
Gets the last row on the sheet
Returns: last row contained in this sheet (0-based)
- getPhysicalNumberOfRows
- 获取有记录的行数,即:最后有数据的行是第n行,前面有m行是空行没数据,则返回n-m;
- getPhysicalNumberOfCells
- 获取有记录的列数,即:最后有数据的列是第n列,前面有m列是空列没数据,则返回n-m;
getPhysicalNumberOfRows()获取的是物理行数,也就是不包括那些空行(隔行)的情况。
int org.apache.poi.ss.usermodel.Sheet.getPhysicalNumberOfRows()
Returns the number of physically defined rows (NOT the number of rows in the sheet)
- java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的形式
- 当使用POI处理excel的时候,遇到了比较长的数字,虽然excel里面设置该单元格是文本类型的,但是POI的cell的类型就会变成数字类型。
- 而且无论数字是否小数,使用cell.getNumbericCellValue() 去获取值的时候,会得到一个double,而且当长度大一点的时候会变成科学计数法形式。
- 那么获取这个单元格的原始的数据,就其实是一个double怎么转换成整数的问题了。
- 使用DecimalFormat对这个double进行了格式话,随后使用format方法获得的String就是你想要的值了。
- DecimalFormat df = new DecimalFormat("0");
- String whatYourWant = df.format(cell.getNumericCellValue());
单元格内容换行:
Java利用POI生成Excel强制换行
1. 首先在需要强制换行的单元格里使用poi的样式,并且把样式设定为自动换行
- HSSFCellStyle cellStyle=workbook.createCellStyle();
- cellStyle.setWrapText(true);
- cell.setCellStyle(cellStyle);
2. 其次是在需要强制换行的单元格,使用/就可以实再强制换行
换行用"\r\n",和文本分开
- HSSFCell cell = row.createCell((short)0);
- cell.setCellStyle(cellStyle);
- cell.setCellValue(new HSSFRichTextString("hello/r/n world!"));
- public class ImportExcel {
- private static Logger log = LoggerFactory.getLogger(ImportExcel.class);
- /**
- * 工作薄对象
- **/
- private Workbook wb;
- /**
- * 工作表对象
- **/
- private Sheet sheet;
- /**
- * 标题行号
- */
- private int headerNum;
- /**
- * 构造函数
- * @param path 导入文件,读取第1个工作表
- * @param headerNum 标题行号,数据行等于标题行号+1
- * @throws InvalidFormatException
- * @throws IOException
- */
- public ImportExcel(String fileName, int headerNum)
- throws InvalidFormatException, IOException {
- this(new File(fileName), headerNum);
- }
- /**
- * 构造函数
- * @param path 导入文件对象,读取第1个工作表
- * @param headerNum 标题行号,数据行等于标题行号+1
- * @throws InvalidFormatException
- * @throws IOException
- */
- public ImportExcel(File file, int headerNum)
- throws InvalidFormatException, IOException {
- this(file, headerNum, 0);
- }
- /**
- * 构造函数
- * @param path 导入文件
- * @param headerNum 标题行号,数据行等于标题行号+1
- * @param sheetIndex 工作表编号,以0开始
- * @throws InvalidFormatException
- * @throws IOException
- */
- public ImportExcel(String fileName, int headerNum, int sheetIndex)
- throws InvalidFormatException, IOException {
- this(new File(fileName), headerNum, sheetIndex);
- }
- /**
- * 构造函数
- * @param path 导入文件对象
- * @param headerNum 标题行号,数据行等于标题行号+1
- * @param sheetIndex 工作表编号,以0开始、
- * @throws InvalidFormatException
- * @throws IOException
- */
- public ImportExcel(File file, int headerNum, int sheetIndex)
- throws InvalidFormatException, IOException {
- this(file.getName(), new FileInputStream(file), headerNum, sheetIndex);
- }
- /**
- * 构造函数
- * @param file 导入文件对象
- * @param headerNum 标题行号,数据行等于标题行号+1
- * @param sheetIndex 工作表编号,以0开始、
- * @throws InvalidFormatException
- * @throws IOException
- */
- /**
- * 构造函数
- * @param path 导入文件对象
- * @param headerNum 标题行号,数据行等于标题行号+1
- * @param sheetIndex 工作表编号,以0开始、
- * @throws InvalidFormatException
- * @throws IOException
- */
- public ImportExcel(String fileName, InputStream is, int headerNum, int sheetIndex)
- throws InvalidFormatException, IOException {
- if (StringUtils.isBlank(fileName)){
- throw new RuntimeException("导入文档为空!");
- }else if(fileName.toLowerCase().endsWith("xls")){
- this.wb = new HSSFWorkbook(is);
- }else if(fileName.toLowerCase().endsWith("xlsx")){
- this.wb = new XSSFWorkbook(is);
- }else{
- throw new RuntimeException("文档格式不正确?");
- }
- if (this.wb.getNumberOfSheets()<sheetIndex){
- throw new RuntimeException("文档中没有工作表!");
- }
- this.sheet = this.wb.getSheetAt(sheetIndex);
- this.headerNum = headerNum;
- log.debug("Initialize success.");
- }
- /**
- * 获取行对象
- * @param rownum
- * @return
- */
- public Row getRow(int rownum){
- return this.sheet.getRow(rownum);
- }
- /**
- * 获取数据行号
- * @return
- */
- public int getDataRowNum(){
- return headerNum+1;
- }
- /**
- * 获取工作表中的最后一行的行号,以0开始
- * @return
- */
- public int getLastDataRowNum(){
- return this.sheet.getLastRowNum();
- }
- /**
- * 获取一行记录总的列数
- * @return
- */
- public int getLastCellNum(){
- return this.getRow(headerNum).getLastCellNum();
- }
- /**
- * 获取单元格的值
- * @param row 获取的行
- * @param column 获取单元格列号
- * @return 单元格的值
- */
- public Object getCellValue(Row row, int column){
- Object val = "";
- try{
- Cell cell = row.getCell(column);
- if (cell != null){
- if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
- val = cell.getNumericCellValue();
- }else if (cell.getCellType() == Cell.CELL_TYPE_STRING){
- val = cell.getStringCellValue();
- }else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA){
- val = cell.getCellFormula();
- }else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN){
- val = cell.getBooleanCellValue();
- }else if (cell.getCellType() == Cell.CELL_TYPE_ERROR){
- val = cell.getErrorCellValue();
- }
- }
- }catch (Exception e) {
- return val;
- }
- return val;
- }
- /**
- * 导入测试
- */
- public static void main(String[] args) throws Throwable {
- ImportExcel ei = new ImportExcel("import.xls", 0);
- System.out.println(ei.getLastDataRowNum());
- System.out.println(ei.getDataRowNum());
- for (int i = ei.getDataRowNum(); i <= ei.getLastDataRowNum(); i++) {
- Row row = ei.getRow(i);
- System.out.println("Row num:"+i);
- for (int j = 0; j < ei.getLastCellNum(); j++) {
- Object val = ei.getCellValue(row, j);
- System.out.print(val+", ");
- }
- System.out.print("\n");
- }
- }
- }
java poi reader常用API汇总的更多相关文章
- Java时间操作常用api
- 如何取得年月日.小时分钟秒?- 如何取得从1970年1月1日0时0分0秒到现在的毫秒数?- 如何取得某月的最后一天?- 如何格式化日期?答:问题1:创建java.util.Calendar 实例, ...
- java selenium常用API汇总
(WebElement.iFrame.select.alert.浏览器窗口.事件.js) 一 WebElement相关方法 1.点击操作 WebElement button = driver. ...
- Java反射常用API汇总
“JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性” 一.类对象的获取 1.通过对象获取 Object obj = ne ...
- java基础(15):常用API(Object、String、StringBuffer)
1. Java的API及Object类 在以前的学习过程中,我们都在学习对象基本特征.对象的使用以及对象的关系.接下来我们开始使用对象做事情,那么在使用对象做事情之前,我们要学习一些API中提供的常用 ...
- 12.Java连接Redis_Jedis_常用API
上一篇总结我们使用我们本地的Eclipse中创建的jedis工程,链接到了我们处于VMware虚拟机上的Linux系统上的Redis服务,我们接下来讲一下jedis的一些常用的API. (1)jedi ...
- Selenium2(java)selenium常用API 四
WebElement相关方法 1.点击操作 WebElement button = driver.findElement(By.id("login")); button.click ...
- VSTO之PowerPoint(PPT)插件开发常用API汇总
VSTO简介 VSTO(Visual Studio Tools for Office )是VBA的替代,使得开发Office应用程序更加简单,并且用VSTO来开发office应用程序可以使用Visua ...
- Java学习随笔---常用API(二)
Object类的toString方法 将一个对象返回为字符串形式,但一般使用的时候会覆盖重写toString方法 Object类是所有类的父亲 // public class Person { pri ...
- HDFS连接JAVA,HDFS常用API
先在pom.xml中导入依赖包 <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/ha ...
随机推荐
- Ubuntu 14.04.3 LTS如何安装谷歌输入法
谷歌输入法项目主页:https://code.google.com/p/scim-googlepinyin/ 一,打开Ubuntu 的“Ubunru的软件中心”,在搜索里面输入“googlepinyi ...
- windows查看和杀死占用端口的进程
1.首先使用 netstat -ano查看占用端口的进程号 2.然后使用 taskkill /PID (进程号)杀死进程
- 6w6:第六周程序填空题3
描述 下面的程序输出结果是: A::Fun A::Do A::Fun C::Do 请填空: #include <iostream> using namespace std; class A ...
- idea中文输入问题
desc: idea2017.3.4输入中文,光标不跟随. 解决方案:
- SDUT OJ 数据结构实验之串二:字符串匹配
数据结构实验之串二:字符串匹配 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
- Codeforces Round #462 (Div. 2), problem: (C) A Twisty Movement (求可以转一次区间的不递增子序列元素只有1,2)
题目意思: 给长度为n(n<=2000)的数字串,数字只能为1或者2,可以将其中一段区间[l,r]翻转,求翻转后的最长非递减子序列长度. 题解:求出1的前缀和,2的后缀和,以及区间[i,j]的最 ...
- UESTC - 1692 注意DP顺序
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #i ...
- C++ STL之Set
set是关联容器,类似于集合. 特点是里面的元素不会重复,而且元素时有序的. 1.声明定义: #include<set> using namespace std; set<int&g ...
- Q942 增减字符串匹配
给定只含 "I"(增大)或 "D"(减小)的字符串 S ,令 N = S.length. 返回 [0, 1, ..., N] 的任意排列 A 使得对于所有 i ...
- docker一键安装
1.任意新服务器上一键安装最新版docker curl -s https://get.docker.com/ | sh 注:安装完成之后,docker默认是没有启动的,需要启动docker 2.doc ...