国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java Poi導(dǎo)出Excel表格詳解

這篇具有很好參考價值的文章主要介紹了Java Poi導(dǎo)出Excel表格詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一、導(dǎo)出下面的表格

javapoi導(dǎo)出excel,JAVA POI,java

二、流程詳解

??????? 1、導(dǎo)出excel需要先將數(shù)據(jù)準(zhǔn)備好

??????? 2、創(chuàng)建工作傅對象SXSSFWorkbook

??????? 3、使用工作傅對象創(chuàng)建sheet對象(工作頁)

??????? 4、使用sheet對象創(chuàng)建行對象row(行對象)

??????? 5、使用row對象創(chuàng)建cell對象(單元格對象)

??????? 6、將數(shù)據(jù)依次插入對應(yīng)的單元格

??????? 7、創(chuàng)建excel文件,寫入數(shù)據(jù)

三、代碼

3.1、依賴

  <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.14</version>
        </dependency>

注意:本文使用的是SXSSFSheet對象,所以使用的是上面的依賴

3.2、主要代碼

3.2.1、實(shí)體類

import lombok.Data;

@Data
public class MyCell {
    private int top;
    private int below;
    private int left;
    private int right;


    public MyCell(){}
    public MyCell(int top,int below,int left,int right){
        this.top = top;
        this.below = below;
        this.left = left;
        this.right = right;
    }
}

3.2.2、工具類

public class ExportUtil
{
    public static void main(String[] args)
    {
        //1、準(zhǔn)備數(shù)據(jù)
        List<HashMap<String,List<List<String>>>> list = new ArrayList<>();//存放一個excel文件所有數(shù)據(jù)(可放多個sheet頁)
        HashMap<String,List<List<String>>> map = new HashMap<>();//存放一個sheet頁所有數(shù)據(jù)
        List<List<String>> titleList = new ArrayList<>();//存放一個sheet頁表頭數(shù)據(jù)
        List<List<String>> bodyList = new ArrayList<>();//存放一個sheet頁表體數(shù)據(jù)
        List<String> title = new ArrayList<>();//存一行表頭數(shù)據(jù)
        List<String> body = null;//存一行表體數(shù)據(jù)

        int length = 8;//-------------------------每行8個數(shù)據(jù),即8列表格
        title.add("報表表體");
        for (int i = 0; i < 7; i++) {
            title.add("");
        }
        titleList.add(title);//把第一行表頭數(shù)據(jù)放入titleList


        title = new ArrayList<>();
        title.add("代碼 : 000000");
        for (int i = 0; i < 3; i++){
            title.add("");
        }
        title.add("報告期 : 2023年6月");
        for (int i = 0; i < length - 5; i++){
            title.add("");
        }
        titleList.add(title);//把第二行表頭數(shù)據(jù)放入titleList

        String str1 = "";
        for (int i = 0; i <= 8; i++){//放8行表體數(shù)據(jù)
            body = new ArrayList<>();
            for (int j = 0; j < length; j++) {
                body.add(i + 1 + "行" + (j + 1) + "列");
            }
            bodyList.add(body);//把第i行表體數(shù)據(jù)放入bodyList
        }

        map.put("title_key",titleList);//把一個sheet頁表頭數(shù)據(jù)放入map
        map.put("body_key",bodyList);//把一個sheet頁表體數(shù)據(jù)放入map
        list.add(map);//把一個sheet頁的所有數(shù)據(jù)放list
        //--------------------------------------------------------------數(shù)據(jù)已準(zhǔn)備完畢

        //2、創(chuàng)建工作傅(即一個excel對象,可以包含多個sheet對象)
        SXSSFWorkbook wb = new SXSSFWorkbook(500);//創(chuàng)建一個工作副本,保留500條數(shù)據(jù)在內(nèi)存中
        for (int i = 0;i < list.size(); i++){
            HashMap<String,List<List<String>>> map1 = list.get(i);//獲取一個sheet頁的所有數(shù)據(jù)
            exportExcelFiles(wb,map1,"第一頁");//將一個sheet頁的所有數(shù)據(jù)插入wb對象中
        }
        //--------------------------------------------------------------數(shù)據(jù)已插入完畢

        //3、創(chuàng)建excel文件,并寫入數(shù)據(jù)
        FileOutputStream fos = null;
        File file = new File("D:\\" + "00年的大帥哥" + ".xls");
        try {
            fos = new FileOutputStream(file);
            wb.write(fos);//寫入數(shù)據(jù)
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("------------導(dǎo)出成功-------------");
        }
    }

