Apache POI

03版本 对象是HSSFWorkbook 后缀xls
public void testWrite03() throws IOException { // 创建新的Excel 工作簿 Workbook workbook = new HSSFWorkbook(); // 在Excel工作簿中建一工作表,其名为缺省值 Sheet0 //Sheet sheet = workbook.createSheet(); // 如要新建一名为"会员登录统计"的工作表,其语句为: Sheet sheet = workbook.createSheet("狂神观众统计表"); // 创建行(row 1) Row row1 = sheet.createRow(0); // 创建单元格(col 1-1) Cell cell11 = row1.createCell(0); cell11.setCellValue("今日新增关注"); // 创建单元格(col 1-2) Cell cell12 = row1.createCell(1); cell12.setCellValue(999); // 创建行(row 2) Row row2 = sheet.createRow(1); // 创建单元格(col 2-1) Cell cell21 = row2.createCell(0); cell21.setCellValue("统计时间"); //创建单元格(第三列) Cell cell22 = row2.createCell(1); String dateTime = new DateTime().toString("yyyy-MM-dd HH:mm:ss"); cell22.setCellValue(dateTime); // 新建一输出文件流(注意:要先创建文件夹) FileOutputStream out = new FileOutputStream(path+"狂神观众统计表03.xls"); // 把相应的Excel 工作簿存盘 workbook.write(out); // 操作结束,关闭文件 out.close(); System.out.println("文件生成成功"); }
07版本 对象是XSSFWorkbook 后缀是xlsx
public void testWrite07() throws IOException { // 创建新的Excel 工作簿 Workbook workbook = new XSSFWorkbook(); // 在Excel工作簿中建一工作表,其名为缺省值 Sheet0 //Sheet sheet = workbook.createSheet(); // 如要新建一名为"会员登录统计"的工作表,其语句为: Sheet sheet = workbook.createSheet("狂神观众统计表"); // 创建行(row 1) Row row1 = sheet.createRow(0); // 创建单元格(col 1-1) Cell cell11 = row1.createCell(0); cell11.setCellValue("今日新增关注"); // 创建单元格(col 1-2) Cell cell12 = row1.createCell(1); cell12.setCellValue(999); // 创建行(row 2) Row row2 = sheet.createRow(1); // 创建单元格(col 2-1) Cell cell21 = row2.createCell(0); cell21.setCellValue("统计时间"); //创建单元格(第三列) Cell cell22 = row2.createCell(1); String dateTime = new DateTime().toString("yyyy-MM-dd HH:mm:ss"); cell22.setCellValue(dateTime); // 新建一输出文件流(注意:要先创建文件夹) FileOutputStream out = new FileOutputStream(path+"狂神观众统计表03.xlsx"); // 把相应的Excel 工作簿存盘 workbook.write(out); // 操作结束,关闭文件 out.close(); System.out.println("文件生成成功"); }
注意:03和07版本的后缀和对象不一样 行数:03有限07无限
03大量数据写入 如果超出65536 行数据就会报错如下
java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0…65535)
public void testWrite03BigData() throws IOException { //开始时间 long begin = System.currentTimeMillis(); //创建一个工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); //创建一个表 HSSFSheet sheet = workbook.createSheet(); //写入数据 for (int rowNum = 0; rowNum < 65536; rowNum++) { //创建行 HSSFRow row = sheet.createRow(rowNum); //创建列 for (int cellNum = 0; cellNum < 10; cellNum++) { HSSFCell cell = row.createCell(cellNum); cell.setCellValue(cellNum); } } FileOutputStream fileOutputStream = new FileOutputStream(path + "03.xls"); workbook.write(fileOutputStream); //结束时间 long end = System.currentTimeMillis(); System.out.println("03.xls | 生成成功!"+(double)(end-begin)/1000); }
获取数值的时候一定要注意类型
excel 读 03版
//03读取 @Test public void testRead03() throws Exception { //获取文件流 FileInputStream fileInputStream = new FileInputStream(path + "测试表.xls"); //创建一个工作簿 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(fileInputStream); //得到表 HSSFSheet sheet = hssfWorkbook.getSheetAt(0); //得到行 HSSFRow row = sheet.getRow(0); //得到列 HSSFCell cell = row.getCell(1); //读取值一定要注意类型 //cell.getStringCellValue() 获取文本类型 字符串 //System.out.println(cell.getStringCellValue()); //获取数字类型 System.out.println(cell.getNumericCellValue()); fileInputStream.close(); }
excel 读 07版
//07读取 @Test public void testRead07() throws Exception { //获取文件流 FileInputStream fileInputStream = new FileInputStream(path + "狂神观众统计表03.xlsx"); //创建一个工作簿 Workbook fWorkbook = new XSSFWorkbook(fileInputStream); //得到表 Sheet sheet = fWorkbook.getSheetAt(0); //得到行 Row row = sheet.getRow(0); //得到列 Cell cell = row.getCell(1); //读取值一定要注意类型 //cell.getStringCellValue() 获取文本类型 字符串 //System.out.println(cell.getStringCellValue()); //获取数字类型 System.out.println(cell.getNumericCellValue()); fileInputStream.close(); }
读取不同的数据类型
public void testCellTyoe() throws IOException { //获取文件流 FileInputStream fileInputStream = new FileInputStream(path + "会员消费商品明细表.xls"); //创建一个工作簿 HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream); //获取表 HSSFSheet sheet = workbook.getSheetAt(0); //获取标题内容 HSSFRow rowTitle = sheet.getRow(0); if (rowTitle != null){ //获取行中不为空的列 int cellCount = rowTitle.getPhysicalNumberOfCells(); for (int cellNum = 0; cellNum < cellCount; cellNum++) { HSSFCell cell = rowTitle.getCell(cellNum); if (cell != null){ //获取类型 int cellType = cell.getCellType(); //获取列中的值 String cellValue = cell.getStringCellValue(); System.out.print(cellValue+ " | "); //System.out.print(cellType); } } System.out.println(); } //获取表中内容 //获取行的记录 int rowCount = sheet.getPhysicalNumberOfRows(); for (int rowNum = 1; rowNum < rowCount; rowNum++) { HSSFRow rowData = sheet.getRow(rowNum); if (rowData!=null){ //读取列 int cellCount = rowTitle.getPhysicalNumberOfCells(); for (int cellNUm = 0; cellNUm < cellCount; cellNUm++) { System.out.print("["+(rowNum+1)+"-"+(cellNUm+1)+"]"); HSSFCell cell = rowData.getCell(cellNUm); //匹配列的数据类型 if (cell != null){ int cellType = cell.getCellType(); String cellValue= ""; switch (cellType){ case HSSFCell.CELL_TYPE_STRING: //字符转 System.out.print("【STRING】"); cellValue = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_BOOLEAN: //布尔 System.out.print("【BOOLEAN】"); cellValue = String.valueOf(cell.getBooleanCellValue()); break; case HSSFCell.CELL_TYPE_BLANK: //空 System.out.print("【BLANK】"); break; case HSSFCell.CELL_TYPE_NUMERIC: //数字 (日期 普通数字) System.out.print("【NUMERIC】"); if (HSSFDateUtil.isCellDateFormatted(cell)){ System.out.print("【日期】"); Date date = cell.getDateCellValue(); cellValue = new DateTime(date).toString("yyyy-MM-dd"); }else { //不是日期类型 System.out.print("【转换为字符串输出】"); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cellValue = cell.toString(); } break; case HSSFCell.CELL_TYPE_ERROR: //异常 System.out.print("【异常】"); } System.out.println(cellValue); } } } } fileInputStream.close(); }
计算公式
@Test public void testFormula() throws Exception { //获取文件流 FileInputStream fileInputStream = new FileInputStream(path + "计算公式.xls"); //创建一个工作簿 Workbook workbook = new HSSFWorkbook(fileInputStream); Sheet sheetAt = workbook.getSheetAt(0); Row row = sheetAt.getRow(4); Cell cell = row.getCell(0); //拿到计算公式 eval FormulaEvaluator FormulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook)workbook); //输出单元格的内容 int cellType = cell.getCellType(); switch (cellType){ case HSSFCell.CELL_TYPE_FORMULA: //公式 //获取计算公式 String formula = cell.getCellFormula(); System.out.println(formula); //计算 CellValue evaluate = FormulaEvaluator.evaluate(cell); String cellValue = evaluate.formatAsString(); System.out.println(cellValue); break; } }
博客介绍了Apache POI操作Excel的相关知识。03版本对象是HSSFWorkbook,后缀为xls;07版本对象是XSSFWorkbook,后缀为xlsx。03版本行数有限,超出65536行写入会报错,且获取数值时要注意类型,还提及了不同版本的读取及计算公式。
2405

被折叠的 条评论
为什么被折叠?



