溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java如何使用POI操作Excel

發(fā)布時(shí)間:2022-02-28 11:28:14 來源:億速云 閱讀:287 作者:小新 欄目:web開發(fā)

這篇文章主要介紹了Java如何使用POI操作Excel,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

Java使用POI操作Excel

1. POI操作Excel

1.1. 依賴

<!--操作excel-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.0</version>
        </dependency>

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

1.2. 讀取Excel

1.2.1. Excel文件內(nèi)容

Java如何使用POI操作Excel

1.2.2. 代碼

 /**
     * 讀取excel
     */
    public static void readExcel() {
        InputStream inputStream = null;
        XSSFWorkbook xssfWorkbook = null;
        try {

            String past = "/操作excel.xlsx";
            inputStream = new FileInputStream(past);
            xssfWorkbook = new XSSFWorkbook(inputStream);
            //獲取sheet的個(gè)數(shù)
            int numberOfSheets = xssfWorkbook.getNumberOfSheets();
            //獲取指定的sheet
            System.out.println(numberOfSheets);

            //通過指定名稱獲取
            XSSFSheet sheet = xssfWorkbook.getSheet("筆記本");
            //通過下標(biāo)獲取
            XSSFSheet sheetAt = xssfWorkbook.getSheetAt(1);
            if (sheetAt != null) {
                //最后一行有數(shù)據(jù)的
                int lastRowNum = sheetAt.getLastRowNum();
                XSSFRow row;
                short lastCellNum;
                XSSFCell cell;

                for (int i = 0; i <= lastRowNum; i++) {
                    //獲取指定行
                    row = sheetAt.getRow(i);
                    if (row == null) {
                        continue;
                    }
                    //最后一列有數(shù)據(jù)的
                    lastCellNum = row.getLastCellNum();
                    for (int j = 0; j <= lastCellNum; j++) {
                        cell = row.getCell(j);
                        if (cell == null) {
                            continue;
                        }
                        //數(shù)據(jù)類型
                        CellType cellType = cell.getCellType();
                        //字符串
                        if (CellType.STRING == cellType) {
                            System.out.println(cell.toString());
                        }
                        //數(shù)字
                        else if (CellType.NUMERIC == cellType) {
                            try {
                                System.out.println(cell.getDateCellValue());
                            } catch (Exception e) {
                                System.out.println(cell.toString());
                            }
                        }
                        //&hellip;&hellip;
                        else {
                            System.out.println(cell.toString());
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

1.2.3. 控制臺(tái)輸出結(jié)果

2
便簽名稱
便簽分類
創(chuàng)建時(shí)間
創(chuàng)建人
擁有人
小明的便簽
學(xué)習(xí)便簽
Tue Sep 03 00:00:00 CST 2019
小明
小明
小明的個(gè)人便簽
個(gè)人便簽
Sun Sep 08 00:00:00 CST 2019
小明
小明

1.3. 生成excel

1.3.1. 代碼

 /**
     * 生成excel
     */
    public static void creatExcel() {
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook();

        //創(chuàng)建一個(gè)sheet
        XSSFSheet sheet1 = xssfWorkbook.createSheet("第一個(gè)新建的sheet");

        //設(shè)置高度和寬度,也可以每行每列單獨(dú)分開設(shè)置
        //參數(shù)為字符個(gè)數(shù)
        sheet1.setDefaultColumnWidth(20);
        sheet1.setDefaultRowHeight((short) (33 * 20));
        //第二個(gè)參數(shù)為字符寬度的1/256
        sheet1.setColumnWidth(5, 30 * 256);

        //設(shè)置單元格樣式
        XSSFCellStyle cellStyle = xssfWorkbook.createCellStyle();

        // 字體樣式
        Font fontStyle = xssfWorkbook.createFont();
        fontStyle.setBold(true);
        // 字體
        fontStyle.setFontName("等線");
        // 大小
        fontStyle.setFontHeightInPoints((short) 11);
        // 將字體樣式添加到單元格樣式中
        cellStyle.setFont(fontStyle);

        //水平居中
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        //垂直居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

        //設(shè)置 單元格填充色
        DefaultIndexedColorMap defaultIndexedColorMap = new DefaultIndexedColorMap();
        XSSFColor clr = new XSSFColor(defaultIndexedColorMap);
        byte[] bytes = {
                (byte) 217,
                (byte) 217,
                (byte) 217
        };
        clr.setRGB(bytes);
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        cellStyle.setFillForegroundColor(clr);

        //設(shè)置單元格不為鎖定,可編輯,反是用了這個(gè)樣式的都可編輯
        cellStyle.setLocked(false);
        //鎖定整個(gè)sheet不可編輯
        sheet1.protectSheet("1231312");


        //創(chuàng)建一行數(shù)據(jù)
        XSSFRow row;
        XSSFCell cell;
        row = sheet1.createRow(0);
        cell = row.createCell(0);
        //設(shè)值
        cell.setCellValue("2");


        //合并單元格
        CellRangeAddress cra = new CellRangeAddress(1, 1, 0, 3); // 起始行, 終止行, 起始列, 終止列
        sheet1.addMergedRegion(cra);
        //設(shè)置合并單元格的樣式
        // 使用RegionUtil類為合并后的單元格添加邊框
        // 下邊框
        RegionUtil.setBorderBottom(BorderStyle.MEDIUM_DASHED, cra, sheet1);
        // 左邊框
        RegionUtil.setBorderLeft(BorderStyle.MEDIUM_DASHED, cra, sheet1);
        row = sheet1.getRow(1);

        //設(shè)置合并單元格內(nèi)的文本樣式
        //但這個(gè)單元格的邊框樣式會(huì)覆蓋上面設(shè)置的合并單元格的樣式
        CellUtil.getCell(row, 0).setCellStyle(cellStyle);


        //設(shè)置單個(gè)單元格的樣式
        row = sheet1.createRow(2);
        cell = row.createCell(0);
        cell.setCellStyle(cellStyle);

        //設(shè)置數(shù)據(jù)校驗(yàn)
        //序列校驗(yàn)
        String[] strArray = {
                "星期一",
                "星期二",
                "星期三"
        };
        XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet) sheet1);
        XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(strArray);
        CellRangeAddressList addressList = new CellRangeAddressList(3, 3, 0, 2);
        XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);
        //顯示報(bào)錯(cuò)提示框
        validation.setShowErrorBox(true);
        validation.createErrorBox("錯(cuò)誤提示", "只能選擇指定的內(nèi)容!");
        //設(shè)置單元格右側(cè)顯示剪頭符號(hào),顯示可用的選項(xiàng),默認(rèn)為true
        validation.setSuppressDropDownArrow(true);
        //顯示提示信息
        validation.setShowPromptBox(true);
        validation.createPromptBox("提示信息", "請(qǐng)選擇星期填入!");
        sheet1.addValidationData(validation);

        //保護(hù)工作薄不可被修改
        xssfWorkbook.lockStructure();
        //這個(gè)不知道有啥用
        xssfWorkbook.lockRevision();
        //鎖定excel的窗口大小,不能無限制的橫向,縱向拉伸。
        xssfWorkbook.lockWindows();

        xssfWorkbook.createSheet("第二個(gè)人sheet");


        OutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream("/創(chuàng)建excel.xlsx");
            xssfWorkbook.write(outputStream);
            outputStream.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

1.3.2. 生成excel文件內(nèi)容

Java如何使用POI操作Excel
Java如何使用POI操作Excel

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Java如何使用POI操作Excel”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI