数据导出_excel

应用场景
业务中有些数据需要导出成excel格式供需求方分析
展示效果
步骤
jsp页面
代码块:
<script type="text/javascript">
$(function(){
 $(".export").live("click",function(){
  var startDate=$("input[name='startDate']").val();
  var endDate=$("input[name='endDate']").val();
  var type=$("#type").val();
  var str="/statistics/download.json?type="+type;
  if(!we.utils.isEmpty(startDate)){
   str+="&startDate="+startDate;
  }
  if(!we.utils.isEmpty(endDate)){
   str+="&endDate="+endDate;
  }
  window.location.href=str;
 });
})
</script>
说明
点击导出数据按钮时对应的方法只能用get请求,用post请求无法下载成功
后台代码
代码块
/**
  * 下载
  * <p>
  * 下载查询的数据
  * @throws IOException
  * @throws WriteException
  */
 @At
 public Object download(@Param("..") HttpServletResponse response, @Param("..") DownLoadExcelForm form)
   throws WriteException, IOException {
  questionnaireStatisticsService.export(response, form);
  return JsonResult.success("导出数据成功!");
 }
private static final String[] HOSPITALIZATION_HEAD_CONTENTS = { "提交问卷时间", "就诊时间", "出院科室", "年龄", "性别", "住院天数",
   "付费方式", "来自", "医生在对您进行比较大的治疗或操作前,让您或家属签署知情同意书", "您对本次住院的治疗效果满意", "护士的技术水平好", "当您按呼叫器时,护士能及时到您床前",
   "医务人员向您讲解了出院后的康复和服药方法", "医院向您提供了预约复诊服务", "医务人员服务态度好", "医务人员注意保护您的隐私(如关门或拉帘等)", "病区的环境安静、整洁", "医院的膳食服务好",
   "办理入/出院手续便捷", "您对B超室的服务", "您对放射科的服务", "您对本次就诊的总体满意程度", "您是否愿意将该医院推荐给您的亲朋或同事?", "您对本公众号的满意程度",
   "您对住院服务还有什么意见和建议", "您对本公众号还有什么意见和建议" };
public void export(HttpServletResponse response, DownLoadExcelForm form) throws IOException, WriteException {
  String path = "";//创建excel的路径,统一都按这个中写法来写,只是名称改一下就行了
  int columnCount = 0;//设置excel显示的有多少列
  List<Record> list;//这个对应的是excel中要填充的数据
  if (form.getType() == QuestionnaireTypeEnum.CLINIC.intkey()) {
   path = kvConfig.getValue(ConfigKey.FILE_SERVER) + "/" + "门诊问卷调查.xls";
   columnCount = 31;
   list = dbDao.query(form.list4ClinicList(sqlManager), null, null);
  } else {
   path = kvConfig.getValue(ConfigKey.FILE_SERVER) + "/" + "住院问卷调查.xls";
   columnCount = 25;
   list = dbDao.query(form.list4Hospitalization(sqlManager), null, null);
  }
  WritableWorkbook workbook = Workbook.createWorkbook(new File(path));
  WritableSheet sheet = workbook.createSheet("First Sheet", 0);
  int cellWidth = 20;
               //设置每一列的宽度 开始
  for (int i = 0; i < columnCount; i++) {
   sheet.setColumnView(i, cellWidth);
  }
               //设置每一列宽度 结束
               //设置excel的首行数据 开始 注意:这里的首行显示的列名称信息,我们是定义了一个数组方便循环
  for (int y = 0; y < columnCount; y++) {
   if (form.getType() == QuestionnaireTypeEnum.CLINIC.intkey()) {
    sheet.addCell(new Label(y, 0, CLINIC_HEAD_CONTENTS[y]));
   } else {
    sheet.addCell(new Label(y, 0, HOSPITALIZATION_HEAD_CONTENTS[y]));
   }
  }
              //设置excel的首行数据 结束
              //填充excel中的数据 开始
  int rowIndex = 1; //这个代表的是第几行数据 ,以为首行列名占用了一行,所以这个是从1开始的
  for (Record record : list) {
   sheet.addCell(new Label(0, rowIndex, record.getString("createTime")));
   for (int x = 1; x <= columnCount; x++) {
    sheet.addCell(new Label(x, rowIndex, record.getString("temp" + (x - 1))));
   }
   rowIndex++;
  }
              //填充excel中的数据 结束
  workbook.write();
  workbook.close();
  if (!FileUtil.isExist(path)) {
   throw ExceptionUtil.bEx("下载的文件路径不存在");
  }
  try {
   DownloadUtil.download(response, path);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

猜你喜欢

转载自blog.csdn.net/qq_37345604/article/details/80558488