美文网首页
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