欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用Apache POI操作Excel詳解

 更新時(shí)間:2023年06月12日 15:31:39   作者:掉頭發(fā)的王富貴  
在Java中操作Excel是日常工作中經(jīng)常遇到的問(wèn)題,而Apache Poi是一種流行且廣泛使用的方式,它提供了各種庫(kù)和工具,所以本文就來(lái)詳細(xì)如何使用Apache Poi來(lái)進(jìn)行Excel文件操作吧

在Java中操作Excel是日常工作中經(jīng)常遇到的問(wèn)題。使用Apache Poi是一種流行且廣泛使用的方式,它提供了各種庫(kù)和工具,可以幫助開(kāi)發(fā)人員直接從Java代碼中讀取、寫(xiě)入和處理Excel文件。本篇文章將詳細(xì)介紹如何使用Apache Poi來(lái)進(jìn)行Excel文件操作,在這里,我們著重講解Apache Poi的基礎(chǔ)知識(shí)、如何讀取Excel文件以及如何編寫(xiě)數(shù)據(jù)到Excel文件。

1.導(dǎo)入依賴

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.8</version>
        </dependency>

2.Excel表單元格控制

2.1 最基礎(chǔ)的行列控制

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        //創(chuàng)建工作表(Sheet)
        HSSFSheet sheet = workbook.createSheet("Test");
        // 創(chuàng)建行,從0開(kāi)始
        HSSFRow row = sheet.createRow(0);
        // 創(chuàng)建行的單元格,也是從0開(kāi)始
        HSSFCell cell = row.createCell(0);
        // 設(shè)置單元格內(nèi)容
        cell.setCellValue("CsdnerM");
        // 設(shè)置單元格內(nèi)容,重載
        row.createCell(1).setCellValue(false);
        // 設(shè)置單元格內(nèi)容,重載
        row.createCell(2).setCellValue(new Date());
        // 設(shè)置單元格內(nèi)容,重載
        row.createCell(3).setCellValue(12.345);
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

這段 Java 代碼演示了如何創(chuàng)建和操作一個(gè)Excel文件。代碼使用Apache POI庫(kù),它提供了創(chuàng)建和修改Excel文件的功能。在此代碼中,先創(chuàng)建Workbook對(duì)象,然后在其上創(chuàng)建一個(gè)名為“Test”的工作表Sheet,并在該表中插入一行。接著,通過(guò)創(chuàng)建Row對(duì)象和隨后的Cell對(duì)象,并使用setCellValue()方法來(lái)設(shè)置單元格中的數(shù)據(jù)。最后將生成的XLS文件保存到本地磁盤(pán)中

需要注意的是,該代碼中提供的文件路徑僅適用于特定電腦上的特定位置,而實(shí)際應(yīng)用程序需要使用相應(yīng)的路徑。

2.2 設(shè)置格式

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFRow row = sheet.createRow(0);
//設(shè)置日期格式--使用Excel內(nèi)嵌的格式
        HSSFCell cell = row.createCell(0);
        cell.setCellValue(new Date());
        HSSFCellStyle style = workbook.createCellStyle();
        style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
        cell.setCellStyle(style);
//設(shè)置保留2位小數(shù)--使用Excel內(nèi)嵌的格式
        cell = row.createCell(1);
        cell.setCellValue(12.3456789);
        style = workbook.createCellStyle();
        style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
        cell.setCellStyle(style);
//設(shè)置貨幣格式--使用自定義的格式
        cell = row.createCell(2);
        cell.setCellValue(12345.6789);
        style = workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("¥#,##0"));
        cell.setCellStyle(style);
//設(shè)置百分比格式--使用自定義的格式
        cell = row.createCell(3);
        cell.setCellValue(0.123456789);
        style = workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("0.00%"));
        cell.setCellStyle(style);
//設(shè)置中文大寫(xiě)格式--使用自定義的格式
        cell = row.createCell(4);
        cell.setCellValue(12345);
        style = workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("[DbNum2][$-804]0"));
        cell.setCellStyle(style);
