Java web 前端页面浏览器导出excel

js代码 使用input隐藏域提交json数据

ids = ids.substr(0,ids.length-1);
keys = keys.substr(0,keys.length-1);
columnNames = columnNames.substr(0,columnNames.length-1);
var sParms = {
    ids: ids,
    keys: keys,
    columnNames: columnNames
};
var parametersStr = JSON.stringify(sParms).toString();
console.log(parametersStr);
var url = "/exch_platform/cashInfo/export";
//创建隐藏表单
exportForm = document.createElement("form");
exportForm.setAttribute('id',"_exportForm");
exportForm.setAttribute("action", url);
exportForm.setAttribute("method", "post");


//对应查询条件的开始时间
var input1 = document.createElement("input");
input1.type="text";
input1.name = "idsP";
input1.value = parametersStr;
exportForm.append(input1);

document.body.appendChild(exportForm);
exportForm.submit();

 

Java后端接收并处理参数

@RequestMapping(value = "/export",method = RequestMethod.POST)
public void export(HttpServletRequest request, HttpServletResponse response) {
    String idsP = request.getParameter("idsP");
    JSONObject jsonObject = JSONObject.parseObject(idsP);
    String idStr = jsonObject.getString("ids");
    String[] ids = new String[0];
    if(StringUtils.isNoneEmpty(idStr)){
        ids = idStr.split(",");
    }
    String keys = jsonObject.getString("keys");
    String columnNames = jsonObject.getString("columnNames");
    cashInfoService.selectByConditionToExport(request, response, ids);
}

service层处理数据

 

excel导出工具类

public static void downloadExcel(HttpServletResponse response, String fileName,
                                    List> list, String[] keys, String[] columnNames) throws UnsupportedEncodingException, IOException {
   ByteArrayOutputStream os = new ByteArrayOutputStream();
       try {
           ExcelUtil.createWorkBook(list,keys,columnNames).write(os);
       } catch (IOException e) {
           e.printStackTrace();
       }
       byte[] content = os.toByteArray();
       InputStream is = new ByteArrayInputStream(content);
       // 设置response参数,可以打开下载页面
       response.reset();
       response.setContentType("application/vnd.ms-excel;charset=utf-8");
       response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xls").getBytes(), "iso-8859-1"));
       ServletOutputStream out = response.getOutputStream();
       BufferedInputStream bis = null;
       BufferedOutputStream bos = null;
       try {
           bis = new BufferedInputStream(is);
           bos = new BufferedOutputStream(out);
           byte[] buff = new byte[2048];
           int bytesRead;
           while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
               bos.write(buff, 0, bytesRead);
           }
       } catch (final IOException e) {
           throw e;
       } finally {
           if (bis != null)
               bis.close();
           if (bos != null)
               bos.close();
       }
}

 

将数据写入excel

    /**
     * 创建excel文档,
     * @param list 数据
     * @param keys list中map的key数组集合
     * @param columnNames excel的列名
     * */
    public static Workbook createWorkBook(List> list,String []keys,String columnNames[]) {
        // 创建excel工作簿
        Workbook wb = new HSSFWorkbook();
        // 创建第一个sheet(页),并命名
        //Sheet sheet = wb.createSheet(list.get(0).get("sheetName").toString());
        Sheet sheet = wb.createSheet("sheet1");
        // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
        for(int i=0;i

你可能感兴趣的:(java,web)