前几天碰到个问题,就是将List集合导出成标准的Excal
在这里我就整理一下思路,也许能帮得上各位。
1、获取dataList集合
dataList = XXXDAO.getName(param);
2、创建表头,副表
String title[] = {
"序号", "ID", "记录时间"}
String title_[] = {
"", "", ""}
3、文件位置,Sheety页面名,表头,副表头,数据集
createExcel("E:/ry.xls", "人员", title,title_,dataList);
4、创建新的excel
/**
* 创建新excel.
*
* @param fileDir excel的路径
* @param sheetName 要创建的表格索引
* @param titleRow excel的第一行即表格头
*/
public static void createExcel(String fileDir, String sheetName, String titleRow[], String titleRow_[],List<Map> dataList) throws Exception {
//创建workbook
workbook = new HSSFWorkbook();
//添加Worksheet(不添加sheet时生成的xls文件打开时会报错)
HSSFSheet sheet1 = workbook.createSheet(sheetName);
//新建文件
FileOutputStream out = null;
try {
HSSFRow row=null;//行
Map map =null;//List中的map
HSSFCell cell=null;//单元格
// 字体加粗
CellStyle style = workbook.createCellStyle();
HSSFFont font = workbook.createFont();
//font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
font.setFontHeightInPoints((short)24);//字号
style.setFont(font);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
CellStyle style1 =workbook.createCellStyle();
style1.setBorderTop(HSSFCellStyle. BORDER_THIN);//上边框
style1.setBorderBottom(HSSFCellStyle. BORDER_THIN);//下边框
style1.setBorderLeft(HSSFCellStyle. BORDER_THIN);//左边框
style1.setBorderRight(HSSFCellStyle. BORDER_THIN);//右边框
style1.setTopBorderColor(HSSFColor.BLACK.index);//上边框颜色
style1.setBottomBorderColor(HSSFColor.BLACK.index);//下边框颜色
style1.setLeftBorderColor(HSSFColor.BLACK.index);//左边框颜色
style1.setRightBorderColor(HSSFColor.BLACK.index);//右边框颜色
style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//写入dataList值
for (int a = 0; a <= dataList.size(); a++) {
//标题
if(a==0){
row= sheet1.createRow(0);
cell = row.createCell(0);
cell.setCellValue("采油生产数据");
cell.setCellStyle(style);
}
//表头
if (a == 1) {
row= sheet1.createRow(1);
for (short i = 0; i < titleRow.length; i++) {
cell = row.createCell(i);
cell.setCellValue(titleRow[i]);
cell.setCellStyle(style1);
}
}
//副表头
if(a==2){
row= sheet1.createRow(2);
for (short i = 0; i < titleRow_.length; i++) {
cell = row.createCell(i);
cell.setCellValue(titleRow_[i]);
cell.setCellStyle(style1);
}
}
//内容
if(a>2){
map = dataList.get(a-3);
String id= map.get("id") != null ? map.get("id").toString() : "";
String rq = map.get("RQ") != null ? map.get("RQ").toString() : "";
String sz[] ={String.valueOf(a-2),id,rq};
//从第a行开始创建
row=sheet1.createRow(a);
for(int i =0;i<titleRow.length;i++){
cell = row.createCell(i);
cell.setCellValue(sz[i]);
cell.setCellStyle(style1);
}
}
//合并单元格
sheet1.addMergedRegion(new CellRangeAddress(0 ,0, 0, 17)) ;
}
out = new FileOutputStream(fileDir);
workbook.write(out);
} catch (Exception e) {
throw e;
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
搞的比较繁琐,但是思路可能简单粗暴了,不是很完美,希望各位能给个更好的解决方式。