我是靠谱客的博主 要减肥啤酒,最近开发中收集的这篇文章主要介绍springboot中整合POI实现报表的导入导出1、环境准备2、poi导出报表3、poi导入报表,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言:目前世面上的Excel分为两个大的版本Excel2003和Excel2007及以上两个版本,两者之间的区别如下:
在这里插入图片描述

  • Excel2003是一个特有的二进制格式,其核心结构是复合文档类型的结构,存储数据量较小
  • Excel2007 的核心结构是 XML 类型的结构,采用的是基于 XML 的压缩方式,使其占用的空间更小,操作效率更高

Java中常见的用来操作Excl的方式一般有2种:JXLPOI

  • JXL只能对Excel进行操作,属于比较老的框架,它只支持到Excel 95-2000的版本。现在已经停止更新和维护
  • POI是apache的项目,可对微软的Word,Excel,Ppt进行操作,包括office2003和2007,Excl2003和2007。
  • poi现在一直有更新。所以现在主流使用POI

1、环境准备

新建maven项目,引入依赖

 <dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>4.0.1</version>
    </dependency>
</dependencies>

2、poi导出报表

1、样式导出

 public static void main(String[] args) throws Exception {
     //创建工作簿  HSSFWorkbook -- 2003
     Workbook wb = new XSSFWorkbook(); //2007版本
     //创建表单sheet
     Sheet sheet = wb.createSheet("测试1");
     //创建行对象  参数:索引(从0开始)
     Row row = sheet.createRow(2);
     //创建单元格对象  参数:索引(从0开始)
     Cell cell = row.createCell(2);
     //向单元格中写入内容
     cell.setCellValue("你好");

     //样式处理
     //创建样式对象
     CellStyle style = wb.createCellStyle();
     style.setBorderTop(BorderStyle.THIN);//上边框
     style.setBorderBottom(BorderStyle.THIN);//下边框
     style.setBorderLeft(BorderStyle.THIN);//左边框
     style.setBorderRight(BorderStyle.THIN);//右边框
     //创建字体对象
     Font font = wb.createFont();
     font.setFontName("宋体"); //字体
     font.setFontHeightInPoints((short)25);//字号
     style.setFont(font);

     //行高和列宽
     row.setHeightInPoints(30);//行高
     //列宽的宽度  字符宽度
     sheet.setColumnWidth(2,31 * 256);//列宽

     //剧中显示
     style.setAlignment(HorizontalAlignment.CENTER);//水平居中
     style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中

     //向单元格设置样式
     cell.setCellStyle(style);

     //文件流
     FileOutputStream pis = new FileOutputStream("D:\project-saas-hrm-vue-master\vue-master\测试.xlsx");
     //写入文件
     wb.write(pis);
     pis.close();
 }

2、导出写入图片

public static void main(String[] args) throws Exception {
       //创建工作簿  HSSFWorkbook -- 2003
       Workbook wb = new XSSFWorkbook(); //2007版本
       //创建表单sheet
       Sheet sheet = wb.createSheet("测试1");

       //读取图片流
       FileInputStream stream = new FileInputStream("D:\1.jpg");
       //转化二进制数组
       byte[] bytes = IOUtils.toByteArray(stream);
       stream.read(bytes);
       //向POI内存中添加一张图片,返回图片在图片集合中的索引
       int index = wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);//参数一:图片的二进制数据,参数二:图片类型
       //绘制图片工具类
       CreationHelper helper = wb.getCreationHelper();
       //创建一个绘图对象
       Drawing<?> patriarch = sheet.createDrawingPatriarch();
       //创建锚点,设置图片坐标
       ClientAnchor anchor = helper.createClientAnchor();
       anchor.setRow1(0);
       anchor.setCol1(0);
       //绘制图片
       Picture picture = patriarch.createPicture(anchor, index);//图片位置,图片的索引
       picture.resize();//自适应渲染图片
       //文件流
       FileOutputStream pis = new FileOutputStream("D:\project-saas-hrm-vue-master\vue-master\测试1.xlsx");
       //写入文件
       wb.write(pis);
       pis.close();
  }

3、poi导入报表

注意:sheet.getLastRowNum() 获取到的是行的索引(即实际行数减1),而row.getLastCellNum() 获取的是列数(即实际列数),两种的含义是不同的。

public static void main(String[] args) throws Exception {
       //1.根据Excel文件创建工作簿
       Workbook wb = new XSSFWorkbook("D:\test.xlsx");
       //2.获取Sheet
       Sheet sheet = wb.getSheetAt(0);//参数:索引
       //3.获取Sheet中的每一行,和每一个单元格
       for (int rowNum = 0; rowNum<= sheet.getLastRowNum() ;rowNum ++) {
           Row row = sheet.getRow(rowNum);//根据索引获取每一个行
           StringBuilder sb = new StringBuilder();
           for(int cellNum=2;cellNum< row.getLastCellNum(); cellNum ++) {
               //根据索引获取每一个单元格
               Cell cell = row.getCell(cellNum);
               //获取每一个单元格的内容
               Object value = getCellValue(cell);
               sb.append(value).append("-");
           }
           System.out.println(sb.toString());
       }
   }

   public static Object getCellValue(Cell cell) {
       //1.获取到单元格的属性类型
       CellType cellType = cell.getCellType();
       //2.根据单元格数据类型获取数据
       Object value = null;
       switch (cellType) {
           case STRING:
               value = cell.getStringCellValue();
               break;
           case BOOLEAN:
               value = cell.getBooleanCellValue();
               break;
           case NUMERIC:
               if(DateUtil.isCellDateFormatted(cell)) {
                   //日期格式
                   value = cell.getDateCellValue();
               }else{
                   //数字
                   value = cell.getNumericCellValue();
               }
               break;
           case FORMULA: //公式
               value = cell.getCellFormula();
               break;
           default:
               break;
       }
       return value;
   }

最后

以上就是要减肥啤酒为你收集整理的springboot中整合POI实现报表的导入导出1、环境准备2、poi导出报表3、poi导入报表的全部内容,希望文章能够帮你解决springboot中整合POI实现报表的导入导出1、环境准备2、poi导出报表3、poi导入报表所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部