Java实现批量导出word压缩后的zip文件
创始人
2024-11-16 04:23:23
0次

一、js代码,由于参数比较大所以利用form表单使用post导出

  function export_word(){
    var selectedRows = $("#dg").datagrid("getSelections");
    if (selectedRows.length==0) {
      showAlertWarning("请选择一条的信息...");
      return;
    }
    if (selectedRows.length > 1) {//批量导出压缩文件
      var id = "";
      for (var i = 0; i < selectedRows.length; i++) {
        var row = selectedRows[i];
        id += row.id+"name"+row.user_name+"@@";
      }
      layer.confirm('请选择要导出考核表的类型?', {
        btn: ['次数','具体条目'] //按钮
      }, function(index){
        postExportFile({"id":id,"type":0},"jee/AssessGradeSumC/exportWordsZip");
        layer.close(index);
      }, function(index){
        postExportFile({"id":id,"type":1},"jee/AssessGradeSumC/exportWordsZip");
      });
    } else {//导出单个
      layer.confirm('请选择要导出考核表的类型?', {
        btn: ['次数','具体条目'] //按钮
      }, function(index){
        window.location.href= "jee/AssessGradeSumC/exportWord?id="+selectedRows[0].id;
        layer.close(index);
      }, function(index){
        window.location.href= "jee/AssessGradeSumC/exportWordForSpecific?id="+selectedRows[0].id;
      });
    }
  }
 
  function postExportFile(params, url) { //params是post请求需要的参数,url是请求url地址
    var form = document.createElement("form");
    form.style.display = 'none';
    form.action = url;
    form.method = "post";
    document.body.appendChild(form);
 
    for(var key in params){
      var input = document.createElement("input");
      input.type = "hidden";
      input.name = key;
      input.value = params[key];
      form.appendChild(input);
    }
 
    form.submit();
    form.remove();
  }

二、controller代码(读完压缩文件后删除文件)

 /**
 *
 * @Description 考核成绩汇总考核表批量导出压缩
 * @Fcunction exportWordsZip
 * @param response
 * @return ReturnDatas
 *
 */
 @ResponseBody
 @SystemControllerLog(description = "考核成绩汇总考核表批量导出压缩")
 @RequestMapping(value = "exportWordsZip")
 public ReturnDatas exportWordsZip(HttpServletResponse response, String id, String type) {
 ReturnDatas returnDatas = ReturnDatas.getSuccessReturnDatas();
 try {
  response.setCharacterEncoding("UTF-8");
  response.setContentType("application/msexcle");
  response.setHeader("content-disposition", "attachment;filename=" + new String("考核成绩汇总表".getBytes("gb2312"), "ISO8859-1") + ".zip");
  String fileUrl = assessGradeSumService.exportWordsZip(id,type);
  OutputStream outputStream = response.getOutputStream();
  BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileUrl));;
  BufferedOutputStream bos = new BufferedOutputStream(outputStream);
  byte[] buff = new byte[2048];
  int bytesRead;
  while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
  bos.write(buff, 0, bytesRead);
  }
  bis.close();
  bos.close();
  outputStream.close();
  File zip = new File(fileUrl);
  if (zip.exists() && zip.isFile()) {
  zip.delete();
  }
  return returnDatas;
 } catch (Exception e) {
  e.printStackTrace();
  LogUtil.error("考核成绩汇总考核表批量导出压缩异常:" + e.getMessage(), e);
  returnDatas.setStatus(ReturnDatas.ERROR);
  returnDatas.setMessage("考核成绩汇总考核表批量导出压缩异常。");
 }
 return returnDatas;
 }

三、实现类代码,其中exportWord()和exportWordForSpecific()都是具体的word导出方法,生成zip压缩文件后删除word文件,ZipUtils是压缩文件工具类

/**
 *
 * @Fcunction exportWordsZip
 * @param id
 * @param type
 * @return String
 *
 */
 @Override
 public String exportWordsZip(String id, String type)throws Exception{
 String[] ids = id.split("@@");
 List fileList = new ArrayList<>();
 String url = "C:\\";
 for (int i = 0; i < ids.length; i++) {
  String id_name = ids[i];
  String id_value = id_name.split("name")[0];
  String name = id_name.split("name")[1];
  String docUrl = url + name + ".doc";
  fileList.add(new File(docUrl));
  XWPFDocument workbook = null;
  if ("0".equals(type)) {//按次
  workbook = exportWord(id_value);
  } else {//表单条目
  workbook = exportWordForSpecific(id_value);
  }
  FileOutputStream out = new FileOutputStream(docUrl);
  workbook.write(out);
 }
 String zipUrl = url+"考核成绩汇总表.zip";
 FileOutputStream fos = new FileOutputStream(new File(zipUrl));
 ZipUtils.toZip(fileList, fos);
 for (File out:fileList) {
  if (out.exists() && out.isFile()) {
  out.delete();
  }
 }
 return zipUrl;
 }

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...