/*常常遇到这样的情况,页面显示的只是我们要导出的部分数据。而真正要导出生成EXCEL表的是我们取出来的List<实例对象>
*下面是Java导出excel方法和导出文件名乱发问题的方法
*/
// 导出Excel
public boolean exportExcel(List<Equipment> list) {
try {
OutputStream os = getResponse().getOutputStream();// 取得输出流
getResponse().reset();// 清空输出流
String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
String fileName = encodeFilename("设备信息报表", getRequest());
// fileName = URLDecoder.decode(fileName, "UTF-8");
getResponse().setHeader("Content-disposition",
"attachment; filename=" + fileName + "_" + time + ".xls");// 设定输出文件头
getResponse().setContentType("application/msexcel");// 定义输出类型
WritableWorkbook wbook = Workbook.createWorkbook(os); // 建立excel文件
// String tmptitle = "设备信息报表"; // 标题
WritableSheet wsheet = wbook.createSheet("设备信息报表", 0); // sheet名称
// 设置excel标题
/*
* WritableFont wfont = new WritableFont(WritableFont.ARIAL,
* 16,WritableFont.BOLD,
* false,UnderlineStyle.NO_UNDERLINE,Colour.BLACK);
* WritableCellFormat wcfFC = new WritableCellFormat(wfont);
* wcfFC.setBackground(Colour.AQUA); wsheet.addCell(new Label(1, 0,
* tmptitle, wcfFC));
*/
WritableFont wfont = new jxl.write.WritableFont(WritableFont.ARIAL,
14, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
Colour.BLACK);
new WritableCellFormat(wfont);
String[] equipTitle = { "设备编号", "设备品牌", "柜员编号", "安装地址类型", "布局",
"启用日期", "是否安装视频监控", "网络IP", "机构ID", "管理员", "管理员电话", "工程师",
"工程师电话", "维护起始日期", "设备归属地", "设备类型", "设备型号", "安装地址",
"设备序列号", "放置形式", "物理安装日期", "是否安装ups", "设备来源", "电子安装日期",
"终端版本号" };
String[] equipProperties = { "Id", "EquipBrand", "EmployeeId",
"InstallAddressType", "Layout", "StartDate1",
"IsInstallVideo", "NetIp", "OrganizationId", "Manager",
"Engineer", "MaintainStartDate1", "Area", "EquipType",
"EquipModel", "InstallAddress", "EquipSequence",
"PlaceType", "InstallDate1", "IsInstallUPS", "EquipSource",
"OrganizationName", "ManagerTelephone",
"EngineerTelephone", "EleInstallDate1", "EquipVersion" };
// 生成列头
for (int i = 0; i < equipTitle.length; i++) {
wsheet.addCell(new Label(i, 0, equipTitle[i]));
}
// 添加内容
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < equipProperties.length; j++) {
String properties = ".get" + equipProperties[0] + "()";
wsheet.addCell(new Label(0, i + 1, list.get(i) + properties));
}
}
// 主体内容生成结束
wbook.write(); // 写入文件
wbook.close();
os.close(); // 关闭流
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
public String encodeFilename(String filename, HttpServletRequest request) {
/**
* 获取客户端浏览器和操作系统信息
* 在IE浏览器中得到的是:User-Agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; Alexa Toolbar)
* 在Firefox中得到的是:User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.10) Gecko/20050717 Firefox/1.0.6
*/
String agent = request.getHeader("USER-AGENT");
try {
if ((agent != null) && (-1 != agent.indexOf("MSIE"))) {
String newFileName = URLEncoder.encode(filename, "UTF-8");
newFileName = StringUtils.replace(newFileName, "+", "%20");
if (newFileName.length() > 150) {
newFileName = new String(filename.getBytes("GB2312"), "ISO8859-1");
newFileName = StringUtils.replace(newFileName, " ", "%20");
}
return newFileName;
}
if ((agent != null) && (-1 != agent.indexOf("Mozilla")))
return MimeUtility.encodeText(filename, "UTF-8", "B");
return filename;
} catch (Exception ex) {
return filename;
}
}