关于Java 导出 excel 文件的整理

// 注意创建顺序是 excel文件 - sheet表 - row行 - cell单元格
// 先创建HSSFWorkbook对象,对应一个Excel文件 ,再创建HSSFSheet对象,对应一张表
// 根据HSSFSheet依次创建对应的row,再创建单元格,最后进行set值
// HSSFCellStyle是单元格样式,需应用于单元格上

public String doExportExcel() throws Exception{
        
    HSSFWorkbook wb = new HSSFWorkbook(); // 创建一个HSSFWorkbook,对应一个Excel文件
        FileOutputStream out = null;
        try{
            String filePath = FilePath.getSystemRootPath()+"/files/dataExport/"; //输出路径,自定义
            File dirFile = new File(filePath);
            if (!dirFile.exists()) {
                dirFile.mkdirs();
            }
            String fileName = "汇总表.xls"; //文件名,自定义
            filePath = filePath+"/"+fileName;
            HSSFSheet sheet = wb.createSheet(fileName);//在HSSFWorkbook中添加一个sheet,对应Excel文件中的sheet(表名)
            sheet.setDefaultColumnWidth(25);//设置表格列宽
            sheet.setDefaultRowHeightInPoints(50);//设置表格行高
            sheet.setColumnWidth(0, 5*512); //设置第0列的宽度,注意这里单位的换算
            sheet.setColumnWidth(1,10*512); //设置第1列的宽度
            
            //表头行(第0行)格式设置
            HSSFRow hssfRow = sheet.createRow(0);//添加表头行,从0行开始
            sheet.addMergedRegion(new CellRangeAddress(0,0,0,5));//合并单元格、CellRangeAddress(起始行号,终止行号,起始列号,终止列号)
            // 合并单元格时,也可以分开写
            // CellRangeAddress cra =new CellRangeAddress(0,0,0,5); // CellRangeAddress(起始行号,终止行号,起始列号,终止列号)
            // sheet.addMergedRegion(cra);
            // 使用RegionUtil类为合并后的单元格添加边框
            // RegionUtil.setBorderBottom(BorderStyle.MEDIUM, cra, sheet);//下边框
            // RegionUtil.setBorderTop(BorderStyle.MEDIUM, cra, sheet); //上边框

            // 在导出excel的时候,计数都是从0开始计算的,即使合并了单元格,在设置值的时候,
       // 依旧需要将合并的单元格数算进去,才能准确赋值,
所以这里在赋值的时候,
       // 比如,合并了5个单元格,那么这个单元格在赋值的时候,将"值"赋给第一个单元格,剩下的4个则填入null或不填,
// 然后获取第6个单元格进行赋值,这样保证填入的值的顺序保持一致,不至于被覆盖 HSSFCell headCell = hssfRow.createCell(0);//添加第一个单元格 HSSFFont headFont = wb.createFont(); //创建字体格式,可以设置多个 headFont.setBold(true);//字体加粗 headFont.setFontName("宋体");//设置字体 headFont.setFontHeightInPoints((short)24); //设置字体大小 headFont.setColor(HSSFColor.RED.index); // 字体设置颜色 HSSFCellStyle headCellStyle = wb.createCellStyle();//创建单元格格式,可以设置多个 headCellStyle.setFont(headFont); //单元格格式应用字体格式 headCellStyle.setAlignment(HorizontalAlignment.CENTER);//单元格内容——左右居中 headCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//单元格内容——上下居中 headCellStyle.setBorderBottom(BorderStyle.THIN); //设置底部边框 - 粗thick-中medium-细thin headCellStyle.setBorderTop(BorderStyle.THIN);//设置顶部边框 headCellStyle.setBorderRight(BorderStyle.THIN);//设置右部边框 headCell.setCellStyle(headCellStyle); // 单元格应用格式 headCell.setCellValue(beginTime+"汇总表"); //单元格设置值 HSSFRow hssfRow2 = sheet.createRow(2);//添加第2行,从0开始 List<String> titles=Lists.newArrayList("xx","yy"); String[] titleArr = titles.toArray(new String[titles.size()]); for(int j=0;j<=5;j++){
          // 数据写入,顺序为:创建行 - 创建单元格 - 单元格设置格式和赋值 HSSFCell headCellSet = hssfRow2.createCell(j); //设置值时,如果是数值,则需要将格式转化为Integer,
          //不然excel会保存为文本,导致在excel文件中无法进行计算求和之类的问题
headCellSet.setCellValue(titleArr[j].toString()); headCellSet.setCellStyle(cellStyle); } // 添加尾部 // 创建最后一行,设置字体格式,设置单元格格式,设置值 out = new FileOutputStream(filePath); wb.write(out); // 写入文件 return fileName; }catch(Exception e){ e.printStackTrace(); throw e; }finally{ out.close(); wb.close(); } }

 

posted @ 2018-10-31 22:59  轻风偷走了酒  阅读(161)  评论(0)    收藏  举报