public static String getExcel(String title[],String context[][],String url){
//操作执行
try {
//t.xls为要新建的文件名
WritableWorkbook book= Workbook.createWorkbook(new File(url));
//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet("第一页",0);
//写入内容
for(int i=0;i<title.length;i++) //title
sheet.addCell(new Label(i,0,title[i]));
for(int i=0;i<context.length;i++) //context
{
for(int j=0;j<context[i].length;j++)
{
sheet.addCell(new Label(j,i+1,context[i][j]));
}
}
/* sheet.addCell(new Label(0,1,"教师"));
sheet.addCell(new Label(0,3,"助教"));*/
/*合并单元格.合并既可以是横向的,也可以是纵向的
*WritableSheet.mergeCells(int m,int n,int p,int q); 表示由(m,n)到(p,q)的单元格组成的矩形区域合并
* */
/* sheet.mergeCells(0,1,0,2);
sheet.mergeCells(0,3,0,4);*/
//写入数据
book.write();
//关闭文件
book.close();
return url;
}
catch(Exception e) {
e.printStackTrace();
return "生成失败!";
}
}
传进来的数据是二维数组才可以。因为是为了确定数据在Excel里的具体位置。
所以,接口写成二维数组不难,1个for循环就搞定了。
@Override
public String getWriterExcel(WarnSelVo warn) {
List<WarnReturnParam> maps = monitorWarningDao.selectListWarrningInfo(warn);
String[][] strs =new String[maps.size()][];
for(int i=0;i<maps.size();i++){
WarnReturnParam mps =maps.get(i);
String[] str =new String[]{mps.getPrjName(),mps.getMpsName(),mps.getStop_mark(),mps.getAlertDate(),mps.getDiffValue(),mps.getAccValue(),mps.getAlertLevel(),
mps.getOpLevel(),mps.getUpdateTime()};
strs[i]=str;
}
String[] title =new String[]{"工点名称","测点名称"," 预警状态","预警时间","当前差值","累计","预警前级别",
"处理后级别","更新时间"};
String url = WriterExcelUtil.getExcel(title, strs, "e:/t12.xls");
return url;
}
返回的是URL,为了接口实现下载。
/***
* 导出报表
*/
@RequestMapping(value = "/getWriterExcel")
public ResponseEntity<byte[]> getWriterExcel(HttpServletRequest req) throws IOException {
String file1 = QRCodeService.getWriterExcel(warn);
File file = new File(file1);
HttpHeaders headers = new HttpHeaders();
String fileName = new String(("warningInfo_" + TimeToolsUtil.getUserDate() + ".xls").getBytes("UTF-8"),
"iso-8859-1");// 为了解决中文名称乱码问题
headers.setContentDispositionFormData("attachment", fileName); // 下载后显示的名字
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
byte[] t =FileUtils.readFileToByteArray(file);
file.delete();
return new ResponseEntity<byte[]>(t, headers, HttpStatus.CREATED); // 向浏览器发送数据
}