最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot中poi使用操作方法

 更新時(shí)間:2023年08月21日 09:22:25   作者:小鮑侃java  
在項(xiàng)目中,有很多對(duì)excel的操作,大都數(shù)時(shí)候我們都會(huì)使用poi工具類,本文將介紹poi的一些使用方法,感興趣的朋友跟隨小編一起看看吧

在這里插入圖片描述

在項(xiàng)目中,有很多對(duì)excel的操作,大都數(shù)時(shí)候我們都會(huì)使用poi工具類,本文將介紹poi的一些使用方法。

1.poi導(dǎo)入excel,并展示數(shù)據(jù)

使用poi導(dǎo)入excel,解析后返回List數(shù)據(jù)到前臺(tái)展示。

 /**
     * 
     * (讀入excel文件,解析后返回)
     * @param file(文件類型)
     * @throws IOException
     * @return List<String[]>
     */
    public static List<String[]> readExcel(MultipartFile file)
        throws IOException {
        // 檢查文件
        checkFile(file);
        // 獲得Workbook工作薄對(duì)象
        Workbook workbook = getWorkBook(file);
        // 創(chuàng)建返回對(duì)象,把每行中的值作為一個(gè)數(shù)組,所有行作為一個(gè)集合返回
        List<String[]> list = new ArrayList<String[]>();
        if (workbook != null) {
            for (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++ ) {
                // 獲得當(dāng)前sheet工作表
                Sheet sheet = workbook.getSheetAt(sheetNum);
                if (sheet == null) {
                    continue;
                }
                // 獲得當(dāng)前sheet的開(kāi)始行
                int firstRowNum = sheet.getFirstRowNum();
                // 獲得當(dāng)前sheet的結(jié)束行
                int lastRowNum = sheet.getLastRowNum();
                // 循環(huán)除了第一行的所有行
                for (int rowNum = firstRowNum + 1; rowNum <= lastRowNum; rowNum++ ) {
                    // 獲得當(dāng)前行
                    Row row = sheet.getRow(rowNum);
                    if (row == null) {
                        continue;
                    }
                    // 獲得當(dāng)前行的開(kāi)始列
                    int firstCellNum = row.getFirstCellNum();
                    // 獲得當(dāng)前行的列數(shù)
                    int lastCellNum = row.getLastCellNum();
                    String[] cells = new String[row.getLastCellNum()];
                    // 循環(huán)當(dāng)前行
                    for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++ ) {                    
                        Cell cell=row.getCell(cellNum, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL);
                        cells[cellNum] = getCellValue(cell);
                    }
                    list.add(cells);
                }
            }
        }
        return list;
    }
    /**
     * 
     * (判斷文件)
     * @param file
     * @throws IOException
     * @return void
     */
    public static void checkFile(MultipartFile file)
        throws IOException {
        // 判斷文件是否存在
        if (null == file) {
            throw new FileNotFoundException("文件不存在!");
        }
        // 獲得文件名
        String fileName = file.getOriginalFilename();
        // 判斷文件是否是excel文件
        if (!fileName.endsWith(XLS_TYPE) && !fileName.endsWith(XLSX_TYPE)) {
            throw new IOException(fileName + "不是excel文件");
        }
    }
    public static String getCellValue(Cell cell) {
        String cellValue = "";
        if (cell == null) {
            return cellValue;
        }
        // 把數(shù)字當(dāng)成String來(lái)讀,避免出現(xiàn)1讀成1.0的情況
        if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
            cell.setCellType(Cell.CELL_TYPE_STRING);
        }
        // 判斷數(shù)據(jù)的類型
        switch (cell.getCellType()) {
            // 數(shù)字
            case Cell.CELL_TYPE_NUMERIC:
                cellValue = String.valueOf(cell.getNumericCellValue());
                break;
            // 字符串
            case Cell.CELL_TYPE_STRING:
                cellValue = String.valueOf(cell.getStringCellValue());
                break;
            // Boolean
            case Cell.CELL_TYPE_BOOLEAN:
                cellValue = String.valueOf(cell.getBooleanCellValue());
                break;
            // 公式
            case Cell.CELL_TYPE_FORMULA:
                cellValue = String.valueOf(cell.getCellFormula());
                break;
            // 空值
            case Cell.CELL_TYPE_BLANK:
                cellValue = "";
                break;
            // 故障
            case Cell.CELL_TYPE_ERROR:
                cellValue = "非法字符";
                break;
            default:
                cellValue = "未知類型";
                break;
        }
        return cellValue;
    }
    /**
     * 
     * (getWorkBook:(創(chuàng)建WorkBook對(duì)象))
     * @param file
     * @return
     * @return Workbook
     */
    public static Workbook getWorkBook(MultipartFile file) {
        // 獲得文件名
        String fileName = file.getOriginalFilename();
        // 創(chuàng)建Workbook工作薄對(duì)象,表示整個(gè)excel
        Workbook workbook = null;
        try {
            // 獲取excel文件的io流
            InputStream is = file.getInputStream();
            // 根據(jù)文件后綴名不同(xls和xlsx)獲得不同的Workbook實(shí)現(xiàn)類對(duì)象
            if (fileName.endsWith(XLS_TYPE)) {
                // 2003
                workbook = new HSSFWorkbook(is);
            }
            else if (fileName.endsWith(XLSX_TYPE)) {
                // 2007
                workbook = new XSSFWorkbook(is);
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return workbook;
    }

2.poi導(dǎo)出excel并以web下載方式保存excel

將數(shù)據(jù)庫(kù)中的數(shù)據(jù)組裝成excel并導(dǎo)出,并在web下載欄中直接下載。

/**
     * 人員導(dǎo)出
     *
     * @param sysSysUserVO
     * @throws IOException
     */
    @PostMapping("/exportUser")
    @ApiOperation(value = "導(dǎo)出人員excel", notes = "導(dǎo)出人員excel")
    public void
        exportUser(@ApiParam(name = "人員id", value = "人員id", required = false) @RequestBody List<SysUserVO> sysSysUserVO)
            throws IOException {
        List<SysUserVO> middleList = new ArrayList<>();
        // 查詢用戶詳細(xì)信息
        for (SysUserVO sysUserVO : sysSysUserVO) {
            List<SysUserVO> resultListSysUser = sysUserService.querySysUserAll(sysUserVO);
            userInfoUtil.completionInformation(resultListSysUser.get(0));
            middleList.add(resultListSysUser.get(0));
        }
        // excle格式
        String[] headers = {"用戶名", "姓名", "密碼", "啟動(dòng)狀態(tài)", "崗位", "角色", "所屬部門(mén)", "手機(jī)", "郵箱", "身份證號(hào)"};
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet();
        // 設(shè)置列寬
        sheet.setDefaultColumnWidth((short)18);
        HSSFRow row = sheet.createRow(0);
        for (short i = 0; i < headers.length; i++) {
            // 創(chuàng)建單元格,每行多少數(shù)據(jù)就創(chuàng)建多少個(gè)單元格
            HSSFCell cell = row.createCell(i);
            HSSFRichTextString text = new HSSFRichTextString(headers[i]);
            // 給單元格設(shè)置內(nèi)容
            cell.setCellValue(text);
        }
        for (int j = 0; j < middleList.size(); j++) {
            SysUserVO export = middleList.get(j);
            // 從第二行開(kāi)始填充數(shù)據(jù)
            row = sheet.createRow(j + 1);
            List<String> datas = new ArrayList<>();
            String userName = export.getUsername();
            String trueName = export.getTureName();
            String password = export.getPassword();
            String status = String.valueOf(export.getIsEnabled());
            String postName = export.getPostName();
            String roleName = export.getRoleName();
            String organName = export.getOrganizationName();
            String phone = export.getMobile();
            String email = export.getEmail();
            String identityCard = export.getIdentityCard();
            datas.add(userName);
            datas.add(trueName);
            datas.add(password);
            datas.add(status);
            datas.add(postName);
            datas.add(roleName);
            datas.add(organName);
            datas.add(phone);
            datas.add(email);
            datas.add(identityCard);
            for (int k = 0; k < datas.size(); k++) {
                String string = datas.get(k);
                HSSFCell cell = row.createCell(k);
                HSSFRichTextString richString = new HSSFRichTextString(string);
                HSSFFont font3 = workbook.createFont();
                // 定義Excel數(shù)據(jù)顏色,這里設(shè)置為藍(lán)色
                font3.setColor(HSSFColor.BLUE.index);
                richString.applyFont(font3);
                cell.setCellValue(richString);
            }
        }
        String fileName = "人員導(dǎo)出.xls";
        // 導(dǎo)出
        HttpServletResponse response =
            ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();
        RequestAttributes requsetAttributes = RequestContextHolder.currentRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes)requsetAttributes).getRequest();
        // 獲得瀏覽器代理信息
        final String userAgent = request.getHeader("USER-AGENT");
        // 判斷瀏覽器代理并分別設(shè)置響應(yīng)給瀏覽器的編碼格式
        if (StringUtils.contains(userAgent, "MSIE") || StringUtils.contains(userAgent, "Trident")) {
            // IE瀏覽器
            fileName = URLEncoder.encode(fileName, "UTF-8");
        } else if (StringUtils.contains(userAgent, "Mozilla")) {
            // google,火狐瀏覽器
            fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
        } else {
            // 其他瀏覽器
            fileName = URLEncoder.encode(fileName, "UTF-8");// 其他瀏覽器
        }
        // 設(shè)置HTTP響應(yīng)頭
        response.reset();
        // 重置 如果不在頁(yè)面上顯示而是下載下來(lái) 則放開(kāi)注釋
        response.setContentType("application/octet-stream");
        response.addHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
        OutputStream os = response.getOutputStream();
        workbook.write(os);
        os.close();
    }

3.poi導(dǎo)出并以流方式保存excel

將數(shù)據(jù)庫(kù)中的數(shù)據(jù)組裝成excel并導(dǎo)出,并以數(shù)據(jù)流方式存在指定的路徑。

public class BarcodeExportlFlow implements IBarcodeExport {
    @Autowired
    BarcodeManageBatchSerivce barcodeManageBatchSerivce;
    @Override
    public OutputStream exportData() throws IOException {
        //查詢批次碼
        BarcodeBatchManageBo input = new BarcodeBatchManageBo();
        List<BarcodeBatchManageBo> middleList = barcodeManageBatchSerivce.selectBatch(input);
        String[] headers = {"id", "條碼批次碼", "激活狀態(tài)", "有效狀態(tài)", "導(dǎo)入人", "導(dǎo)入時(shí)間", "激活人", "激活時(shí)間", "作廢人", "作廢時(shí)間", "本批次條數(shù)"};
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet();
        //設(shè)置列寬
        sheet.setDefaultColumnWidth((short) 18);
        HSSFRow row = sheet.createRow(0);
        for (short i = 0; i < headers.length; i++) {
            //創(chuàng)建單元格,每行多少數(shù)據(jù)就創(chuàng)建多少個(gè)單元格
            HSSFCell cell = row.createCell(i);
            HSSFRichTextString text = new HSSFRichTextString(headers[i]);
            //給單元格設(shè)置內(nèi)容
            cell.setCellValue(text);
        }
        for (int j = 0; j < middleList.size(); j++) {
            BarcodeBatchManageBo export = middleList.get(j);
            //從第二行開(kāi)始填充數(shù)據(jù)
            row = sheet.createRow(j + 1);
            List<String> datas = new ArrayList<>();
            String id = export.getId().toString();
            String batchCode = export.getBatchCode();
            String activationStatus = export.getActivationStatus();
            String effectiveStatus = export.getEffectiveStatus();
            datas.add(id);
            datas.add(batchCode);
            datas.add(activationStatus);
            datas.add(effectiveStatus);
            for (int k = 0; k < datas.size(); k++) {
                String string = datas.get(k);
                HSSFCell cell = row.createCell(k);
                HSSFRichTextString richString = new HSSFRichTextString(string);
                HSSFFont font3 = workbook.createFont();
                //定義Excel數(shù)據(jù)顏色,這里設(shè)置為藍(lán)色
                font3.setColor(HSSFColor.BLUE.index);
                richString.applyFont(font3);
                cell.setCellValue(richString);
            }
        }
        FileOutputStream fos = new FileOutputStream("D:/wb.xls");
        workbook.write(fos);
        fos.close();
        return null;
    }
}