//設(shè)置科學(xué)計(jì)數(shù)法格式--使用自定義的格式
        cell = row.createCell(5);
        cell.setCellValue(12345);
        style = workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("0.00E+00"));
        cell.setCellStyle(style);
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

2.3 合并單元格

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFRow row=sheet.createRow(0);
//合并列
        HSSFCell cell=row.createCell(0);
        cell.setCellValue("合并列");
        CellRangeAddress region=new CellRangeAddress(0, 0, 0, 5);
        sheet.addMergedRegion(region);
//合并行
        cell=row.createCell(6);
        cell.setCellValue("合并行");
        region=new CellRangeAddress(0, 5, 7, 7);
        sheet.addMergedRegion(region);
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

這段Java代碼演示了如何使用Apache POI庫(kù)在Excel文件中合并單元格。在此代碼中,首先創(chuàng)建Workbook對(duì)象,然后在該工作簿上創(chuàng)建一個(gè)名為“Test”的工作表Sheet,并在該表中插入一行。接著,在該行的第0個(gè)單元格上調(diào)用createCell()方法以創(chuàng)建單元格對(duì)象,并將其內(nèi)容設(shè)置為“合并列”。然后定義需要合并的單元格區(qū)域,使用CellRangeAddress類(lèi)來(lái)指定行號(hào)和列號(hào)以及最后單元格的行號(hào)和列號(hào)。最后使用addMergedRegion方法來(lái)指定要合并的單元格范圍。另外,在該行的第6個(gè)單元格上繼續(xù)重復(fù)相同的過(guò)程,但應(yīng)用于列而不是行。最后將生成的XLS文件保存到本地磁盤(pán)中

需要注意的是,單元格合并可能導(dǎo)致數(shù)據(jù)丟失或者格式上的不準(zhǔn)確性。特別是當(dāng)您試圖合并帶有邊框、樣式或注釋等屬性的單元格時(shí)請(qǐng)小心,這些屬性可能會(huì)丟失。

2.4 單元格對(duì)齊

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFRow row=sheet.createRow(0);
        HSSFCell cell=row.createCell(0);
        cell.setCellValue("單元格對(duì)齊");
        HSSFCellStyle style=workbook.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
        style.setWrapText(true);//自動(dòng)換行
        style.setIndention((short)5);//縮進(jìn)
        style.setRotation((short)0);//文本旋轉(zhuǎn),這里的取值是從-90到90,而不是0-180度。
        cell.setCellStyle(style);
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

2.5 設(shè)置邊框

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFRow row=sheet.createRow(0);
        HSSFCell cell=row.createCell(1);
        cell.setCellValue("設(shè)置邊框");
        HSSFCellStyle style=workbook.createCellStyle();
        style.setBorderTop(HSSFCellStyle.BORDER_DOTTED);//上邊框
        style.setBorderBottom(HSSFCellStyle.BORDER_THICK);//下邊框
        style.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE);//左邊框
        style.setBorderRight(HSSFCellStyle.BORDER_SLANTED_DASH_DOT);//右邊框
        style.setTopBorderColor(HSSFColor.RED.index);//上邊框顏色
        style.setBottomBorderColor(HSSFColor.BLUE.index);//下邊框顏色
        style.setLeftBorderColor(HSSFColor.GREEN.index);//左邊框顏色
        style.setRightBorderColor(HSSFColor.PINK.index);//右邊框顏色
        cell.setCellStyle(style);
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

這段Java代碼演示了如何使用Apache POI庫(kù)在Excel中設(shè)置單元格邊框及邊框顏色。在此代碼中,首先創(chuàng)建Workbook對(duì)象,然后在該工作簿上創(chuàng)建一個(gè)名為“Test”的工作表Sheet。接著,在該工作表的第一行創(chuàng)建一個(gè)單元格,并設(shè)置該單元格的值為“設(shè)置邊框”。

然后,通過(guò)createCellStyle()方法創(chuàng)建一個(gè)HSSFCellStyle對(duì)象并將其賦值給style變量。接著調(diào)用setBorderXXX()方法來(lái)設(shè)置不同邊框的樣式,包括上、下、左和右邊框的線條類(lèi)型和寬度以及沿邊框的顏色。最后,將創(chuàng)建的樣式應(yīng)用于單元格上,并將生成的XLS文件保存到本地磁盤(pán)中。