    //插入數(shù)據(jù)
    public static void exportExcelFiles(SXSSFWorkbook wb,HashMap<String,List<List<String>>> map,String name)
    {
        //1、準(zhǔn)備數(shù)據(jù)
        List<List<String>> head = map.get("title_key");//取出表頭數(shù)據(jù)
        List<List<String>> body = map.get("body_key");//取出表體數(shù)據(jù)
        int rowEleCount = body.get(0).size();//表體一共多少列

        //2、創(chuàng)建一個sheet對象并插入數(shù)據(jù)
        SXSSFSheet sheet = wb.createSheet(name);//創(chuàng)建一個工作頁,并設(shè)置sheet的name
        //wb.setSheetName(0,name);//設(shè)置sheet名字,可以根據(jù)下標(biāo)設(shè)置sheet的name
        sheet.setDefaultColumnWidth(20);//設(shè)置默認(rèn)列寬

        mergeCell(sheet,rowEleCount);//---------------------------------------------------------先合并表頭的單元格

        List<CellStyle> headStyleList = getHeadCellStyleList(wb);// 獲取一個表頭樣式集合
        List<CellStyle> bodyStyleList = getBodyCellStyleList(wb);// 獲取一個表體樣式集合
        setExcelHead(sheet,head,headStyleList);// 插入表頭數(shù)據(jù)
        setExcelBody(sheet,body,bodyStyleList);// 插入表體數(shù)據(jù)
    }




    // 合并表頭
    public static void mergeCell(SXSSFSheet sheet,int rowEleCount)
    {
        List<MyCell> listMerge = new ArrayList<>();//存儲前3行合并單元格的信息
        MyCell myCell1 = new MyCell(0,0,0,rowEleCount);
        listMerge.add(myCell1);
        MyCell myCell2 = new MyCell(1,2,0,3);
        listMerge.add(myCell2);
        MyCell myCell3 = new MyCell(1,2,4,rowEleCount);
        listMerge.add(myCell3);
        for (int i = 0; i < listMerge.size() ; i++){
            sheet.addMergedRegion(new CellRangeAddress(listMerge.get(i).getTop(),//開始行
                    listMerge.get(i).getBelow(),//結(jié)束行
                    listMerge.get(i).getLeft(),//開始列
                    listMerge.get(i).getRight()));//結(jié)束列
        }
    }

    //插入表頭數(shù)據(jù)
    public static void setExcelHead(SXSSFSheet sheet, List<List<String>> head,List<CellStyle> cellStyleList)
    {

        int rowNum = head.size();//表頭有幾行
        int rowElementNum = head.get(0).size();//每行有幾列
        SXSSFRow row = null;//聲明一個行對象
        SXSSFCell cell = null;//聲明一個列對象(即一個單元格對象)
        for (int i = 0; i < rowNum; i++){
            row = sheet.createRow(i);//創(chuàng)建第 i + 1 行的行對象
            //設(shè)置行高
            if(i == 1 || i == 2){//將第二行和第三行的行高設(shè)置為400
                row.setHeight((short) 400);
            }
            for(int j = 0; j < rowElementNum; j++) {
                cell = row.createCell(j);//創(chuàng)建第 i + 1 行,第 j + 1 列的單元格
                cell.setCellValue(head.get(i).get(j));//設(shè)置單元格內(nèi)容(插入數(shù)據(jù))
                //設(shè)置表頭樣式
                switch (i){
                    case 0:
                        cell.setCellStyle(cellStyleList.get(0));//將第一行設(shè)置為上下左右居中,單元格無邊框,字體:等線,字號:12
                        break;
                    default:
                        switch (j){
                            case 0:
                                cell.setCellStyle(cellStyleList.get(1));//將第二行第1個單元格設(shè)置為靠左,單元格無邊框,上下居中,字體:等線,字號:10
                                break;
                            case 4:
                                cell.setCellStyle(cellStyleList.get(2));//將第二行第5個單元格設(shè)置上下左右居中,單元格無邊框,字體:等線,字號:10
                                break;
                            default:
                                cell.setCellStyle(cellStyleList.get(3));//其他單元格
                        }
                }
            }
        }
    }

