/**
* 输出Excel文档
*
* @param response
* @param sheetName 文件名称
* @param firstCellTile 第一行的标题
* @param cells 列名集合
* @param cellData 每列数据集合,应该和列名对应起来
* @throws IOException
*/
public static void createExcel(HttpServletResponse response, String sheetName, String firstCellTile,
List<String> cells, List<Object[]> cellData) throws IOException {
//创建HSSFWorkbook对象(excel的文档对象)
HSSFWorkbook wb = new HSSFWorkbook();
//建立新的sheet对象(excel的表单)
HSSFSheet sheet = wb.createSheet(sheetName);
//在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
HSSFRow row1 = sheet.createRow(0);
//创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
HSSFCell cell = row1.createCell(0);
//设置单元格内容
cell.setCellValue(firstCellTile);
//合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, (cells.size() - 1)));
//在sheet里创建第二行
HSSFRow row2 = sheet.createRow(1); //创建单元格并设置单元格内容
for (int i = 0; i < cells.size(); i++) {
row2.createCell(i).setCellValue(cells.get(i));
}
//创建单元格并设置单元格内容
for (int i = 0; i < cellData.size(); i++) {
//在sheet里从第三行开始创建
HSSFRow row3 = sheet.createRow(i + 2);
Object[] obj = cellData.get(i);
for (int k = 0; k < obj.length; k++) {
String type = obj[k].getClass().getName();
if ("java.sql.Timestamp".equals(type)) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义格式,不显示毫秒
row3.createCell(k).setCellValue(df.format(obj[k]));
} else {
row3.createCell(k).setCellValue(String.valueOf(obj[k]));
}
}
}
//输出Excel文件
OutputStream output = response.getOutputStream();
response.reset();
//中文需要重新编码,不然无法显示中文文件名称
sheetName = new String(sheetName.getBytes(), "ISO-8859-1");
response.setHeader("Content-disposition", "attachment; filename=" + sheetName + ".xls");
response.setContentType("application/msexcel");
wb.write(output);
output.close();
}
cell 数据样式: List list=new ArrayList<>(); list.add("1“);。。。。。
cellData中Object【】数据样式 obj1,obj2,obj3. PS:obj的数组长度应该与cells的长度是一样的。
结果样式: