poi
程序员文章站
2022-07-14 11:10:57
...
简介
-
Apache POI是java编写的免费开源的跨平台的java API
-
Apache POI提供api给java提供对office格式档案读和写的功能
-
POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现
-
用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。
-
Apache POI 提供Java操作Excel解决方案\
导包
<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
<!-- poi导包 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15-beta2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15-beta2</version>
</dependency>
读取
-
读取Excel
- 类
XSSFWorkbook wb = new XSSFWorkbook(); // .xlsx
HSSFWorkbook wb = new HSSFWorkbook();// .xls - 基础api
- Sheet sheet = wb.getSheetAt(索引); //获取工作簿
- int i = wb. getNumberOfSheets() //获取表的数量
- int I = sheet.getFirstRowNum(); // 获取第一行有值的索引
- int i = sheet.getLastRowNum(); // 获取最后一行有值的索引
- for(Row row : sheet){} // poi中直接可以直接遍历工作簿 (row每行)
- int i = row.getFirstCellNum(); // 获取this行的第一列有值的索引
- int i =row.getLastCellNum(); // 获取this行的最后一列有值的索引
- row.getLastCellNum() // 获取this行的总列数
- row.getRowNum() // 获取正在遍历的行(索引)
- row.getCell(0).getStringCellValue(); // 获取this行的第一列(索引)类型必须一致
同一类型格式
/** * 转换类型 * * @param cell * @return */ public static String getCellValue(Cell cell) { String cellValue = ""; if (cell == null) { return cellValue; } // 判断数据的类型 switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: // 数字 // short s = cell.getCellStyle().getDataFormat(); if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式 SimpleDateFormat sdf = null; // 验证short值 if (cell.getCellStyle().getDataFormat() == 14) { sdf = new SimpleDateFormat("yyyy/MM/dd"); } else if (cell.getCellStyle().getDataFormat() == 21) { sdf = new SimpleDateFormat("HH:mm:ss"); } else if (cell.getCellStyle().getDataFormat() == 22) { sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); } else { throw new RuntimeException("日期格式错误!!!"); } Date date = cell.getDateCellValue(); cellValue = sdf.format(date); } else if (cell.getCellStyle().getDataFormat() == 0) {// 处理数值格式 cell.setCellType(Cell.CELL_TYPE_STRING); cellValue = String.valueOf(cell.getRichStringCellValue().getString()); } break; case Cell.CELL_TYPE_STRING: // 字符串 cellValue = String.valueOf(cell.getStringCellValue()); break; case Cell.CELL_TYPE_BOOLEAN: // Boolean cellValue = String.valueOf(cell.getBooleanCellValue()); break; case Cell.CELL_TYPE_FORMULA: // 公式 cellValue = String.valueOf(cell.getCellFormula()); break; case Cell.CELL_TYPE_BLANK: // 空值 cellValue = null; break; case Cell.CELL_TYPE_ERROR: // 故障 cellValue = "非法字符"; break; default: cellValue = "未知类型"; break; } return cellValue; }
- 类
写入
-
写入 Excel
-
类
- XSSFWorkbook wb = new XSSFWorkbook(); // .xlsx
- HSSFWorkbook wb = new HSSFWorkbook();// .xls
-
基础api
- Workbook xwb = new XSSFWorkbook(); //创建对象Excel
- Sheet xs = xwb.createSheet();// 创建工作簿 “有参:给工作簿命名”
- Row row = xs.createRow(0); // 创建行(索引)
- Cell cell = row.createCell(0); // 创建this行的列(索引)
- cell.setCellValue(); // 向this索引赋值
- xwb.write(new FileOutputStream(new File(“D:\a.xlsx”))); // 向文档保存到XX目录下,后缀固定
-
-
实际java代码
@RequestMapping("uplode") public void uplode(MultipartFile excelFile) throws Exception { /* * =================================================== 获取文档数据Excel */ // 判断文件类型 Workbook wb = null; // 获取后缀判断使用哪个类 String houZhui = excelFile.getOriginalFilename() .substring(excelFile.getOriginalFilename().lastIndexOf(".") + 1); if (houZhui.equalsIgnoreCase("xlsx")) { wb = new XSSFWorkbook(excelFile.getInputStream()); } else if (houZhui.equalsIgnoreCase("xls")) { wb = new HSSFWorkbook(excelFile.getInputStream()); } // 获取第几个工作簿(索引) Sheet sheet = wb.getSheetAt(0); List<Student> list = new ArrayList<Student>(); // 内置遍历每列 for (Row row : sheet) { String st = ""; Student student = new Student(); /* 获取每行的总列数 */ // short s = row.getLastCellNum(); // System.out.println(s + "a"); /* 获取正在操作的行(索引) */ // int i = row.getRowNum(); // System.out.println(i); /* 获取第一列(索引) 的值 */ /* 如果类型不同需要转换 */ // row.getCell(0).getStringCellValue(); /* 通过遍历获取this行的每列数据 */ short s = row.getLastCellNum(); for (int i = 0; i < s; i++) { String value = row.getCell(i).getStringCellValue(); st = st + "," + value; } String[] split = st.split(","); student.setName(split[1]); student.setPassword(split[2]); list.add(student); } /* * ==================================================== 创建并写入Excel */ /* 创建Excel对象 */ XSSFWorkbook xwb = new XSSFWorkbook(); // 创建工作簿 XSSFSheet xs = xwb.createSheet(); for (int i = 0; i < list.size(); i++) { // 创建每行 XSSFRow row = xs.createRow(i); // 创建并赋值this行的列 XSSFCell cell = row.createCell(0); cell.setCellValue(list.get(i).getName()); row.createCell(1).setCellValue(list.get(i).getPassword()); } // 保存到xx目录 “后缀固定” xwb.write(new FileOutputStream(new File("D:\\a.xlsx"))); }