需要注意的是,上述代碼中指定的顏色索引可能與實(shí)際顯示的顏色略有不同。建議使用實(shí)際顏色名稱或RGB值來(lái)避免出現(xiàn)問(wèn)題。另外,在設(shè)置邊框時(shí),請(qǐng)確保單元格中的文本或數(shù)據(jù)不會(huì)被覆蓋或隱藏。

2.6 設(shè)置字體

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFRow row=sheet.createRow(0);
        HSSFCell cell = row.createCell(1);
        cell.setCellValue("設(shè)置字體");
        HSSFCellStyle style = workbook.createCellStyle();
        HSSFFont font = workbook.createFont();
        font.setFontName("華文行楷");//設(shè)置字體名稱
        font.setFontHeightInPoints((short)28);//設(shè)置字號(hào)
        font.setColor(HSSFColor.RED.index);//設(shè)置字體顏色
        font.setUnderline(FontFormatting.U_SINGLE);//設(shè)置下劃線
        font.setTypeOffset(FontFormatting.SS_SUPER);//設(shè)置上標(biāo)下標(biāo)
        font.setStrikeout(true);//設(shè)置刪除線
        style.setFont(font);
        cell.setCellStyle(style);
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

2.7 設(shè)置圖案樣式

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFRow row=sheet.createRow(0);
        HSSFCell cell = row.createCell(1);
        HSSFCellStyle style = workbook.createCellStyle();
        style.setFillForegroundColor(HSSFColor.GREEN.index);//設(shè)置圖案顏色
        style.setFillBackgroundColor(HSSFColor.RED.index);//設(shè)置圖案背景色
        style.setFillPattern(HSSFCellStyle.SQUARES);//設(shè)置圖案樣式
        cell.setCellStyle(style);
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

2.8 設(shè)置寬度和高度

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFRow row = sheet.createRow(1);
        HSSFCell cell = row.createCell(1);
        cell.setCellValue("123456789012345678901234567890");
        sheet.setColumnWidth(1, 31 * 256);//設(shè)置第一列的寬度是31個(gè)字符寬度
        row.setHeightInPoints(50);//設(shè)置行的高度是50個(gè)點(diǎn)
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

3.使用Excel公式

3.1 基本計(jì)算

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = row.createCell(0);
        cell.setCellFormula("2+3*4");//設(shè)置公式
        cell = row.createCell(1);
        cell.setCellValue(10);
        cell = row.createCell(2);
        cell.setCellFormula("A1*B1");//設(shè)置公式
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

這段Java代碼演示了如何在使用Apache POI庫(kù)創(chuàng)建的Excel工作簿中設(shè)置單元格公式。在此代碼中,首先創(chuàng)建Workbook對(duì)象,然后在該工作簿上創(chuàng)建一個(gè)名為“Test”的工作表Sheet。接著,在該工作表的第一行創(chuàng)建三個(gè)單元格。

第一個(gè)單元格(A1)設(shè)置了公式“2+34”,用于計(jì)算結(jié)果。第二個(gè)單元格(B1)設(shè)置了值為10,作為第三個(gè)單元格(C1)使用公式“A1B1”進(jìn)行乘法運(yùn)算的一個(gè)操作數(shù)。需要注意的是,在設(shè)置公式時(shí),需要按照Microsoft Excel的語(yǔ)法規(guī)則來(lái)編寫(xiě)公式,且單元格引用需要按照[A,B]的格式表示。

最后,將生成的XLS文件保存到本地磁盤(pán)中,并關(guān)閉輸出流。

需要注意的是,單元格的公式計(jì)算依賴于單元格的數(shù)據(jù)類(lèi)型和格式,確保公式正確計(jì)算之前需要設(shè)定好相應(yīng)的數(shù)據(jù)類(lèi)型;同時(shí),也需小心處理不同單元格之間的對(duì)齊及其他隱藏相關(guān)問(wèn)題。

