java poi reader常用API汇总

java

 注意:
(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汇总 的全部内容, 来源链接: utcz.com/z/392703.html

回到顶部