注意:
(1)判断行的最大数量建议使用sheet.getLastRowNum();(2)判断每行最大列数建议使用row.getLastCellNum();【JAVA】特别注意,POI中getLastRowNum() 和getLastCellNum()的区别hssfSheet.getLastRowNum();//最后一行的下标,编号从0开始,即比行数小1。如果sheet中一行数据都没有,则返回-1,只有第一行有数据时,返回0hssfSheet.getRow(k).getLastCellNum();//获取列数,比最后一列列标大1.如果row中一列数据都没有,则返回-1,只有第一列有数据时,返回1
getLastRowNum()获取的是最后一行的编号(编号从0开始)。
int ......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 ......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()