public class JPoiExcelView extendsAbstractExcelView{private static Logger logger = LoggerFactory.getLogger(JPoiExcelView.class);
String[] tilte= new String[]{"序号","资产名称","资产类型","创建时间","删除人","删除时间","删除主机"};
List categoryList = null;
List userList = null;
HSSFCellStyle headerStyle= null;
HSSFCellStyle contextStyle= null;
@SuppressWarnings("unchecked")
@Overrideprotected void buildExcelDocument(Mapmodel,
HSSFWorkbook workbook,
HttpServletRequest request,
HttpServletResponse response){
OutputStream os= null;try{
categoryList= (List)model.get("allCategory");
userList= (List)model.get("allUser");
String filename= (String)model.get("filename");//String total = (String)model.get("total");//响应信息,弹出文件下载窗口
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment; filename="
+ URLEncoder.encode(filename, "UTF-8"));
os=response.getOutputStream();
HSSFSheet sheet= workbook.createSheet("资产信息");
headerStyle=getHeader(workbook);
contextStyle=getContext(workbook);
String titleName= "资产信息";//添加标题和文件列表头
addTitle(sheet,tilte,titleName);//添加文件信息
List list = (List)model.get("items");
addContextByList(sheet,list,tilte.length);
workbook.write(os);
}catch(Throwable e) {
logger.error("资产信息导出出错:"+e.getMessage(),e);
}finally{try{
os.flush();
os.close();
}catch(Throwable e) {
logger.error("资产信息导出Excel出错:"+e.getMessage(),e);
}
}
}//添加标题和列头信息
public voidaddTitle(HSSFSheet sheet, String[] assettitle, String total,String titleName){
HSSFRow row= sheet.createRow(0);
HSSFCell cell= row.createCell(2);
cell.setCellValue(titleName+"(共有"+total+"条)");
row= sheet.createRow(1);for (int i = 0; i < assettitle.length; i++) {
cell=row.createCell(i);
cell.setCellValue(assettitle[i]);
}
}//添加标题和列头信息
public voidaddTitle(HSSFSheet sheet, String[] assettitle,String titleName) {//添加标题第一行 合并单元格
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, assettitle.length-1));
HSSFRow row= sheet.createRow(0);
HSSFCell cell= row.createCell(0);
cell.setCellValue(titleName);
cell.setCellStyle(headerStyle);
row= sheet.createRow(1);for (int i = 0; i < assettitle.length; i++) {
cell=row.createCell(i);
cell.setCellValue(assettitle[i]);
cell.setCellStyle(contextStyle);
}
}//添加所有文件信息 从第三行开始添加//{"序号","资产名称","资产类型","创建时间","删除人","删除时间","删除主机"};
@SuppressWarnings("unchecked")private void addContextByList(HSSFSheet sheet, List list, intlength){try{
HSSFRow row= null;
HSSFCell cell= null;if (list!=null) {
List mObjects = (List)list;
MObject mObject= null;
String value= "";for (int i = 0; i < list.size(); i++) {
row= sheet.createRow(i+2);for (int j = 0; j < length; j++) {
mObject=mObjects.get(i);if(j==0){
cell=row.createCell(j);
cell.setCellValue(i+"");
cell.setCellStyle(contextStyle);
}else{
value=getValue(mObject,j);
cell=row.createCell(j);
cell.setCellValue(value);
cell.setCellStyle(contextStyle);
}
}
}for (int j = 1; j < length; j++) {
sheet.autoSizeColumn(j);//单元格宽度 以最大的为准
}
}else{
row= sheet.createRow(2);
cell= row.createCell(0);
}
}catch(Throwable e) {
logger.error("填充内容出现错误:"+e.getMessage(),e);
}
}//根据列名获取值,先写死,之后再想其他办法//{"序号","资产名称","资产类型","创建时间","删除人","删除时间","删除主机"};
private String getValue(MObject mObject, intj) {switch(j) {case 1:returnmObject.getName();case 2:return getAssetCategory(objectToString(mObject.getCategoryId()),null);case 3:returnobjectToString(mObject.getCreatedTime());case 4:return getUserInfo(objectToString(mObject.getDeletedBy()),null);case 5:returnobjectToString(mObject.getDeletedTime());case 6:return objectToString(mObject.getExtraData()==null? "" :mObject.getExtraData().get("delHostName"));default:
}return "";
}privateString objectToString(Object object){if(object==null){return "";
}else{if(object instanceofDate){
DateFormat from_type= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=(Date)object;returnfrom_type.format(date);
}else{return(String)object;
}
}
}//标题样式
public staticHSSFCellStyle getHeader(HSSFWorkbook workbook){
HSSFCellStyle format=workbook.createCellStyle();
HSSFFont font=workbook.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗
font.setFontName("黑体");
font.setFontHeightInPoints((short)16);
format.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
format.setAlignment(HSSFCellStyle.ALIGN_CENTER);
format.setFont(font);returnformat;
}//内容样式
public staticHSSFCellStyle getContext(HSSFWorkbook workbook){
HSSFCellStyle format=workbook.createCellStyle();
HSSFFont font=workbook.createFont();
font.setFontName("宋体");
format.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
format.setAlignment(HSSFCellStyle.ALIGN_CENTER);
format.setFont(font);returnformat;
}//获取用户名称
/*** id 用户id
* key:用于扩展属性的key值(若有)
**/
publicString getUserInfo(String id,String key){if(userList !=null&&userList.size() > 0){for(User user : userList) {if( user.getId().equals(id))returnuser.getName();
}
}return "";
}//获取类型名称
/*** id 类型id
* key:用于扩展属性的key值 (若有)
**/
publicString getAssetCategory(String id,String key){if(categoryList!=null && categoryList.size()>0){for(AssetCategoryDefine assetCategoryDefine : categoryList) {if(assetCategoryDefine.getId().equals(id))returnassetCategoryDefine.getName();
}
}return "";
}
}