【前言】
昔日龌龊不足夸,今朝放荡思无涯。
【思路】
我们在桌面上创建Excel的时候:
1、首先创建一个Excel也就是
//声明工作薄
HSSFWorkbook wb = new HSSFWorkbook();
2、接下来未页签sheet重命名,也就是
//sheet页签部分
HSSFSheet sheet = wb.createSheet("页签的名字");
3、规划一下有多少列,再起一个标题,也就是
//合并标题
sheet.addMergedRegion(new Region(0, (short)0, (short)0,(short)(规划的列数)));
4、创建一个表头,也就是
//创建表头
row = sheet.createRow(1);
5、循环插入表格,也就是加一个for循环
//第一层为循环创建行
for (int i = 0; i < contentLst.size(); i++) {
row = sheet.createRow(i+2);
row.setHeight((short) 550);
//第二层创建每行的单元格,并填内容
for (int j = 0; j < contentLst.get(i).length; j++) {
cell = row.createCell(j);
cell.setCellValue(String.valueOf(contentLst.get(i)[j]));
cell.setCellStyle(shstyle);
}
}
6、内容填完了,你不觉得有的字多有的字少,也就是列宽、行高有问题。怎么办呢?也就是
//创建标题
HSSFRow row = sheet.createRow(0);
//设置标题行高
row.setHeight((short) 行高数);
//自定义列宽部分,你将每个列宽作为参数传过来具体每列多宽得自己测试了。
if(liekuanLst != null && liekuanLst.size() > 0){
for (int i = 0; i < liekuanLst.size(); i++) {
sheet.setColumnWidth((short)i, liekuanLst.get(i));
}
}
7、内容填完了是不是好看,加点样式?也就是
//居中字体等样式区域
sheet.setHorizontallyCenter(true);
//主题
HSSFCellStyle titlefontshstyle = wb.createCellStyle();
HSSFFont titlefont = wb.createFont();
setcontentStyleTable(titlefontshstyle, titlefont, "黑体", 20, true, false);
public static void setcontentStyleTable(HSSFCellStyle shstyle, HSSFFont titlefont, String string, int i, Boolean is_bold, Boolean is_border) {
titlefont.setFontHeightInPoints((short) i);
titlefont.setFontName(string);
shstyle.setWrapText(true);//自动换行
shstyle.setAlignment(HSSFCellStyle.VERTICAL_CENTER);
if(i != 11 && is_bold){
titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
}
if(is_border){
shstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框
shstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左
shstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右
shstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上
}
shstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
shstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//定义字体样式左右居中
shstyle.setFont(titlefont);
}
8、样式也调了,是不是调一调打印,也就是
//添加打印样式
addPrintClassData(sheet, false);
//打印的纸张样式
public static void addPrintClassData(HSSFSheet sheet, Boolean is_landscape) {
sheet.setMargin(HSSFSheet.TopMargin, 0.4);//上≈2
sheet.setMargin(HSSFSheet.BottomMargin, 0.4);//下≈2
sheet.setMargin(HSSFSheet.LeftMargin, 0.2);//左≈0.5
sheet.setMargin(HSSFSheet.RightMargin, 0.2);//右≈0.5
sheet.setHorizontallyCenter(true);
sheet.setDefaultRowHeight((short) 400);//设置默认行高
HSSFPrintSetup ps = sheet.getPrintSetup();
ps.setLandscape(is_landscape);//true横向,false纵向
ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);//设置纸张A4
}
9、Excel创建完了,你怎么给我呢?那得看你要什么了,也就是
ByteArrayOutputStream bos = null;
try{
/*1转为输入流*/
bos = new ByteArrayOutputStream();
wb.write(bos);
byte[] bytes = bos.toByteArray();
InputStream in = new ByteArrayInputStream(bytes);
/*2直接写入Excel文档*/
/*String fileName = new Date().getTime()+"frozen_excel.xls";
FileOutputStream output = new FileOutputStream("/temp/"+fileName);
wb.write(output);
output.close();*/
bos.close();
}catch (Exception e){
e.printStackTrace();
}
【总结】
看看上面9步需要哪些参数,将参数封装做一个统一的公共方法,也就是
/**
* 导出Excel
* @param title Excel标题
* @param liekuanLst 设置的每个列宽
* @param biaotouLst 表头内容
* @param contentLst 单元格内容
* @return 待定
*/
public String export_Excel(String title, List liekuanLst, List biaotouLst, List
【结束语】
还可以继续优化!