Apache POI 可以对Microsoft Office 进行操作, 下面是工作中使用的对Excel进行读写操作的常用方式.
引入依赖
<!-- excel poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency>
简单使用
主要介绍读写时, 分别常用到的一些对象及其含义, 方便自己编写util.
package com.liuzhihang.tool.excel.poi;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;/*** @author liuzhihang* @date 2018/4/20 16:12*/public class ExcelTest {public static void main(String[] args) throws Exception {// readerTest();writerTest();}private static void writerTest() throws IOException {File file = new File("c:Users/liuzhihang/Desktop/test.xlsx");if (file.exists()) {System.out.println("读取的文件存在!");file.delete();}file.createNewFile();// 操作 .xls 的 workbookWorkbook hssfWorkbook = new HSSFWorkbook();// 操作 .xlsx 的 workbookXSSFWorkbook xssfWorkbook = new XSSFWorkbook();// 创建 sheet 页XSSFSheet sheet = xssfWorkbook.createSheet();// 创建 0 行 操作对象Row row0 = sheet.createRow(0);// 创建单元格并赋值row0.createCell(0).setCellValue("序号");OutputStream outputStream = new FileOutputStream(file);// 写入文件xssfWorkbook.write(outputStream);}private static void readerTest() throws Exception {File file = new File("c:Users/liuzhihang/Desktop/parkingLotTempLate.xlsx");Workbook workBook = ExcelUtil.getWorkBook(file);// 获取 excel 页// Sheet sheetByIndex = workBook.getSheetAt(0);// Sheet sheetByName = workBook.getSheet("Sheet0");// 操作 sheetSheet sheet = workBook.getSheetAt(0);// 获取最后一行行数 从 0 开始int lastRowNum = sheet.getLastRowNum();// 获取总行数int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();// 操作行 获取第0行Row row = sheet.getRow(0);String value = row.getCell(0).getStringCellValue();}}
ExcelUtil 简单工具
poi读写 excel 的简单工具 ExcelUtil, 实际工作中可结合javaBean使用并重新编写util.
package com.liuzhihang.tool.excel.poi;import lombok.extern.log4j.Log4j2;import org.apache.commons.lang.StringUtils;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.*;import java.util.ArrayList;import java.util.List;/*** @author liuzhihang* @date 2018/4/20 12:02*/@Log4j2public class ExcelUtil {/*** 读取两列excel 返回第二列的集合** @param workbook* @return*/public static List<String> readExcelForTwoColumns(Workbook workbook) {if (workbook == null) {log.info("获取 workbook 为null");return null;}List<String> list = new ArrayList<>();try {Sheet sheet = workbook.getSheetAt(0);//获取总行数int rowNum = sheet.getLastRowNum();//正文内容应该从第二行开始,第一行为文件的标头的标题for (int i = 0; i < rowNum; i++) {Row row = sheet.getRow(i + 1);String value = getCellValue(row.getCell(1)).toString();if (StringUtils.isNotBlank(value)) {list.add(value);}}} catch (Exception e) {log.error(e.getMessage());}return list;}/*** 写 excel** @param excelFile* @param list*/public static void writerExcelForTwoColumns(File excelFile, List<String> list) {OutputStream outputStream = null;try {outputStream = new FileOutputStream(excelFile);Workbook workBook = null;String fileName = excelFile.getName();if (fileName.endsWith(".xls")) {workBook = new HSSFWorkbook();} else if (fileName.endsWith(".xlsx")) {workBook = new XSSFWorkbook();} else {log.info("文件格式不正确!, 当前文件名:{}", fileName);throw new Exception("文件格式不正确");}// 创建第 0 页Sheet sheet = workBook.createSheet();Row row1 = sheet.createRow(0);row1.createCell(0).setCellValue("序号");row1.createCell(1).setCellValue("编号");for (int i = 0; i < list.size(); i++) {Row row = sheet.createRow(i + 1);row.createCell(0).setCellValue(i + 1);row.createCell(1).setCellValue(list.get(i));}workBook.write(outputStream);} catch (Exception e) {log.error("写excel失败", e);} finally {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}/*** 获取工作表** @param file* @return*/public static Workbook getWorkBook(File file) throws Exception {String fileName = file.getName();Workbook workbook = null;try {InputStream inputStream = new FileInputStream(file);if (fileName.endsWith(".xls")) {workbook = new HSSFWorkbook(inputStream);} else if (fileName.endsWith(".xlsx")) {workbook = new XSSFWorkbook(inputStream);} else {log.info("文件格式不正确!, 当前文件名:{}", fileName);throw new Exception("文件格式不正确");}} catch (Exception e) {throw e;}return workbook;}/*** 获取单元格的数据** @param cell* @return*/public static Object getCellValue(Cell cell) {if (cell != null) {switch (cell.getCellTypeEnum()) {// 数字case NUMERIC:return cell.getNumericCellValue();// 字符串case STRING:return cell.getStringCellValue();// 公式case FORMULA:return cell.getCellFormula();// 布尔case BOOLEAN:return cell.getBooleanCellValue();case ERROR:return cell.getErrorCellValue();// 空default:return "";}}return "";}}