3.2 sum行數(shù)

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFRow row = sheet.createRow(0);
        row.createCell(0).setCellValue(1);
        row.createCell(1).setCellValue(2);
        row.createCell(2).setCellValue(3);
        row.createCell(3).setCellValue(4);
        row.createCell(4).setCellValue(5);
        row = sheet.createRow(1);
        row.createCell(0).setCellFormula("sum(A1,C1)");//等價(jià)于"A1+C1"
        row.createCell(1).setCellFormula("sum(B1:D1)");//等價(jià)于"B1+C1+D1"
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

3.3 日期函數(shù)

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFCellStyle style=workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("yyyy-mm-dd"));
        HSSFRow row = sheet.createRow(0);
        Calendar date=Calendar.getInstance();//日歷對(duì)象
        HSSFCell cell=row.createCell(0);
        date.set(2011,2, 7);
        cell.setCellValue(date.getTime());
        cell.setCellStyle(style);//第一個(gè)單元格開(kāi)始時(shí)間設(shè)置完成
        cell=row.createCell(1);
        date.set(2014,4, 25);
        cell.setCellValue(date.getTime());
        cell.setCellStyle(style);//第一個(gè)單元格結(jié)束時(shí)間設(shè)置完成
        cell=row.createCell(3);
        cell.setCellFormula("CONCATENATE(DATEDIF(A1,B1,\"y\"),\"年\")");
        cell=row.createCell(4);
        cell.setCellFormula("CONCATENATE(DATEDIF(A1,B1,\"m\"),\"月\")");
        cell=row.createCell(5);
        cell.setCellFormula("CONCATENATE(DATEDIF(A1,B1,\"d\"),\"日\(chéng)")");
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

3.4 字符串函數(shù)

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFRow row = sheet.createRow(0);
        row.createCell(0).setCellValue("abcdefg");
        row.createCell(1).setCellValue("aa bb cc dd ee fF GG");
        row.createCell(3).setCellFormula("UPPER(A1)");
        row.createCell(4).setCellFormula("PROPER(B1)");
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

這段Java代碼演示了如何使用Apache POI庫(kù)在Excel工作簿中設(shè)置單元格函數(shù)。在此代碼中,首先創(chuàng)建Workbook對(duì)象,然后在該工作簿上創(chuàng)建一個(gè)名為“Test”的工作表Sheet。接著,在該工作表的第一行中創(chuàng)建四個(gè)單元格。

第一個(gè)單元格(A1)設(shè)置了文本值"abcdefg",用于進(jìn)行字母大小寫(xiě)轉(zhuǎn)換;而第二個(gè)單元格(B1)設(shè)置了文本值"aa bb cc dd ee fF GG",也用于類(lèi)似的轉(zhuǎn)換操作。第三個(gè)單元格(D1)設(shè)置了公式 "UPPER(A1)",用于將第一個(gè)單元格的文本轉(zhuǎn)換為大寫(xiě)字母。相應(yīng)地,第四個(gè)單元格(E1)設(shè)置了公式 "PROPER(B1)" ,用于將第二個(gè)單元格的文本轉(zhuǎn)換為每個(gè)單詞首字母大寫(xiě),其余小寫(xiě)的格式。

最后,將生成的XLS文件保存到本地磁盤(pán)中,并關(guān)閉輸出流。

需要注意的是,在設(shè)置函數(shù)時(shí),需要按照Microsoft Excel的語(yǔ)法規(guī)則來(lái)編寫(xiě)公式,且單元格引用需要按照[A,B]的格式表示;同時(shí),請(qǐng)注意命名約定及函數(shù)參數(shù)個(gè)數(shù)、類(lèi)型等相關(guān)要素。

3.5 獲取返回值

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFRow row = sheet.createRow(0);
        row.createCell(0).setCellValue(7);//A1
        row.createCell(1).setCellValue(8);//B1
        HSSFCell cell=row.createCell(2);
        cell.setCellFormula("A1*B1+14");
        HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(workbook);
        cell = e.evaluateInCell(cell);//若Excel文件不是POI創(chuàng)建的,則不必調(diào)用此方法
        System.out.println("公式計(jì)算結(jié)果:"+cell.getNumericCellValue());
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

