91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot怎么集成POI實現Excel導入導出

發布時間:2022-07-22 13:53:28 來源:億速云 閱讀:159 作者:iii 欄目:開發技術

本篇內容主要講解“SpringBoot怎么集成POI實現Excel導入導出”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“SpringBoot怎么集成POI實現Excel導入導出”吧!

    知識準備

    需要了解POI工具,以及POI對Excel中的對象的封裝對應關系。

    什么是POI

    Apache POI 是用Java編寫的免費開源的跨平臺的 Java API,Apache POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。POI為“Poor Obfuscation Implementation”的首字母縮寫,意為“簡潔版的模糊實現”。

    Apache POI 是創建和維護操作各種符合Office Open XML(OOXML)標準和微軟的OLE 2復合文檔格式(OLE2)的Java API。用它可以使用Java讀取和創建,修改MS Excel文件.而且,還可以使用Java讀取和創建MS Word和MSPowerPoint文件。

    POI中基礎概念

    生成xls和xlsx有什么區別?POI對Excel中的對象的封裝對應關系?

    生成xls和xlsx有什么區別呢?

    XLSXLSX
    只能打開xls格式,無法直接打開xlsx格式可以直接打開xls、xlsx格式
    只有65536行、256列可以有1048576行、16384列
    占用空間大占用空間小,運算速度也會快一點

    POI對Excel中的對象的封裝對應關系如下:

    ExcelPOI XLSPOI XLSX(Excel 2007+)
    Excel 文件HSSFWorkbook (xls)XSSFWorkbook(xlsx)
    Excel 工作表HSSFSheetXSSFSheet
    Excel 行HSSFRowXSSFRow
    Excel 單元格HSSFCellXSSFCell
    Excel 單元格樣式HSSFCellStyleHSSFCellStyle
    Excel 顏色HSSFColorXSSFColor
    Excel 字體HSSFFontXSSFFont

    實現案例

    這里展示SpringBoot集成POI導出用戶列表的和導入用戶列表的例子。

    Pom依賴

    引入poi的依賴包

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

    導出Excel

    UserController中導出的方法

    @ApiOperation("Download Excel")
    @GetMapping("/excel/download")
    public void download(HttpServletResponse response) {
        try {
            SXSSFWorkbook workbook = userService.generateExcelWorkbook();
            response.reset();
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition",
                    "attachment;filename=user_excel_" + System.currentTimeMillis() + ".xlsx");
            OutputStream os = response.getOutputStream();
            workbook.write(os);
            workbook.dispose();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    UserServiceImple中導出Excel的主方法

    private static final int POSITION_ROW = 1;
    private static final int POSITION_COL = 1;
    
    /**
      * @return SXSSFWorkbook
      */
    @Override
    public SXSSFWorkbook generateExcelWorkbook() {
        SXSSFWorkbook workbook = new SXSSFWorkbook();
        Sheet sheet = workbook.createSheet();
    
        int rows = POSITION_ROW;
        int cols = POSITION_COL;
    
        // 表頭
        Row head = sheet.createRow(rows++);
        String[] columns = new String[]{"ID", "Name", "Email", "Phone", "Description"};
        int[] colWidths = new int[]{2000, 3000, 5000, 5000, 8000};
        CellStyle headStyle = getHeadCellStyle(workbook);
        for (int i = 0; i < columns.length; ++i) {
            sheet.setColumnWidth(cols, colWidths[i]);
            addCellWithStyle(head, cols++, headStyle).setCellValue(columns[i]);
        }
    
        // 表內容
        CellStyle bodyStyle = getBodyCellStyle(workbook);
        for (User user : getUserList()) {
            cols = POSITION_COL;
            Row row = sheet.createRow(rows++);
            addCellWithStyle(row, cols++, bodyStyle).setCellValue(user.getId());
            addCellWithStyle(row, cols++, bodyStyle).setCellValue(user.getUserName());
            addCellWithStyle(row, cols++, bodyStyle).setCellValue(user.getEmail());
            addCellWithStyle(row, cols++, bodyStyle).setCellValue(String.valueOf(user.getPhoneNumber()));
            addCellWithStyle(row, cols++, bodyStyle).setCellValue(user.getDescription());
        }
        return workbook;
    }
    
    private Cell addCellWithStyle(Row row, int colPosition, CellStyle cellStyle) {
        Cell cell = row.createCell(colPosition);
        cell.setCellStyle(cellStyle);
        return cell;
    }
    
    private List<User> getUserList() {
        return Collections.singletonList(User.builder()
                .id(1L).userName("pdai").email("pdai@pdai.tech").phoneNumber(121231231231L)
                .description("hello world")
                .build());
    }
    
    private CellStyle getHeadCellStyle(Workbook workbook) {
        CellStyle style = getBaseCellStyle(workbook);
    
        // fill
        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    
        return style;
    }
    
    private CellStyle getBodyCellStyle(Workbook workbook) {
        return getBaseCellStyle(workbook);
    }
    
    private CellStyle getBaseCellStyle(Workbook workbook) {
        CellStyle style = workbook.createCellStyle();
    
        // font
        Font font = workbook.createFont();
        font.setBold(true);
        style.setFont(font);
    
        // align
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.TOP);
    
        // border
        style.setBorderBottom(BorderStyle.THIN);
        style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderLeft(BorderStyle.THIN);
        style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderRight(BorderStyle.THIN);
        style.setRightBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderTop(BorderStyle.THIN);
        style.setTopBorderColor(IndexedColors.BLACK.getIndex());
    
        return style;
    }

    導出后的excel如下

    SpringBoot怎么集成POI實現Excel導入導出

    導入Excel

    我們將上面導出的excel文件導入。

    UserController中導入的方法

    @ApiOperation("Upload Excel")
    @PostMapping("/excel/upload")
    public ResponseResult<String> upload(@RequestParam(value = "file", required = true) MultipartFile file) {
        try {
            userService.upload(file.getInputStream());
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseResult.fail(e.getMessage());
        }
        return ResponseResult.success();
    }

    UserServiceImple中導入Excel的主方法

    @Override
    public void upload(InputStream inputStream) throws IOException {
        XSSFWorkbook book = new XSSFWorkbook(inputStream);
        XSSFSheet sheet = book.getSheetAt(0);
        // add some validation here
    
        // parse data
        int cols;
        for (int i = POSITION_ROW; i < sheet.getLastRowNum(); i++) {
            XSSFRow row = sheet.getRow(i + 1); // 表頭不算
            cols = POSITION_COL;
            User user = User.builder()
                    .id(getCellLongValue(row.getCell(cols++)))
                    .userName(getCellStringValue(row.getCell(cols++)))
                    .email(getCellStringValue(row.getCell(cols++)))
                    .phoneNumber(Long.parseLong(getCellStringValue(row.getCell(cols++))))
                    .description(getCellStringValue(row.getCell(cols++)))
                    .build();
            log.info(user.toString());
        }
    
        book.close();
    }
    
    private String getCellStringValue(XSSFCell cell) {
        try {
            if (null!=cell) {
                return String.valueOf(cell.getStringCellValue());
            }
        } catch (Exception e) {
            return String.valueOf(getCellIntValue(cell));
        }
        return "";
    }
    
    private long getCellLongValue(XSSFCell cell) {
        try {
            if (null!=cell) {
                return Long.parseLong("" + (long) cell.getNumericCellValue());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0L;
    }
    
    private int getCellIntValue(XSSFCell cell) {
        try {
            if (null!=cell) {
                return Integer.parseInt("" + (int) cell.getNumericCellValue());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    通過PostMan進行接口測試

    SpringBoot怎么集成POI實現Excel導入導出

    執行接口后,后臺的日志如下

    2022-06-10 21:36:01.720  INFO 15100 --- [nio-8080-exec-2] t.p.s.f.e.p.s.impl.UserServiceImpl       : User(id=1, userName=pdai, email=pdai@pdai.tech, phoneNumber=121231231231, description=hello world)

    到此,相信大家對“SpringBoot怎么集成POI實現Excel導入導出”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    寿阳县| 浮山县| 安仁县| 交口县| 兴宁市| 慈利县| 海宁市| 文成县| 庄浪县| 胶州市| 河东区| 基隆市| 莆田市| 普定县| 洞头县| 诸城市| 浠水县| 娄烦县| 宁乡县| 陵水| 鄂托克前旗| 诸城市| 上犹县| 吴川市| 永川市| 麻江县| 澎湖县| 会泽县| 竹溪县| 无为县| 汤阴县| 普陀区| 抚顺县| 镇安县| 中宁县| 乐至县| 方正县| 嘉义县| 鱼台县| 启东市| 黔江区|