相信开发的小伙伴经常会遇到一些生成excel表的需求,我在网上找了下教程看的云里雾里的,所以自己摸索钻研了一个新的,分享出来,希望能帮到大家
这里需要导jar 包 百度 maven POI 选择个使用人多的就行了,这里就不写了,直接贴代码
这里贴出来了代码,讲解下哈 首先 DeviceRealTimeSVO 这里封装的查询条件,然后规定表格名称
public void export(HttpServletRequest request, HttpServletResponse response,@ModelAttribute DeviceRealTimeSVO Vo) throws Exception {
List<DeviceRealTimeStatusVO> voContent = new ArrayList<DeviceRealTimeStatusVO>();
//这里调用service层查询语句
List<DeviceRealTimeStatuss> list = mds.selectlongTimeBydepartmenrId(Vo);
//这里把值遍历塞进塞进去 (这个是必须有的)
for (DeviceRealTimeStatuss deviceRealTimeStatuss : list) {
DeviceRealTimeStatusVO vo = new DeviceRealTimeStatusVO();
vo.setDeviceId(deviceRealTimeStatuss.getDeviceId());
vo.setDeviceName(deviceRealTimeStatuss.getDeviceName());
vo.setDeviceCode(deviceRealTimeStatuss.getDeviceCode());
vo.setCompanyId(deviceRealTimeStatuss.getCompanyId());
vo.setCompanyName(deviceRealTimeStatuss.getCompanyName());
vo.setDepartName(deviceRealTimeStatuss.getDepartName());
vo.setDeviceLebal(deviceRealTimeStatuss.getDeviceLebal());
vo.setLoginIp(deviceRealTimeStatuss.getLoginIp());
vo.setModelSpecification(deviceRealTimeStatuss.getModelSpecification());
if (deviceRealTimeStatuss.getStatus().equals("1")) {
vo.setStatus("换装夹");
}
if (deviceRealTimeStatuss.getStatus().equals("2")) {
vo.setStatus("运行");
}
if (deviceRealTimeStatuss.getStatus().equals("3")) {
vo.setStatus("关机");
}
if (deviceRealTimeStatuss.getStatus().equals("4")) {
vo.setStatus("停机");
}
if (deviceRealTimeStatuss.getStatus().equals("5")) {
vo.setStatus("调试");
}
vo.setTeamId(deviceRealTimeStatuss.getTeamId());
vo.setTeamName(deviceRealTimeStatuss.getTeamName());
vo.setTodayProcessingNumber(deviceRealTimeStatuss.getTodayProcessingNumber());
vo.setTypeCode(deviceRealTimeStatuss.getTypeCode());
voContent.add(vo);
}
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Sheet1");
HSSFRow row = sheet.createRow(0);
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
HSSFCell cell = row.createCell(0);
cell.setCellValue("#");
cell.setCellStyle(style);
//这里对应每行的名称
cell = row.createCell(1);
cell.setCellValue("资产编号");
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellValue("设备名称");
cell.setCellStyle(style);
cell = row.createCell(3);
cell.setCellValue("设备编码");
cell.setCellStyle(style);
cell = row.createCell(4);
cell.setCellValue("类别");
cell.setCellStyle(style);
cell = row.createCell(5);
cell.setCellValue("型号规格");
cell.setCellStyle(style);
cell = row.createCell(6);
cell.setCellValue("标签");
cell.setCellStyle(style);
cell = row.createCell(7);
cell.setCellValue("归属公司");
cell.setCellStyle(style);
cell = row.createCell(8);
cell.setCellValue("使用部门");
cell.setCellStyle(style);
cell = row.createCell(9);
cell.setCellValue("使用班组");
cell.setCellStyle(style);
cell = row.createCell(10);
cell.setCellValue("实时状态");
cell.setCellStyle(style);
cell = row.createCell(11);
cell.setCellValue("今日加工数");
cell.setCellStyle(style);
cell = row.createCell(12);
cell.setCellValue("ip地址");
cell.setCellStyle(style);
//这里表示每行名称对应的值
for (int i = 0; i < voContent.size(); i++) {
row = sheet.createRow(i + 1);
row.createCell(0).setCellValue(i + 1);
row.createCell(1).setCellValue(voContent.get(i).getDeviceId());
row.createCell(2).setCellValue(voContent.get(i).getDeviceName());
row.createCell(3).setCellValue(voContent.get(i).getDeviceCode());
row.createCell(4).setCellValue(voContent.get(i).getTypeCode());
row.createCell(5).setCellValue(voContent.get(i).getModelSpecification());
row.createCell(6).setCellValue(voContent.get(i).getDeviceLebal());
row.createCell(7).setCellValue(voContent.get(i).getCompanyName());
row.createCell(8).setCellValue(voContent.get(i).getDepartName());
row.createCell(9).setCellValue(voContent.get(i).getTeamName());
row.createCell(10).setCellValue(voContent.get(i).getStatus());
row.createCell(11).setCellValue(voContent.get(i).getTodayProcessingNumber());
row.createCell(12).setCellValue(voContent.get(i).getLoginIp());
}
try {
OutputStream output = response.getOutputStream();
response.reset();
//这里表示访问时,文件的名称
String fileName = "设备实时状态";
response.setContentType("application/force-download");// 设置强制下载不打开
// 解决文件名乱码问题
String userAgent = request.getHeader("User-Agent");
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
fileName = URLEncoder.encode(fileName, "UTF-8");
} else {
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
}
response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xls");
response.setContentType("application/msexcel");
wb.write(output);
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
其他的就没啥了,把我上述的几点根据自己需求和逻辑做相应的修改下就可以了。