Java apache POI

2018-06-14  本文已影响0人  这不挺好

一、简介

开发中经常会设计到Excel的处理,如导出Excel到数据库中,操作Excel目前有两个框架,一个是Apache 的 POI,另一个是 Java Excel
Exce中的工作簿、工作表、行、单元格中的关系:
  1. 一个Excel文件对应于一个 workboot(HSSFWorkbook)
  2. 一个 workboot 可以有多个 sheet(HSSFSheet)组成
  3. 一个 sheet 是由多个 row(HSSFRow)组成
  4. 一个 row 是由多个 cell(HSSFCell)组成

二:Apache POI常用的类

HSSF是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件 - 用户模型”

三、常用的类和方法

四:基础示例
首先引入 Apache poi 依赖
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.8</version>
        </dependency>
示例一:生成一个Excel文件
    @Test
    public static void createExcel() throws Exception {

        // 获取桌面路径
        FileSystemView fsv = FileSystemView.getFileSystemView();
        String desktop = fsv.getHomeDirectory().getPath();
        String filePath = desktop + "\\Excel.xls";
        System.out.println(filePath);

        File file = new File(filePath);
        FileOutputStream outputStream = new FileOutputStream(file);
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("测试用例 - 001页");

        HSSFRow row = sheet.createRow(0);
        String[] message = {
                "用例编号",
                "模块",
                "测试目的",
                "前置条件",
                "测试步骤",
                "预期结果",
                "实际结果",
                "测试日期",
                "执行人"
        };
        for (int i = 0; i < message.length; i++) {
            row.createCell(i).setCellValue(message[i]);

        }

        // 设置行高 30
        row.setHeightInPoints(30);

        HSSFRow row1 = sheet.createRow(1);
        row1.createCell(0).setCellValue("NO00001");


        // 日期格式化
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        HSSFCreationHelper creationHelper = workbook.getCreationHelper();
        cellStyle.setDataFormat(creationHelper.createDataFormat()
                .getFormat("yyyy-MM-dd HH:mm:ss"));

        // 设置列宽:
        sheet.setColumnWidth(7,20*256);

        HSSFCell cell = row1.createCell(7);
        cell.setCellStyle(cellStyle);
        cell.setCellValue(new Date());

        workbook.setActiveSheet(0);
        workbook.write(outputStream);
        outputStream.close();
    }
示例二:读取 Excel ,解析数据
    /**  读取一个 Excel 文件 */
    @Test
    public void readExcel() throws Exception {

        // 获取文件路径
        FileSystemView fsv = FileSystemView.getFileSystemView();
        String desktop = fsv.getHomeDirectory().getPath();
        String filePath = desktop + "/Excel.xls";


        // 读取 Excel 文件
        FileInputStream inputStream = new FileInputStream(filePath);
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        POIFSFileSystem poifsFileSystem = new POIFSFileSystem(bufferedInputStream);
        HSSFWorkbook workbook = new HSSFWorkbook(poifsFileSystem);


        HSSFSheet sheet = workbook.getSheetAt(0);
        int lastRowNum = sheet.getLastRowNum();
        System.out.println(lastRowNum);
        for (int i = 0; i < lastRowNum; i++) {
            HSSFRow row = sheet.getRow(i);
            if (row == null) break;

            short lastCellNum = row.getLastCellNum();

            for (int j = 0; j < lastCellNum; j++) {
                HSSFCell cell = row.getCell(j);
                System.out.println("cell.getCellType():" + cell.getCellType());
                String stringCellValue = row.getCell(j).getStringCellValue();
                System.out.print(stringCellValue + "   ");

            }

        }

        bufferedInputStream.close();

    }


上一篇下一篇

猜你喜欢

热点阅读