美文网首页
java导出excel

java导出excel

作者: 奋斗的磊哥 | 来源:发表于2019-01-16 15:51 被阅读0次

    java导出excel的方法(使用HSSFWorkbook导出)

    //生成数据 list1作为表头,list2作为数据
    public static HSSFWorkbook exportExcel(List list1, List list2) {
      //创建一个HSSFWorkbook对象
      HSSFWorkbook book = new HSSFWorkbook();
      //创建一个sheet工作表
      HSSFSheet sheet = book.createSheet("XXX");
      //创建行(行和单元格都是从0开始)
      HSSFRow row = sheet.createRow(0);
      for (int i=0; i<list1.size(); i++){
          cell = row.createCell(i);
          cell.setCellValue(list1.get(i).toString());
       }
      //这样写list2的数据会重复导出list1.size()次
      for (int i=0; i<list1.size(); i++){
          row = sheet.createRow(i+1);
          for (int j=0; j<list2.size(); j++){
             cell = row.createCell(j);
             cell.setCellValue(list2.get(j).toString());
          }
       }
      return book;
    }
    
    //导出文件,在计算机上的路径用“/”表示层级
    public static void exportFile(HSSFWorkbook book, String path) {
      try{
        OutputStream os = new FileOutputStream(new File(path));
        book.write(os);
        os.close();
      }catch(Exception e) {
        e.printStackTrace();
      }
    }
    
    //给表格添加样式,创建单元格样式对象
    HSSFCellStyle style = workbook.createCellStyle();
    
    1、设置字体
    HSSFFont font = book.createFont();
    font.setFontHeight((short)200);  //这个方法设置字体要很大的数字
    font.setFontHeightInPoints((short)12);  //这个方法是平时使用excel时设置的值
    font.setFontName("黑体");  //宋体,黑体等字体
    font.setColor(HSSFColor.BLACK.index);  //有红,黑,蓝等多种字体
    style.setFont(font);  //将字体设置进单元格样式中
    
    2、设置对其方式
    style.setAlignment(args); //水平对齐方式
    //常用对齐方式
    HSSFCellStyle.ALIGN_CENTER  //居中对齐
    HSSFCellStyle.ALIGN_LEFT  //左对齐
    HSSFCellStyle.ALIGN_RIGHT  //右对齐
    
    style.setVerticalAlignment(args); //垂直对齐方式
    HSSFCellStyle.VERTICAL_CENTER  //居中对齐
    
    3、设置边框
    style.setBorderBottom(args);  //设置底边框
    style.setBorderTop(args);  //设置上边框
    style.setBorderLeft(args);  //设置左边框
    style.setBorderRight(args);  //设置右边框
    //常用边框
    BorderStyle.NONE  //无边框
    BorderStyle.THIN  //细边框
    BorderStyle.MEIUM  //中等粗细边框
    BorderStyle.THICK  //粗边框
    
    在设置完样式之后,单元格直接设置为该样式就行了
    cell.setCellStyle(style);
    
    4、单元格合并
    //四个参数分别为:起始行,结束行,起始列,结束列
    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 7));
    注意:合并单元格的时候,如果合并两个列,则createCell(args)这两个列数都是属于合并后的列里面,合并行同理
    
    为合并后的单元格设置边框
    CellRangeAddress cra =new CellRangeAddress(1, 3, 1, 3); // 起始行, 终止行, 起始列, 终止列
    sheet.addMergedRegion(cra);
    // 使用RegionUtil类为合并后的单元格添加边框
    RegionUtil.setBorderTop(1, cra, sheet, workbook); //上边框
    RegionUtil.setBorderBottom(1, cra, sheet, workbook); // 下边框
    RegionUtil.setBorderLeft(1, cra, sheet, workbook); // 左边框
    RegionUtil.setBorderRight(1, cra, sheet, workbook); // 右边框
    
    设置自动列宽
    sheet.autoSizeColumn(i)  // i为第几列,如果需要所有的单元格都设置为自动列宽则要遍历所有单元格
    
    5、设置单元格下拉框
    String[] isOrNot = new String[] {"是","否"};
    DVConstraint constraint = DVConstraint.createExplicitListConstraint(isOrNot);
    //四个参数分别为:起始行,结束行,起始列,结束列
    CellRangeAddressList region = new CellRangeAddressList(3, 3, 5, 6);
    HSSFDataValidation validation = new HSSFDataValidation(region, constraint);
    sheet.addValidationData(validation);
    
    6、设置行移动
    //四个参数分别为:起始行,终止行,移动行数,是否复制行高,是否重新设置行高
    sheet.shiftRows(startRow, endRow,n,true,false);
    
    7、设置打印的格式
    HSSFPrintSetup ps = shee.getPrintSetup();
    ps.setLandscape(false); // 打印方向,true:横向,false:纵向
    ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE); //纸张
    sheet.setMargin(HSSFSheet.TopMargin,( double ) 0.5 );// 页边距(上)
    sheet.setMargin(HSSFSheet.BottomMargin,( double ) 0.5 );// 页边距(下)
    sheet.setMargin(HSSFSheet.LeftMargin,( double ) 0.1 );// 页边距(左)
    sheet.setMargin(HSSFSheet.RightMargin,( double ) 0.1 );// 页边距(右)
    sheet.setHorizontallyCenter(true);//设置打印页面为水平居中
    sheet.setVerticallyCenter(true);//设置打印页面为垂直居中使用POI输出Excel时打印页面的设置
    

    相关文章

      网友评论

          本文标题:java导出excel

          本文链接:https://www.haomeiwen.com/subject/yrnwzftx.html