SpringBoot使用poi操作Excel

一.引入poi依赖

        <!-- poi-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.9</version>
        </dependency>

二.导出excel

 /**
     * 导出excel
     *
     * @param list 导出的数据源
     */
    public void export(List<TProduct> list) {
        try {
            // 第一步,创建一个workbook,对应一个Excel文件
            HSSFWorkbook workbook = new HSSFWorkbook();

            // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
            HSSFSheet hssfSheet = workbook.createSheet("sheet1");

            // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
            HSSFRow row = hssfSheet.createRow(0);

            // 第四步,创建单元格,并设置值表头 设置表头居中
            HSSFCellStyle hssfCellStyle = workbook.createCellStyle();

            // 居中样式
            // hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

            HSSFCell hssfCell = null;

            // 构建表头
            String[] titles = {"序号", "产品名称", "货号", "描述"};
            for (int i = 0; i < titles.length; i++) {
                hssfCell = row.createCell(i);// 列索引从0开始
                hssfCell.setCellValue(titles[i]);// 列名1
                hssfCell.setCellStyle(hssfCellStyle);// 列居中显示
            }

            // 填充数据
            for (int i = 0; i < list.size(); i++) {
                row = hssfSheet.createRow(i + 1);
                TProduct item = list.get(i);

                // 第六步,创建单元格,并设置值
                row.createCell(0).setCellValue(i + 1);

                String name = "";
                if (item.getName() != null) {
                    name = item.getName();
                }
                row.createCell(1).setCellValue(name);

                String code = "";
                if (item.getCode() != null) {
                    code = item.getCode();
                }
                row.createCell(2).setCellValue(code);

                String description = "";
                if (item.getDescription() != null) {
                    description = item.getDescription();
                }
                row.createCell(3).setCellValue(description);
            }

            // 第七步,将文件输出到客户端浏览器
            // 输出Excel文件
            FileOutputStream output = new FileOutputStream("d:\\workbook.xls");
            workbook.write(output);
            output.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

三.读取excel

 /**
     * 读取excel
     *
     * @param fileQualifyName 文件路径
     */
    public List<TProduct> readExcelData(String fileQualifyName) {
        try {
            List<TProduct> datas = new ArrayList<TProduct>();
            File file = new File(fileQualifyName);
            Workbook workbook = null;
            if (fileQualifyName.contains(".xlsx")) {
                workbook = new XSSFWorkbook(FileUtils.openInputStream(file));
            } else {
                workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
            }
            // 获取一个工作表两种方式
            // HSSFSheet sheet = workbook.getSheet("sheet0");
            // 获取工作表的第二种方式
            var sheet = workbook.getSheetAt(0);
            int firstRow = 1;
            // 获取sheet的最后一行
            int lastRow = sheet.getLastRowNum();
            // 循环内不要创建对象引用(集合中存的是对象的引用)
            TProduct company = null;
            for (int i = firstRow; i <= lastRow; i++) {
                company = new TProduct();
                var row = sheet.getRow(i);
                int lastCol = row.getLastCellNum();
                for (int j = 1; j < lastCol; j++) {
                    var cell = row.getCell(j);
                    if (cell == null) {
                        continue;
                    }
                    if (j == 1) {
                        company.setName(cell.getStringCellValue());
                        continue;
                    }
                    if (j == 2) {
                        company.setCode(cell.getStringCellValue());
                        continue;
                    }
                    if (j == 3) {
                        company.setDescription(cell.getStringCellValue());
                        continue;
                    }
                }
                // 读完一行将数据塞进去
                //company.setConfirm(true);
                datas.add(company);
            }
            return datas;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
发布了7 篇原创文章 · 获赞 1 · 访问量 357
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览