4.使用圖形

4.1 畫(huà)線

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFPatriarch patriarch=sheet.createDrawingPatriarch();
        HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0,(short)1, 0,(short)4, 4);
        HSSFSimpleShape line = patriarch.createSimpleShape(anchor);
        line.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);//設(shè)置圖形類(lèi)型
        line.setLineStyle(HSSFShape.LINESTYLE_SOLID);//設(shè)置圖形樣式
        line.setLineWidth(6350);//在POI中線的寬度12700表示1pt,所以這里是0.5pt粗的線條。
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

這段Java代碼演示了如何使用Apache POI庫(kù)在Excel工作簿中插入一條線條。在此代碼中,首先創(chuàng)建Workbook對(duì)象,然后在該工作簿上創(chuàng)建一個(gè)名為“Test”的工作表Sheet。接著,用 createDrawingPatriarch() 方法獲取用于包含圖形元素的對(duì)象,再使用 createSimpleShape() 創(chuàng)建一個(gè)簡(jiǎn)單形狀,并指定其描點(diǎn)的位置及大小。

在此示例中,HSSFClientAnchor對(duì)象定義要插入線條的起始和結(jié)束坐標(biāo)。然后,通過(guò)設(shè)置HSSFSimpleShape對(duì)象的參數(shù)來(lái)構(gòu)造直線。其中, setShapeType() 方法用于設(shè)置圖形類(lèi)型,這里選擇直線,setLineStyle() 方法用于設(shè)置直線樣式,這里選擇實(shí)線;而 setLineWidth() 方法用于設(shè)置線條寬度,采用POI內(nèi)置的長(zhǎng)度單位,以1/12700英寸為基礎(chǔ)計(jì)算。

最后,將生成的XLS文件保存到本地磁盤(pán)中,并關(guān)閉輸出流。

需要注意的是,在進(jìn)行圖形元素設(shè)置時(shí),請(qǐng)注意對(duì)應(yīng)的坐標(biāo)系,特別是行列數(shù)目等相關(guān)細(xì)節(jié)。

4.2 畫(huà)矩形

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFPatriarch patriarch=sheet.createDrawingPatriarch();
        HSSFClientAnchor anchor = new HSSFClientAnchor(255,122,255, 122, (short)1, 0,(short)4, 3);
        HSSFSimpleShape rec = patriarch.createSimpleShape(anchor);
        rec.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
        rec.setLineStyle(HSSFShape.LINESTYLE_DASHGEL);//設(shè)置邊框樣式
        rec.setFillColor(255, 0, 0);//設(shè)置填充色
        rec.setLineWidth(25400);//設(shè)置邊框?qū)挾?
        rec.setLineStyleColor(0, 0, 255);//設(shè)置邊框顏色
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

4.3 畫(huà)圓形

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFPatriarch patriarch=sheet.createDrawingPatriarch();
        HSSFClientAnchor anchor = new HSSFClientAnchor(255,122,255, 122, (short)1, 0,(short)4, 3);
        HSSFSimpleShape rec = patriarch.createSimpleShape(anchor);
        rec.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL);//設(shè)置圖片類(lèi)型
        rec.setLineStyle(HSSFShape.LINESTYLE_DASHGEL);//設(shè)置邊框樣式
        rec.setFillColor(255, 0, 0);//設(shè)置填充色
        rec.setLineWidth(25400);//設(shè)置邊框?qū)挾?
        rec.setLineStyleColor(0, 0, 255);//設(shè)置邊框顏色
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

4.4 畫(huà)網(wǎng)格

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        HSSFRow row = sheet.createRow(2);
        row.createCell(1);
        row.setHeightInPoints(240);
        sheet.setColumnWidth(2, 9000);
        int linesCount = 20;
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
//因?yàn)镠SSFClientAnchor中dx只能在0-1023之間,dy只能在0-255之間,這里采用比例的方式
        double xRatio = 1023.0 / (linesCount * 10);
        double yRatio = 255.0 / (linesCount * 10);