到此這篇關(guān)于springboot中poi操作合集的文章就介紹到這了,更多相關(guān)springboot poi操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決SpringBoot下Redis序列化亂碼的問(wèn)題

    解決SpringBoot下Redis序列化亂碼的問(wèn)題

    這篇文章主要介紹了解決SpringBoot下Redis序列化亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring框架實(shí)現(xiàn)依賴注入的原理

    Spring框架實(shí)現(xiàn)依賴注入的原理

    依賴注入是由“依賴”和“注入”兩個(gè)詞匯組合而成,那么我們?cè)僖淮雾樚倜希謩e分析這兩個(gè)詞語(yǔ),這篇文章主要介紹了Spring DI依賴注入詳解,需要的朋友可以參考下
    2023-04-04
  • java文件輸出流寫(xiě)文件的幾種方法

    java文件輸出流寫(xiě)文件的幾種方法

    這篇文章主要介紹了java文件輸出流寫(xiě)文件的幾種方法,需要的朋友可以參考下
    2014-04-04
  • JVM要雙親委派的原因及如何打破它

    JVM要雙親委派的原因及如何打破它

    平時(shí)做業(yè)務(wù)開(kāi)發(fā)比較少接觸類加載器,但是如果想深入學(xué)習(xí),了解類加載的原理是必不可少的.java的類加載器有哪些?什么是雙親委派?為什么要雙親委派?如何打破它?接下來(lái)本文就帶大家詳細(xì)介紹這些知識(shí) ,需要的朋友可以參考下
    2021-06-06
  • SpringBoot項(xiàng)目構(gòu)建的實(shí)現(xiàn)過(guò)程

    SpringBoot項(xiàng)目構(gòu)建的實(shí)現(xiàn)過(guò)程

    SpringBoot簡(jiǎn)化了基于Spring框架的項(xiàng)目開(kāi)發(fā),提供自動(dòng)配置、嵌入式容器等功能;可通過(guò)多種方式創(chuàng)建SpringBoot項(xiàng)目,如Maven、IDEA、STS等;Spring好項(xiàng)目后可可運(yùn)行并測(cè)試,文中還詳細(xì)介紹了SpringBoot的核心功能、創(chuàng)建項(xiàng)目的的步驟和一些配置方法
    2026-04-04
  • 深入學(xué)習(xí)Java 動(dòng)態(tài)代理

    深入學(xué)習(xí)Java 動(dòng)態(tài)代理

    Java 動(dòng)態(tài)代理機(jī)制的出現(xiàn),使得 Java 開(kāi)發(fā)人員不用手工編寫(xiě)代理類,只要簡(jiǎn)單地指定一組接口及委托類對(duì)象,便能動(dòng)態(tài)地獲得代理類。下面小編和大家來(lái)一起學(xué)習(xí)一下吧
    2019-05-05
  • SpringMVC框架如何與Junit整合看這個(gè)就夠了

    SpringMVC框架如何與Junit整合看這個(gè)就夠了

    這篇文章主要介紹了SpringMVC框架如何與Junit整合看這個(gè)就夠了,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • SpringBoot返回long,前端接收進(jìn)度丟失,@JsonSerialize不生效問(wèn)題

    SpringBoot返回long,前端接收進(jìn)度丟失,@JsonSerialize不生效問(wèn)題

    這篇文章主要介紹了SpringBoot返回long,前端接收進(jìn)度丟失,@JsonSerialize不生效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • MyBatis基于pagehelper實(shí)現(xiàn)分頁(yè)原理及代碼實(shí)例

    MyBatis基于pagehelper實(shí)現(xiàn)分頁(yè)原理及代碼實(shí)例

    這篇文章主要介紹了MyBatis基于pagehelper實(shí)現(xiàn)分頁(yè)原理及代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 劍指Offer之Java算法習(xí)題精講鏈表與數(shù)組專項(xiàng)訓(xùn)練

    劍指Offer之Java算法習(xí)題精講鏈表與數(shù)組專項(xiàng)訓(xùn)練

    跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過(guò)之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化
    2022-03-03

最新評(píng)論

根河市| 两当县| 乌鲁木齐县| 田东县| 平阳县| 新丰县| 科技| 秀山| 荔浦县| 平利县| 格尔木市| 通河县| 临漳县| 龙里县| 廉江市| 桦南县| 交口县| 会宁县| 新巴尔虎右旗| 仪征市| 华池县| 建德市| 彝良县| 九台市| 措勤县| 嵊泗县| 色达县| 昔阳县| 孝昌县| 佳木斯市| 会泽县| 曲周县| 东平县| 安泽县| 沁阳市| 侯马市| 铜山县| 聊城市| 英德市| 鄂伦春自治旗| 大理市|