你知道什么是POI吗?

java中的POI是什么?

POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”

是用Java编写的免费开源的跨平台的 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

简而言之,就是"进行MsOffice进行读写的这样一个东西“

POI下包结构说明:

HSSF - 提供读写Microsoft Excel格式档案的功能。

XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。

HWPF - 提供读写Microsoft Word格式档案的功能。

HSLF - 提供读写Microsoft PowerPoint格式档案的功能。

HDGF - 提供读写Microsoft Visio格式档案的功能。

本息主要讲我遇到的 Excel操作:

POI提供了HSSF、XSSF以及SXSSF三种方式操作Excel。

(1)HSSF:Excel97-2003版本,扩展名为.xls。一个sheet最大行数65536,最大列数256。

(2)XSSF:Excel2007版本开始,扩展名为.xlsx。一个sheet最大行数1048576,最大列数16384。

(3)SXSSF:是在XSSF基础上,POI3.8版本开始提供的支持低内存占用的操作方式,扩展名为.xlsx。

Excel版本兼容性是向下兼容。

三种类的接口和方法如下:

HSSF:HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell……

XSSF:XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell……

SXSSF:SXSSFWorkbook、Sheet、Row、Cell……

很重要的一点,SXSSF之所以是一种低内存操作方式,是因为他的构造方法:

System.out.println(System.getProperty("java.io.tmpdir"));

案例代码:


@RequestMapping(value = "/exportExcel", method = RequestMethod.GET)
@ApiOperation(value = "导出Excel", notes = "")
public void exportExcel(@ModelAttribute OhHazard pojo, HttpServletResponse res) throws IOException {
   exportExcel(res,pojo);
}
private void exportExcel(HttpServletResponse res, Object pojo) throws IOException {
   List<Object> list = service.selectPageList(pojo, 1, Integer.MAX_VALUE).getList();//这是查询语句,需根据实际需求
   Workbook wb = new XSSFWorkbook();//创建一个新的工作簿    
   Sheet sheet = wb.createSheet("导出数据");//创建第一个Sheet页,括号内是工作簿的名字. 
   String fileName = "表名文字描述" + DateUtil.formatDate(new Date()) + ".xlsx";//给导出的文件取名字
   genOhhazardExcel(list, sheet,wb);
   sheet.setDisplayGridlines(false);
   WebUtils.writeExcel(wb, fileName,res);
}

// TODO: 2021/10/12  导出
private void genObjectExcel(List<Object> list, Sheet sheet,Workbook wb) throws IOException {
   // 设置第一行表头
   Row rowHead = sheet.createRow(0);
   //给表头行创建列(这里创建了8列)
   rowHead.createCell(0).setCellValue("XXXXX");
   rowHead.createCell(1).setCellValue("XXXXX");
   rowHead.createCell(2).setCellValue("XXXXX");
   rowHead.createCell(3).setCellValue("XXXXX");
   rowHead.createCell(4).setCellValue("XXXXX");
   rowHead.createCell(5).setCellValue("XXXXX");
   .....
   rowHead.createCell(n).setCellValue("XXXX");

   CellStyle cellStyleHead = ExcelUtils.headCellStyle(wb);//给单元格设置表头格式

   for (int i = 0; i <n+1; i++) {//这个n是上面对应0~5列数最后一列5
      rowHead.getCell(i).setCellStyle(cellStyleHead);
   }
    //当列表不为空的时候,就进行遍历
   if(!CollectionUtils.isEmpty(list)){
      CellStyle style = ExcelUtils.cellStyle(wb);
      CellStyle borderCellStyle = ExcelUtils.cellBorder(wb.createCellStyle());
      for(int rownum = 0; rownum < list.size(); rownum++){
         Row row = sheet.createRow(rownum+1);
         row.setHeight((short) 360);
         类名 对象名=list.get(rownum);
         //下列进行单元格的赋值
         row.createCell(0).setCellValue(对象.getXXX());//取设置每一个单元格的值
         if(!StringUtils.isEmpty(对象.XXX1())){
            row.createCell(1).setCellValue(对象.XXX1());//
         }
         .....//后续皆是如此设置一个单元格值
        //遍历
         for (int i = 0; i <n+1 ; i++) {
            if (row.getCell(i) != null) {
               row.getCell(i).setCellStyle(style);
            } else {
               row.createCell(i).setCellStyle(borderCellStyle);
            }
         }
      }
      ExcelUtils.autoColumnWidth(sheet, 8);//
   }
   else{
      sheet.createRow(1).createCell(0).setCellValue("查询不到数据");
   }



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值