// 畫(huà)豎線
        int x1 = 0;
        int y1 = 0;
        int x2 = 0;
        int y2 = 200;
        for (int i = 0; i < linesCount; i++) {
            HSSFClientAnchor a2 = new HSSFClientAnchor();
            a2.setAnchor((short) 2, 2, (int) (x1 * xRatio),
                    (int) (y1 * yRatio), (short) 2, 2, (int) (x2 * xRatio),
                    (int) (y2 * yRatio));
            HSSFSimpleShape shape2 = patriarch.createSimpleShape(a2);
            shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
            x1 += 10;
            x2 += 10;
        }
// 畫(huà)橫線
        x1 = 0;
        y1 = 0;
        x2 = 200;
        y2 = 0;
        for (int i = 0; i < linesCount; i++) {
            HSSFClientAnchor a2 = new HSSFClientAnchor();
            a2.setAnchor((short) 2, 2, (int) (x1 * xRatio),
                    (int) (y1 * yRatio), (short) 2, 2, (int) (x2 * xRatio),
                    (int) (y2 * yRatio));
            HSSFSimpleShape shape2 = patriarch.createSimpleShape(a2);
            shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
            y1 += 10;
            y2 += 10;
        }
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

4.5 插入圖片

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        //創(chuàng)建Excel文件(Workbook)
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 創(chuàng)建工作表(Sheet)
        FileInputStream stream = new FileInputStream("C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\11.jpg");
        byte[] bytes = new byte[(int) stream.getChannel().size()];
        stream.read(bytes);//讀取圖片到二進(jìn)制數(shù)組
        int pictureIdx = workbook.addPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
        HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 0, 0, (short) 5, 5);
        HSSFPicture pict = patriarch.createPicture(anchor, pictureIdx);
        pict.resize();//自動(dòng)調(diào)節(jié)圖片大小,圖片位置信息可能丟失
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

5.Excel行列操作

鎖定列

public class Test00 {
    public static void main(String[] args) throws IOException {
        //文件路徑
        String filePath = "C:\\Users\\masiyi\\IdeaProjects\\demo\\src\\main\\resources\\test.xls";
        HSSFWorkbook workbook = new HSSFWorkbook();// 創(chuàng)建Excel文件(Workbook)
        HSSFSheet sheet= workbook.createSheet("Test0");// 創(chuàng)建工作表(Sheet)
        sheet.createFreezePane(2, 3, 15, 25);//凍結(jié)行列
        FileOutputStream out = new FileOutputStream(filePath);
        //保存Excel文件
        workbook.write(out);
        out.close();//關(guān)閉文件流
        System.out.println("OK!");
    }
}

這段Java代碼演示了如何使用Apache POI庫(kù)在Excel工作簿中凍結(jié)指定的行和列。在此代碼中,首先創(chuàng)建 Workbook 對(duì)象,然后在該工作簿上創(chuàng)建一個(gè)名為“Test0”的工作表 Sheet。接著,使用 createFreezePane() 方法來(lái)設(shè)置要凍結(jié)的行和列。

在此示例中,使用的 createFreezePane() 方法的參數(shù)分別是:凍結(jié)列數(shù)、凍結(jié)行數(shù)(即滾動(dòng)區(qū)域頂部的可見(jiàn)行數(shù))、右邊區(qū)域的左側(cè)列數(shù)、下方區(qū)域的頂部行數(shù)。這里將從第4行、第3列開(kāi)始凍結(jié),并分別向右15列、向下25行。

最后,將生成的XLS文件保存到本地磁盤(pán)中,并關(guān)閉輸出流。

需要注意的是,在進(jìn)行createFreezePane()方法設(shè)置時(shí),請(qǐng)確??梢?jiàn)區(qū)域以及凍結(jié)列數(shù)、行數(shù)參數(shù)的設(shè)定符合預(yù)期。

參考:Apache POI使用詳解

