1、Excel导出模板
2、按照模板得格式内容进行数据查询导出
创建 “Servlet” 类在 doPost中 进行导出功能实现:
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* <pre>
1. 接收参数集合
2. 必传参数验证
3. xss攻击和防止sql注入
3.1 xss攻击
3.2 防止sql注入
4. 获取微服务地址
5. 执行存储过程
6. 创建excel并写入表头信息
7. 将数据写入到excel中
* </pre>
*/
// 程序开始-当前时间
this.commonLogout(CommonUtils.getCurrentTime() + ",导出 - start");
JSONObject jObjectStr; // 返回给前端的结果对象
String strRet = ""; // 返回给前端的结果
JSONArray result = null; // 最终数据
try {
/* 1. 接收参数集合 */
Map<String, Object> mapReqData = HttpRequestParse.parse(request);
this.commonLogout(CommonUtils.getCurrentTime() + " 接收到的参数:" + mapReqData);
// 如需要cookies 得值可通过以下方法取
Map myCookies = (Map) this.getCookieData(mapReqData);// 获取cookie
Map<String, String> mapReqParameterData = this.getMapWebArg(mapReqData); // 获取"GET/POST请求数据"
// 接收前端传得条件参数
// 请求用户id
String argUserId = "";
// 租户id
String argTenantid = "";
// 模块url
String argModuleurl = "";
// 主ID
String developPlanId = "";
// 版本号
String argReqVersion = "";
// 对前端得参数进行非空验证
argUserId = mapReqParameterData.get(ProjConstant.PrivilegeMgtConstant.FRONT_KEY_SYSMGT_ARG_REQ_USERID);
argTenantid = mapReqParameterData.get(ProjConstant.PrivilegeMgtConstant.FRONT_KEY_SYSMGT_ARG_REQ_TENANTID);
argModuleurl = mapReqParameterData
.get(ProjConstant.PrivilegeMgtConstant.FRONT_KEY_SYSMGT_ARG_REQ_MODULEURL);
developPlanId = mapReqParameterData.get("arg_req_develop_planId");
argReqVersion = mapReqParameterData.get("arg_req_version");
/* 2. 必传参数验证 */
StringBuilder validateRet = new StringBuilder();
boolean validateFlag = true;
if (StringUtils.isEmpty(argUserId)) {
validateFlag = false;
validateRet.append("参数缺少用户id!");
} else if (StringUtils.isEmpty(argTenantid)) {
validateFlag = false;
validateRet.append("参数缺少租户id!");
} else if (StringUtils.isEmpty(argModuleurl)) {
validateFlag = false;
validateRet.append("参数缺少页面路径url!");
} else if (StringUtils.isEmpty(developPlanId)) {
validateFlag = false;
validateRet.append("参数缺少主表关联ID!");
}else if (StringUtils.isEmpty(argReqVersion)) {
validateFlag = false;
validateRet.append("参数缺少版本号!");
}
if (!validateFlag) {
this.commonLogout("前端传值缺参数:" + validateRet.toString());
throw new FrontReturnException("0", "操作失败!");
}
/* 6. 创建excel并写入表头信息 */
XSSFWorkbook workBook = null; // 创建excel
String excelName = "本单位研发项目清单导出"; // excel名称
workBook = ExcelBPNewTool.createHeadForExcel('', null, (short) 0);
String[] date = createDateKey(); // 返回的数据字段 - **文章下有对应createDateKey方法名**
// 5、 查询数据库需要导出那些数据并进行返回
String queryExistSql = " SELECT dp.*,og.name,op.last_name FROM cucc_project.develop_plan_list dp "
+ " left join org_organization og on dp.ou_id = og.organization_id "
+ " left join org_person op on dp.create_user = op.employee_number "
+ " WHERE dp.develop_plan_id = '" + developPlanId + "' and dp.version_upload = '" + argReqVersion + "' order by dp.first_order asc ;";
// 执行Sql 语句,以下查询接口各位根据项目框架情况自由发挥
JSONObject transResultExist = this.queryDb(sqlSelectUrl, queryExistSql);
/* 7. 将数据写入到excel中 */
if (ProjConstant.ProjCommonStandardConstant.RET_CODE_VALUE_SUCCESS
.equals(transResultExist.getString("RetCode"))) { // 存在BP详情清单
result = new JSONArray();
// 判断数据是否存在
if (transResultExist.has("DataRows")) {
String type = "正常";
// 查询 dataRows 获取数据值
String Query = transResultExist.get("DataRows").toString();
JSONArray jsonArray = new JSONArray(Query);
// 循环遍历数据进入插入对应得表头
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
JSONObject rolePersonsJsonObject = new JSONObject();
// 优先排序 *
rolePersonsJsonObject.put("arg_req_first_order",jsonObject.get("first_order").toString());
// 单位id *
rolePersonsJsonObject.put("arg_req_ou_id",jsonObject.get("name").toString());
//部门名称-主建部门 *
rolePersonsJsonObject.put("arg_req_dept_name",jsonObject.get("dept_name").toString());
// 专业线 *
rolePersonsJsonObject.put("arg_req_majar_line_ou",jsonObject.get("major_line_ou").toString());
// 项目名称 *
rolePersonsJsonObject.put("arg_req_proj_name",jsonObject.get("proj_name").toString());
// 应用主体 *
rolePersonsJsonObject.put("arg_req_majar_line_proj",jsonObject.get("major_line_proj").toString());
BigDecimal mon1 = new BigDecimal(jsonObject.get("expense_expenditure").toString());
BigDecimal mon2 = new BigDecimal(jsonObject.get("capitalize_expenditure").toString());
BigDecimal money = mon1.add(mon2);
rolePersonsJsonObject.put("arg_req_proj_money",money); // 研发项目经费总投入(万元)
rolePersonsJsonObject.put("arg_req_expense_expenditure",jsonObject.get("expense_expenditure").toString()); //费用化支出(万元)
rolePersonsJsonObject.put("arg_req_expense_entrust",jsonObject.get("expense_entrust").toString()); // 费用化支出-委托开发费用(万元
rolePersonsJsonObject.put("arg_req_expense_own",jsonObject.get("expense_own").toString()); // 费用化支出-自有研发人工成本(万元)
rolePersonsJsonObject.put("arg_req_capitalize_expenditure",jsonObject.get("capitalize_expenditure").toString()); // 资本化支出(万元)
rolePersonsJsonObject.put("arg_req_capitalize_entrust",jsonObject.get("capitalize_entrust").toString()); // 资本化支出-委托开发费用(万元)
rolePersonsJsonObject.put("arg_req_capitalize_own",jsonObject.get("capitalize_own").toString()); // 资本化支出-自有研发人员工时(人年) *
rolePersonsJsonObject.put("arg_req_develop_content",jsonObject.get("develop_content").toString()); // 主要研发内容 *
rolePersonsJsonObject.put("arg_req_proj_value",jsonObject.get("proj_value").toString()); // 预期研发成果200字左右 *
rolePersonsJsonObject.put("arg_req_create_user",jsonObject.get("last_name").toString()); // 处理人
rolePersonsJsonObject.put("arg_req_create_time",jsonObject.get("create_time").toString().substring(0,19)); // 上传时间
if(jsonObject.get("proj_state").toString().equals("1")){
type = "已修改";
} else if(jsonObject.get("proj_state").toString().equals("2")){
type = "已删除";
}
rolePersonsJsonObject.put("arg_req_proj_state",type); // 状态
result.put(rolePersonsJsonObject);
}
// 向Excel写入数据
ExcelBPNewTool.insertDataToExcel(workBook, result, "", date);
} else {
// 没有查找到角色信息,向Excel写入空数据
ExcelBPNewTool.insertDataToExcel(workBook, result, "", date);
}
// 导出Excel
ExcelBPNewTool.exportExcelXSSF(request, response, workBook, excelName);
// 以下代码 数据返回及异常抛出,可根据项目框架情况自定
} else {
this.commonLogout("导出 - 执行查询出错!");
jObjectStr = new JSONObject();
jObjectStr.put(ConstantUtility.StandardWebConstant.KEY_RETCODE,
ProjConstant.ProjCommonStandardConstant.FRONT_RET_CODE_ERROR);
jObjectStr.put(ConstantUtility.StandardWebConstant.KEY_RETVAL,
ProjConstant.ProjCommonStandardConstant.FRONT_RET_VAL_ERROR);
strRet = jObjectStr.toString();
}
} catch (Exception e) {
this.commonLogout(e.getMessage());
jObjectStr = new JSONObject();
jObjectStr.put(ConstantUtility.StandardWebConstant.KEY_RETCODE,
ProjConstant.ProjCommonStandardConstant.FRONT_RET_CODE_ERROR);
jObjectStr.put(ConstantUtility.StandardWebConstant.KEY_RETVAL,
ProjConstant.ProjCommonStandardConstant.FRONT_RET_VAL_ERROR);
strRet = jObjectStr.toString();
}
this.commonLogout(strRet);
response.getOutputStream().write(strRet.getBytes("UTF-8"));
response.flushBuffer();
// 项目结束 - 结束时间
this.commonLogout(CommonUtils.getCurrentTime() + ",导出 - end");
}
/**
* createDateKey:生成返回字段,相当于Excel列表头 对应数据
* @return
* @since JDK 1.8
*/
private String[] createDateKey() {
// 返回的数据字段
String firstOrder = "arg_req_first_order";
String ouId = "arg_req_ou_id";
String deptName = "arg_req_dept_name";
String majarLineOu= "arg_req_majar_line_ou";
String projName= "arg_req_proj_name";
String majarLineProj= "arg_req_majar_line_proj";
String projMoney= "arg_req_proj_money";
String expenseExpenditure = "arg_req_expense_expenditure";
String expenseEntrust = "arg_req_expense_entrust";
String expenseOwn = "arg_req_expense_own";
String capitalizeExpenditure = "arg_req_capitalize_expenditure";
String capitalizeEntrust = "arg_req_capitalize_entrust";
String capitalizeOwn= "arg_req_capitalize_own";
String developContent = "arg_req_develop_content";
String projValue = "arg_req_proj_value";
String createUser = "arg_req_create_user";
String createTime = "arg_req_create_time";
String projState = "arg_req_proj_state";
return new String[] { firstOrder, ouId, deptName, majarLineOu, projName, majarLineProj, projMoney,expenseExpenditure,expenseEntrust
,expenseOwn,capitalizeExpenditure,capitalizeEntrust,capitalizeOwn,developContent,projValue,createUser,createTime,projState};
}
3、Excle导出工具类
创建 “工具类(ExcelBPNewTool)” 在调用方法 进行导出功能实现:
package com.chinaunicomrjyjy.cuccproject.utils;
import com.rjyjy.commonutils.BDUServiceBaseTools;
import com.rjyjy.loghandle.LogService;
import com.rjyjy.servicehandle.utility.ConstantUtility;
import org.apache.commons.codec.binary.Base64;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import org.json.JSONArray;
import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;
/**
* @ClassName ExcelTool
* @Description excel导出工具类
* @Author chang
* @version
* @since JDK 1.8
*/
public class ExcelBPNewTool {
private static final String CHARACTERENCODING = ConstantUtility.DefaultConfig.DEFAULTCONFIG_CHARACTERENCODING;
private static final String SHEETNAME = "本单位研发项目清单";
private static final String FONT = "宋体";
private static final short FONTSIZE = 12;
private static final String[] PARAMETERS = new String[] { SHEETNAME, FONT };
ExcelBPNewTool() {
}
/**
*
* createHeadForExcel:(创建表头)仅有一个sheet,sheet默认Sheet1
*
* @author haoz6
* @param headString
* 表头数组
* @param fontSize
* 表头字体大小
* @return
* @since JDK 1.8
*/
@SuppressWarnings("deprecation")
public static XSSFWorkbook createHeadForExcel(String[] headString,
String[] parameters, short fontSize) {
// Excel表头相关
int defaultRowHeight = 40;
String[] parameters2 = parameters;
short fontSize2 = fontSize;
if (parameters2 == null) {
parameters2 = PARAMETERS;
}
if (fontSize2 == 0) {
fontSize2 = FONTSIZE;
}
// 创建excel
XSSFWorkbook workbook = new XSSFWorkbook();
// 创建sheet
XSSFSheet sheet = workbook.createSheet(parameters2[0]);
sheet.setDefaultRowHeightInPoints(defaultRowHeight);
// 设置字体
XSSFFont headfont = workbook.createFont();
// 字体类型
headfont.setFontName(parameters2[1]);
// 字体大小
headfont.setFontHeightInPoints(fontSize2);
// 设置样式
XSSFCellStyle headstyle = workbook.createCellStyle();
headstyle.setFont(headfont);
// 左右居中
headstyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
// 上下居中
headstyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
// 边框
headstyle.setBorderBottom(BorderStyle.THIN);
headstyle.setBorderLeft(BorderStyle.THIN);
headstyle.setBorderRight(BorderStyle.THIN);
headstyle.setBorderTop(BorderStyle.THIN);
// 换行
headstyle.setWrapText(true);
int rowNum = 0;
// 创建表头行// 第1行,标题
XSSFRow titleRow = sheet.createRow(0);
titleRow.setHeight((short) 800);// 设置行高
XSSFCell row1Cell1 = titleRow.createCell(0);
row1Cell1.setCellValue("研发项目清单");
row1Cell1.setCellStyle(headstyle);
sheet.addMergedRegion(new CellRangeAddress(0,0,0,17));//标题 合并单元格
//第二行
XSSFRow row2 = sheet.createRow(1);
row2.setHeight((short) 800);
// 设置Excel 第二行表头
String[] row_second = {"优先级排序", "项目实施部门", "", "", "研发项目", "", "研发项目经费总投入(万元)","项目主要投入分解","","","","","","主要研发内容和预期研发成果(200字左右简要描述)","研发成果预期价值(成果未来应用场景及对生产经营的主要价值贡献点)","处理人","上传时间","状态"};
for (int i = 0; i < row_second.length; i++) {
XSSFCell tempCell = row2.createCell(i);
tempCell.setCellValue(row_second[i]);
tempCell.setCellStyle(headstyle);
}
// 合并 设置每个表头 进行跨行跨列,可对应导出模板 进行了解
sheet.addMergedRegion(new CellRangeAddress(1, 2, 0, 0));//优先级排序
sheet.addMergedRegion(new CellRangeAddress(1, 1, 1, 3));//项目实施部门
sheet.addMergedRegion(new CellRangeAddress(1, 1, 4, 5));//研发项目
sheet.addMergedRegion(new CellRangeAddress(1, 2, 6, 6));//研发项目经费总投入(万元)
sheet.addMergedRegion(new CellRangeAddress(1, 1, 7, 12));//项目主要投入分解
sheet.addMergedRegion(new CellRangeAddress(1, 2, 13, 13));//主要研发内容
sheet.addMergedRegion(new CellRangeAddress(1, 2, 14, 14));//研发成果预期价值
sheet.addMergedRegion(new CellRangeAddress(1, 2, 15, 15));//处理人
sheet.addMergedRegion(new CellRangeAddress(1, 2, 16, 16));//上传时间
sheet.addMergedRegion(new CellRangeAddress(1, 2, 17, 17));//状态
//第三行
XSSFRow row3 = sheet.createRow(2);
row3.setHeight((short) 800);
// 设置Excel 第三行表头,合并在第二行得某个分类下, 可对应模板查看 了解
String[] row_third = {"", "单位名称", "部门名称(研发单元)", "研发单元所属专业线", "项目名称", "应用主体", "","费用化支出(万元)","其中:委托开发费用(万元)","其中:自有研发人工成本(万元)","资本化支出(万元)","其中:委托开发费用(万元)","自有研发人员工时(人年)","","","","",""};
for (int i = 0; i < row_third.length; i++) {
XSSFCell tempCell = row3.createCell(i);
tempCell.setCellValue(row_third[i]);
tempCell.setCellStyle(headstyle);
}
// 设置Excel 列宽,也可以进行列宽 自适应 已下有方法
sheet.setColumnWidth(0, 256*10+184);
sheet.setColumnWidth(1, 256*20+184);
sheet.setColumnWidth(2, 256*20+184);
sheet.setColumnWidth(3, 256*20+184);
sheet.setColumnWidth(4, 256*20+184);
sheet.setColumnWidth(5, 256*20+184);
sheet.setColumnWidth(6, 256*18+184);
sheet.setColumnWidth(7, 256*11+184);
sheet.setColumnWidth(8, 256*11+184);
sheet.setColumnWidth(9, 256*11+184);
sheet.setColumnWidth(10, 256*11+184);
sheet.setColumnWidth(11, 256*11+184);
sheet.setColumnWidth(12, 256*11+184);
sheet.setColumnWidth(13, 256*30+184);
sheet.setColumnWidth(14, 256*30+184);
sheet.setColumnWidth(15, 256*11+184);
sheet.setColumnWidth(16, 256*30+184);
sheet.setColumnWidth(17, 256*8+184);
return workbook;
}
/**
*
* insertDataToExcel:向Excel中插入数据
*
* @author haoz6
* @param workBook
* @param dataRowObject
* @since JDK 1.8
*/
public static void insertDataToExcel(XSSFWorkbook workBook,
JSONObject dataRowObject, String[] headString) {
JSONArray data = new JSONArray(dataRowObject
.get(ConstantUtility.StandardWebConstant.KEY_DATAROWS)
.toString());
insertDataToExcel(workBook, data, null, headString);
}
/**
*
* insertDataToExcel:向Excel中插入数据
*
* @author haoz6
* @param workBook
* @since JDK 1.8
*/
@SuppressWarnings("deprecation")
public static void insertDataToExcel(XSSFWorkbook workBook,
JSONArray dataJsonArray, String sheetName, String[] headString) {
// 判断 创建sheet页名称
String sheetName2 = "";
if (sheetName == null||sheetName=="") {
sheetName2 = SHEETNAME;
} else {
sheetName2 = sheetName;
}
/**
* 设置字体和样式
*/
XSSFFont headfont = workBook.createFont();
// 字体类型
headfont.setFontName(FONT);
// 字体大小
headfont.setFontHeightInPoints(FONTSIZE);
// 样式
XSSFCellStyle headstyle = workBook.createCellStyle();
headstyle.setFont(headfont);
/*// 左右居中
headstyle.setAlignment(XSSFCellStyle.ALIGN_LEFT);
// 上下居中
headstyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);*/
// 竖向居中
headstyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 横向居中
headstyle.setAlignment(HorizontalAlignment.CENTER);
headstyle.setBorderBottom(BorderStyle.THIN);
headstyle.setBorderLeft(BorderStyle.THIN);
headstyle.setBorderRight(BorderStyle.THIN);
headstyle.setBorderTop(BorderStyle.THIN);
headstyle.setWrapText(true);
JSONObject oneData = null;
// 取Sheet
XSSFSheet sheet = workBook.getSheet(sheetName2);
JSONArray data = dataJsonArray;
for (int i = 0; i < data.length(); i++) {
oneData = (JSONObject) data.get(i);
// 第2行
XSSFRow timesheeRow = sheet.createRow(i + 3);
timesheeRow.setHeight((short) 500);
XSSFCell tempCell = null;
// 循环单元格填入数据
for (int j = 0; j < 18; j++) {
tempCell = timesheeRow.createCell(j);
tempCell.setCellStyle(headstyle);
String tempValue;
if (j == 0) {
// 优先排序
tempValue = oneData.get("arg_req_first_order").toString();
} else if (j == 1) {
// 单位id)
tempValue = oneData.get("arg_req_ou_id").toString();
} else if (j == 2) {
// 部门名称
tempValue = oneData.get("arg_req_dept_name").toString();
} else if (j == 3) {
// 专业线
tempValue = oneData.get("arg_req_majar_line_ou").toString();
} else if (j == 4) {
// 项目名称
tempValue = oneData.get("arg_req_proj_name").toString();
} else if (j == 5) {
// 应用主体
tempValue = oneData.get("arg_req_majar_line_proj").toString();
} else if (j ==6){
// 研发项目经费总投入(万元)
tempValue = oneData.get("arg_req_proj_money").toString();
} else if (j ==7){
// 费用化支出(万元)
tempValue = oneData.get("arg_req_expense_expenditure").toString();
} else if (j ==8){
// 费用化支出-委托开发费用(万元
tempValue = oneData.get("arg_req_expense_entrust").toString();
} else if (j ==9){
// 费用化支出-自有研发人工成本(万元)
tempValue = oneData.get("arg_req_expense_own").toString();
} else if (j ==10){
//资本化支出(万元)
tempValue = oneData.get("arg_req_capitalize_expenditure").toString();
} else if (j ==11){
// 资本化支出-委托开发费用(万元)
tempValue = oneData.get("arg_req_capitalize_entrust").toString();
} else if (j ==12){
// 资本化支出-自有研发人员工时(人年)
tempValue = oneData.get("arg_req_capitalize_own").toString();
} else if (j ==13){
// 主要研发内容
tempValue = oneData.get("arg_req_develop_content").toString();
} else if (j == 14){
// 预期研发成果200字左右
tempValue = oneData.get("arg_req_proj_value").toString();
} else if (j == 15){
// 处理人
tempValue = oneData.get("arg_req_create_user").toString();
} else if (j == 16){
// 上传时间
tempValue = oneData.get("arg_req_create_time").toString();
} else {
// 状态
tempValue = oneData.get("arg_req_proj_state").toString();
}
tempCell.setCellValue(tempValue);
}
}
// 设置Excel数据列宽,可自适应
sheet.setColumnWidth(0, 256*10+184);
sheet.setColumnWidth(1, 256*20+184);
sheet.setColumnWidth(2, 256*20+184);
sheet.setColumnWidth(3, 256*20+184);
sheet.setColumnWidth(4, 256*20+184);
sheet.setColumnWidth(5, 256*20+184);
sheet.setColumnWidth(6, 256*18+184);
sheet.setColumnWidth(7, 256*11+184);
sheet.setColumnWidth(8, 256*11+184);
sheet.setColumnWidth(9, 256*11+184);
sheet.setColumnWidth(10, 256*11+184);
sheet.setColumnWidth(11, 256*11+184);
sheet.setColumnWidth(12, 256*11+184);
sheet.setColumnWidth(13, 256*30+184);
sheet.setColumnWidth(14, 256*30+184);
sheet.setColumnWidth(15, 256*11+184);
sheet.setColumnWidth(16, 256*30+184);
sheet.setColumnWidth(17, 256*8+184);
// 自适应列宽
//autoSizeColumnWidth(sheet, 17);
}
/**
* autoSizeColumnWidth:自适应列宽
*
* @author "haoz6"
* @param sheet
* @since JDK 1.8
*/
public static void autoSizeColumnWidth(XSSFSheet sheet, int columnNum) {
for (int i = 0; i < columnNum; i++) {
sheet.autoSizeColumn((short) i);
}
}
/**
*
* exportExcel:excel导出
*
* @author haoz6
* @param request
* @param response
* @param workBook
* @throws IOException
* @since JDK 1.8
*/
public static void exportExcelXSSF(HttpServletRequest request,
HttpServletResponse response, XSSFWorkbook workBook,
String excelName) throws IOException {
String respContentType = "multipart/form-data";
String reqUserAgent = "User-Agent";
String fileSuffix = ".xlsx";
String fireFox = "Firefox";
String respContentDispositionKey = "Content-Disposition";
String respContentDispositionValue = "attachment;filename=";
String timesheet = excelName;
String browser = "=?utf-8?b?";
String browser2 = "?=";
String browser3 = "+";
String browser4 = " ";
OutputStream os = null;
try {
String filename = timesheet + fileSuffix;
response.setContentType(respContentType);
String agent = request.getHeader(reqUserAgent);
if (agent.contains(fireFox)) {
// 火狐浏览器 只能收到拼接base64的编码
filename = browser
+ (new String(Base64.encodeBase64(
filename.getBytes(CHARACTERENCODING))))
+ browser2;
} else {
// IE,谷歌浏览器
filename = URLEncoder.encode(filename, CHARACTERENCODING);
BDUServiceBaseTools.commonLogout(filename);
filename = filename.replace(browser3, browser4);
}
response.setHeader(respContentDispositionKey,
respContentDispositionValue + filename);
os = new BufferedOutputStream(response.getOutputStream());
// 将workbook写入到response中
workBook.write(os);
workBook.close();
os.close();
// 刷新缓冲区,将缓冲区数据写入到response中
response.flushBuffer();
} catch (IOException e1) {
String errorRetVal = "获得传入参数失败";
BDUServiceBaseTools.commonLogout(errorRetVal);
// CommonError.errorEndServlet(errorRetVal, response);
LogService.catching(e1);
}finally {
if (os!=null){
os.close();
}
workBook.close();
}
}
}