    //插入表體數(shù)據(jù)
    public static void setExcelBody(SXSSFSheet sheet, List<List<String>> body,List<CellStyle> bodyStyleList)
    {
        int rowNum = body.size();//表體有幾行
        int rowElementNum = body.get(0).size();//每行有幾列
        List<String> rowList = null;//聲明一個行數(shù)據(jù)集合
        SXSSFRow row = null;//聲明一個行對象
        SXSSFCell cell = null;//聲明一個單元格對象

        for (int i = 3; i < rowNum + 3; i++) {//前3行是表頭,從第4行開始創(chuàng)建行對象
            row = sheet.createRow(i);//創(chuàng)建行對象
            //將第4行行高設(shè)為600
            if(i == 3){
                row.setHeight((short)600);
            }
            rowList = body.get(i - 3);//取出表體的一行數(shù)據(jù)
            for (int j = 0; j < rowList.size() ; j++){
                cell = row.createCell(j);//創(chuàng)建第 i + 1 行,第 j + 1 列的單元格
                cell.setCellValue(rowList.get(j));//設(shè)置單元格內(nèi)容(插入數(shù)據(jù))
                //設(shè)置單元格數(shù)據(jù)樣式
                switch (i){
                    case 3:
                        cell.setCellStyle(bodyStyleList.get(3));//第4行設(shè)置為上下左右居中,單元格有邊框,字體:等線,字號:10
                        break;
                    case 4:
                        cell.setCellStyle(bodyStyleList.get(3));//第5行設(shè)置為上下左右居中,單元格有邊框,字體:等線,字號:10
                        break;
                    default:
                        switch (j){
                            case 0:
                                cell.setCellStyle(bodyStyleList.get(0));//其他行第一列設(shè)置為靠左,上下居中,單元格有左右邊框,無上下邊框,字體:等線,字號:10
                                break;
                            case 1:
                                cell.setCellStyle(bodyStyleList.get(1));//其他行第二列設(shè)置為靠左,上下居中,單元格有左右邊框,無上下邊框,字體:等線,字號:10
                                break;
                            default:
                                cell.setCellStyle(bodyStyleList.get(2));//其他行其他列設(shè)置為上下左右居中,單元格有左右邊框,無上下邊框,字體:等線,字號:10
                        }
                }
            }
        }
    }

    //獲取表頭樣式集合
    private static List<CellStyle> getHeadCellStyleList(SXSSFWorkbook wb) {
        List<CellStyle> cellStyleList = new ArrayList<>();
        CellStyle bodyStyle1 = headStyle1(wb);
        CellStyle bodyStyle2 = headStyle2(wb);
        CellStyle bodyStyle3 = headStyle3(wb);
        CellStyle bodyStyle4 = headStyle3(wb);
        cellStyleList.add(bodyStyle1);
        cellStyleList.add(bodyStyle2);
        cellStyleList.add(bodyStyle3);
        cellStyleList.add(bodyStyle4);
        return cellStyleList;
    }

    //獲取表體樣式集合
    private static List<CellStyle> getBodyCellStyleList(SXSSFWorkbook wb)
    {
        List<CellStyle> list = new ArrayList<>();
        CellStyle cellStyle1 = bodyStyle1(wb);
        CellStyle cellStyle2 = bodyStyle2(wb);
        CellStyle cellStyle3 = bodyStyle3(wb);
        CellStyle cellStyle4 = bodyStyle4(wb);
        list.add(cellStyle1);
        list.add(cellStyle2);
        list.add(cellStyle3);
        list.add(cellStyle4);
        return list;
    }