Apache Poi是一個(gè)開(kāi)源項(xiàng)目,由Apache軟件基金會(huì)維護(hù),幾乎成為了Java開(kāi)發(fā)人員中操作Excel的事實(shí)標(biāo)準(zhǔn)。通過(guò)掌握本文所提供的基礎(chǔ)知識(shí)、代碼示例和最佳實(shí)踐,讀者們應(yīng)該能夠開(kāi)始使用Apache Poi來(lái)進(jìn)行Excel文件操作,并基于自己的需要?jiǎng)?chuàng)造出更多有效的使用案例。

以上就是Java使用Apache POI操作Excel詳解的詳細(xì)內(nèi)容,更多關(guān)于Java操作Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Elasticsearch如何把一個(gè)索引變?yōu)橹蛔x

    詳解Elasticsearch如何把一個(gè)索引變?yōu)橹蛔x

    這篇文章主要為大家介紹了詳解Elasticsearch如何把一個(gè)索引變?yōu)橹蛔x示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java8-Stream流操作List去重問(wèn)題

    Java8-Stream流操作List去重問(wèn)題

    這篇文章主要介紹了Java8-Stream流操作List去重問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 學(xué)會(huì)Java字節(jié)碼指令,成為技術(shù)大佬

    學(xué)會(huì)Java字節(jié)碼指令,成為技術(shù)大佬

    Java 字節(jié)碼指令是 JVM 體系中非常難啃的一塊硬骨頭,我估計(jì)有些讀者會(huì)有這樣的疑惑,“Java 字節(jié)碼難學(xué)嗎?我能不能學(xué)會(huì)啊?”本文帶領(lǐng)大家一探究竟,幫助大家搞懂java底層代碼如何執(zhí)行
    2021-08-08
  • 使用Jenkins Pipeline自動(dòng)化構(gòu)建發(fā)布Java項(xiàng)目的方法

    使用Jenkins Pipeline自動(dòng)化構(gòu)建發(fā)布Java項(xiàng)目的方法

    這篇文章主要介紹了使用Jenkins Pipeline自動(dòng)化構(gòu)建發(fā)布Java項(xiàng)目的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • JDK8中新增的Optional工具類(lèi)基本使用

    JDK8中新增的Optional工具類(lèi)基本使用

    Optional不是對(duì)null關(guān)鍵字的一種替代,而是對(duì)于null判定提供了一種更加優(yōu)雅的實(shí)現(xiàn),接下來(lái)通過(guò)本文給大家分享JDK8中新增的Optional工具類(lèi)基本使用,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • java實(shí)現(xiàn)冒泡排序算法

    java實(shí)現(xiàn)冒泡排序算法

    冒泡排序(Bubble Sort)是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列已經(jīng)排序完成。
    2015-04-04
  • Java通俗易懂系列設(shè)計(jì)模式之觀察者模式

    Java通俗易懂系列設(shè)計(jì)模式之觀察者模式

    這篇文章主要介紹了Java通俗易懂系列設(shè)計(jì)模式之觀察者模式,對(duì)設(shè)計(jì)模式感興趣的同學(xué),一定要看一下
    2021-04-04
  • IDEA?中配置?Gradle?和安裝使用教程

    IDEA?中配置?Gradle?和安裝使用教程

    Gradle本身是基于Groovy腳本語(yǔ)言進(jìn)行構(gòu)建的,并通過(guò) Domain Specific Language(DSL 語(yǔ)言)進(jìn)行描述和控制構(gòu)建邏輯,本文重介紹了IDEA?中配置?Gradle?和使用,需要的朋友可以參考下
    2023-10-10
  • Java Swing 只關(guān)閉當(dāng)前窗體的實(shí)現(xiàn)

    Java Swing 只關(guān)閉當(dāng)前窗體的實(shí)現(xiàn)

    這篇文章主要介紹了Java Swing 只關(guān)閉當(dāng)前窗體的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Mybatis攔截器實(shí)現(xiàn)公共字段填充的示例代碼

    Mybatis攔截器實(shí)現(xiàn)公共字段填充的示例代碼

    本文介紹了使用Spring Boot和MyBatis實(shí)現(xiàn)公共字段的自動(dòng)填充功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12

最新評(píng)論