POI实现json字符串解析后导出到excel

来源:互联网 发布:vga矩阵切换器24进 编辑:程序博客网 时间:2024/06/05 06:31

POI介绍

Apache POI 实现了java对Microsoft office文件的读写,以下只讲excel


POI需要的包

poi-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar

pom.xml文件

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->        <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi</artifactId>            <version>3.16</version>        </dependency>        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->        <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi-ooxml</artifactId>            <version>3.16</version>        </dependency>

POI基本语法(参考poi API)

  • 创建WorkBook
    Workbook wb = new HSSFWorkbook();    //导出到项目文件夹的workbook.xls文件    FileOutputStream fileOut = new FileOutputStream("workbook.xls");    wb.write(fileOut);    fileOut.close();    Workbook wb = new XSSFWorkbook();    //导出到项目文件夹的workbook.xlsx文件    FileOutputStream fileOut = new FileOutputStream("workbook.xlsx");    wb.write(fileOut);    fileOut.close();
  • 创建sheet页
    Workbook wb = new HSSFWorkbook();  // or new XSSFWorkbook();    Sheet sheet1 = wb.createSheet("new sheet");// 创建第一个sheet页 sheet1    Sheet sheet2 = wb.createSheet("second sheet");// 创建第二个sheet页 sheet2    FileOutputStream fileOut = new FileOutputStream("workbook.xls");    wb.write(fileOut);    fileOut.close();
  • 创建单元格
    Workbook wb = new HSSFWorkbook();    //Workbook wb = new XSSFWorkbook();    CreationHelper createHelper = wb.getCreationHelper();    Sheet sheet = wb.createSheet("new sheet");    // 在这个sheet页创建一行,从0开始    Row row = sheet.createRow((short)0);    // 在这一行创建一个单元格,在0号位    Cell cell = row.createCell(0);    // 给这个单元格赋值为1    cell.setCellValue(1);    // Write the output to a file    FileOutputStream fileOut = new FileOutputStream("workbook.xls");    wb.write(fileOut);    fileOut.close();

读取模板

     //excel模板路径        File fi=new File("template.xls");        InputStream in = new FileInputStream(fi);        //读取excel模板        XSSFWorkbook wb = new XSSFWorkbook(in);        //读取了模板内所有sheet内容        XSSFSheet sheet = wb.getSheetAt(0);

这样就实现了模板的读取,之后在这个sheet页创建row的时候只需要跳过模板的头几行进行创建即可


注意事项

在创建单元格时当你读取的值为空,需要提供一个判定,将空转换为空格

row.createCell(108).setCellValue(isEmpty(jsonArray.getJSONObject(0).getString(“shoushushijian”)));

private static String isEmpty(Object pObj) {        if(pObj == null) {            return " ";        } else if(pObj == "") {            return " ";        } else {            if(pObj instanceof String) {                if(((String)pObj).length() == 0) {                    return " ";                }            }            return (String)pObj;        }    }

个人在项目中遇到的小情况

tip1: json中可能没有这个键的时候使用containsKey进行判断是否存入到单元格

if (jsonArray.getJSONObject(j).containsKey(“key”))

tip2:有的json串不能转成jsonArray时在两边加上 [ ] 就能转换了

JSONArray jiwang = jsonArray.parseArray(“[” + jsonArray.getJSONObject(j).getString(“jiwang”) + “]”);

tip3:导出时如果没有对应的文件夹,会报异常,应该建立对应的文件夹
tip4:和前端良好的沟通能剩下许多修改代码的时间

原创粉丝点击