    //字體
    public static Font getFont(SXSSFWorkbook wb,String fontName,int height){
        Font font = wb.createFont();
        //font.setBoldweight((short) 10);// 設(shè)置字體的寬度
        //font.setFontHeightInPoints((short) height);// 設(shè)置字體的高度
        //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 粗體顯示
        font.setFontHeightInPoints((short)height);//設(shè)置字號
        font.setFontName(fontName);//設(shè)置字體(輸入字體名)
        return font;
    }

    //表頭樣式1
    public static CellStyle headStyle1(SXSSFWorkbook wb)
    {
        CellStyle style1 = wb.createCellStyle();// 樣式對象
        // 設(shè)置單元格上、下、左、右的邊框線
        style1.setBorderTop(HSSFCellStyle.BORDER_NONE);//NONE為不顯示邊框,THIN為顯示邊框
        style1.setBorderBottom(HSSFCellStyle.BORDER_NONE);
        style1.setBorderLeft(HSSFCellStyle.BORDER_NONE);
        style1.setBorderRight(HSSFCellStyle.BORDER_NONE);
        Font font = getFont(wb,"等線",12);// 創(chuàng)建一個字體對象
        style1.setFont(font);// 設(shè)置style1的字體
        //style1.setWrapText(true);// 設(shè)置自動換行
        style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 設(shè)置單元格字體顯示居中(左右方向)
        style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 設(shè)置單元格字體顯示居中(上下方向)
        return style1;
    }

