JAVA将List集合用POI导出Excal

1 篇文章 0 订阅

前几天碰到个问题,就是将List集合导出成标准的Excal

在这里我就整理一下思路,也许能帮得上各位。

1、获取dataList集合

dataList = XXXDAO.getName(param);

2、创建表头,副表

String title[] = {
        "序号", "ID", "记录时间"}
String title_[] = {
        "", "", ""}

3、文件位置,Sheety页面名,表头,副表头,数据集

createExcel("E:/ry.xls", "人员", title,title_,dataList);

4、创建新的excel

/**
 * 创建新excel.
 *
 * @param fileDir   excel的路径
 * @param sheetName 要创建的表格索引
 * @param titleRow  excel的第一行即表格头
 */
public static void createExcel(String fileDir, String sheetName, String titleRow[], String titleRow_[],List<Map> dataList) throws Exception {
    //创建workbook
    workbook = new HSSFWorkbook();
    //添加Worksheet(不添加sheet时生成的xls文件打开时会报错)
    HSSFSheet sheet1 = workbook.createSheet(sheetName);
    //新建文件
    FileOutputStream out = null;
    try {
        HSSFRow row=null;//行
        Map map =null;//List中的map
        HSSFCell cell=null;//单元格
        //  字体加粗
        CellStyle style = workbook.createCellStyle();
        HSSFFont font = workbook.createFont();
        //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
        font.setFontHeightInPoints((short)24);//字号
        style.setFont(font);
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        CellStyle style1 =workbook.createCellStyle();
        style1.setBorderTop(HSSFCellStyle. BORDER_THIN);//上边框
        style1.setBorderBottom(HSSFCellStyle. BORDER_THIN);//下边框
        style1.setBorderLeft(HSSFCellStyle. BORDER_THIN);//左边框
        style1.setBorderRight(HSSFCellStyle. BORDER_THIN);//右边框
        style1.setTopBorderColor(HSSFColor.BLACK.index);//上边框颜色
        style1.setBottomBorderColor(HSSFColor.BLACK.index);//下边框颜色
        style1.setLeftBorderColor(HSSFColor.BLACK.index);//左边框颜色
        style1.setRightBorderColor(HSSFColor.BLACK.index);//右边框颜色
        style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//写入dataList值
        for (int a = 0; a <= dataList.size(); a++) {
//标题
            if(a==0){
                row= sheet1.createRow(0);
                cell = row.createCell(0);
                cell.setCellValue("采油生产数据");
                cell.setCellStyle(style);
            }
//表头
            if (a == 1) {             
                row= sheet1.createRow(1);
                for (short i = 0; i < titleRow.length; i++) {
                    cell = row.createCell(i);
                    cell.setCellValue(titleRow[i]);
                    cell.setCellStyle(style1);
                }
            }
//副表头
            if(a==2){
               
                row= sheet1.createRow(2);
                for (short i = 0; i < titleRow_.length; i++) {
                    cell = row.createCell(i);
                    cell.setCellValue(titleRow_[i]);
                    cell.setCellStyle(style1);
                }
            }
//内容
            if(a>2){
                map = dataList.get(a-3);
                String id= map.get("id") != null ? map.get("id").toString() : "";
                String rq = map.get("RQ") != null ? map.get("RQ").toString() : "";
                String sz[] ={String.valueOf(a-2),id,rq};
//从第a行开始创建
                row=sheet1.createRow(a);
                for(int i =0;i<titleRow.length;i++){
                    cell = row.createCell(i);
                    cell.setCellValue(sz[i]);
                    cell.setCellStyle(style1);
                }
            }
//合并单元格
            sheet1.addMergedRegion(new CellRangeAddress(0 ,0, 0, 17)) ;
            }
        out = new FileOutputStream(fileDir);
        workbook.write(out);
    } catch (Exception e) {
        throw e;
    } finally {
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

搞的比较繁琐,但是思路可能简单粗暴了,不是很完美,希望各位能给个更好的解决方式。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值