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时打印页面的设置
网友评论