    //表頭樣式2
    public static CellStyle headStyle2(SXSSFWorkbook wb)
    {
        CellStyle style1 = wb.createCellStyle();// 樣式對象
        // 設(shè)置單元格上、下、左、右的邊框線
        style1.setBorderBottom(HSSFCellStyle.BORDER_NONE);//NONE為不顯示邊框,THIN為顯示邊框
        style1.setBorderLeft(HSSFCellStyle.BORDER_NONE);
        style1.setBorderRight(HSSFCellStyle.BORDER_NONE);
        style1.setBorderTop(HSSFCellStyle.BORDER_NONE);
        Font font = getFont(wb,"等線",10);// 創(chuàng)建一個字體對象
        style1.setFont(font);// 設(shè)置style1的字體
        //style1.setWrapText(true);// 設(shè)置自動換行
        style1.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 設(shè)置單元格字體顯示居中(左右方向)
        style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_BOTTOM);// 設(shè)置單元格字體顯示居中(上下方向)
        return style1;
    }

    //表頭樣式3
    public static CellStyle headStyle3(SXSSFWorkbook wb)
    {
        CellStyle style1 = wb.createCellStyle();// 樣式對象
        // 設(shè)置單元格上、下、左、右的邊框線
        style1.setBorderBottom(HSSFCellStyle.BORDER_NONE);//NONE為不顯示邊框,THIN為顯示邊框
        style1.setBorderLeft(HSSFCellStyle.BORDER_NONE);
        style1.setBorderRight(HSSFCellStyle.BORDER_NONE);
        style1.setBorderTop(HSSFCellStyle.BORDER_NONE);
        Font font = getFont(wb,"等線",10);// 創(chuàng)建一個字體對象
        style1.setFont(font);// 設(shè)置style1的字體
        //style1.setWrapText(true);// 設(shè)置自動換行
        style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 設(shè)置單元格字體顯示居中(左右方向)
        style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 設(shè)置單元格字體顯示居中(上下方向)
        return style1;
    }


    //表體樣式1
    public static CellStyle bodyStyle1(SXSSFWorkbook wb)
    {
        // 設(shè)置style1的樣式,此樣式運(yùn)用在第二行
        CellStyle style = wb.createCellStyle();//樣式對象
        // 設(shè)置單元格上、下、左、右的邊框線
        style.setBorderTop(HSSFCellStyle.BORDER_NONE);//NONE為不顯示邊框,THIN為顯示邊框
        style.setBorderBottom(HSSFCellStyle.BORDER_NONE);
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        Font font = getFont(wb,"等線",10);// 創(chuàng)建一個字體對象
        style.setFont(font);// 設(shè)置style1的字體
        //style1.setWrapText(true);// 設(shè)置自動換行
        style.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 設(shè)置單元格字體顯示靠左(左右方向)
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 設(shè)置單元格字體顯示居中(上下方向)
        return style;
    }

    //表體樣式2
    public static CellStyle bodyStyle2(SXSSFWorkbook wb)
    {
        // 設(shè)置style1的樣式,此樣式運(yùn)用在第二行
        CellStyle style1 = wb.createCellStyle();// 樣式對象
        // 設(shè)置單元格上、下、左、右的邊框線
        style1.setBorderTop(HSSFCellStyle.BORDER_NONE);//NONE為不顯示邊框,THIN為顯示邊框
        style1.setBorderBottom(HSSFCellStyle.BORDER_NONE);
        style1.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        style1.setBorderRight(HSSFCellStyle.BORDER_THIN);
        Font font = getFont(wb,"等線",10);// 創(chuàng)建一個字體對象
        style1.setFont(font);// 設(shè)置style1的字體
        //style1.setWrapText(true);// 設(shè)置自動換行
        style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 設(shè)置單元格字體顯示居中(左右方向)
        style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 設(shè)置單元格字體顯示居中(上下方向)
        return style1;
    }

    //表體樣式3
    public static CellStyle bodyStyle3(SXSSFWorkbook wb)
    {
        // 設(shè)置style1的樣式,此樣式運(yùn)用在第二行
        CellStyle style1 = wb.createCellStyle();//樣式對象
        // 設(shè)置單元格上、下、左、右的邊框線
        style1.setBorderTop(HSSFCellStyle.BORDER_NONE);//NONE為不顯示邊框,THIN為顯示邊框
        style1.setBorderBottom(HSSFCellStyle.BORDER_NONE);
        style1.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        style1.setBorderRight(HSSFCellStyle.BORDER_THIN);
        Font font = getFont(wb,"等線",10);// 創(chuàng)建一個字體對象
        style1.setFont(font);// 設(shè)置style1的字體
        //style1.setWrapText(true);// 設(shè)置自動換行
        style1.setAlignment(HSSFCellStyle.ALIGN_RIGHT);// 設(shè)置單元格字體顯示靠右(左右方向)
        style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 設(shè)置單元格字體顯示居中(上下方向)
        return style1;
    }

    //表體樣式4
    public static CellStyle bodyStyle4(SXSSFWorkbook wb)
    {
        // 設(shè)置style1的樣式
        CellStyle style1 = wb.createCellStyle();//樣式對象
        // 設(shè)置單元格上、下、左、右的邊框線
        style1.setBorderTop(HSSFCellStyle.BORDER_THIN);//NONE為不顯示邊框,THIN為顯示邊框
        style1.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        style1.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        style1.setBorderRight(HSSFCellStyle.BORDER_THIN);
        Font font = getFont(wb,"等線",10);// 創(chuàng)建一個字體對象
        style1.setFont(font);// 設(shè)置style1的字體
        //style1.setWrapText(true);// 設(shè)置自動換行
        style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 設(shè)置單元格字體顯示居中(左右方向)
        style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 設(shè)置單元格字體顯示居中(上下方向)
        return style1;
    }
}

四、

??????? 單元格合并,單元格樣式、字體樣式,在代碼中都有注釋,上述代碼,講述了復(fù)雜excel的導(dǎo)出,可以導(dǎo)出多個sheet頁,可自己準(zhǔn)備數(shù)據(jù)測試

??????? 希望對做報表項(xiàng)目的小伙伴能有所幫助,記得點(diǎn)贊收藏??!文章來源地址http://www.zghlxwxcb.cn/news/detail-688539.html

到了這里,關(guān)于Java Poi導(dǎo)出Excel表格詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包