不积跬步,无以至千里

Java导出excel


一个导出excel文件的小例子

   @RequestMapping("/exportBillDetail")
   public void exportBillDetail(@RequestParam(value = "timeSpan") String timeSpan,
                                @RequestParam(value = "operator", required = false) String operator,
                                @RequestParam(value = "thirdPart", required = false) String thirdPart,
                                @RequestParam(value = "interfaceName", required = false) String interfaceName,
                                HttpServletResponse response) {
       File file = new File("temp.csv");
       try {
           List<String> times = Splitter.on("~").trimResults().splitToList(timeSpan);
           Date startTime = DateUtils.parseDate(times.get(0), "yyyy-MM-dd");
           Date endTime = DateUtils.parseDate(times.get(1), "yyyy-MM-dd");
           List<CreditDailyInfCount> datas = dailyServiceInvokeStatisticsService.queryBillDetail(startTime, endTime, operator, thirdPart, interfaceName);
           StringBuilder sb = new StringBuilder("查询时间\t" + timeSpan + "\n事业部\t" + operator + "\n合作方\t" + thirdPart + "\n接口\t" + interfaceName + "\n\n");
           sb.append("序号\t事业部\t合作方\t接口\t日期\t次数\t单价\t总价\n");
           for (CreditDailyInfCount item : datas) {
               sb.append(item.getId()).append("\t");
               sb.append(item.getOperationName()).append("\t");
               sb.append(item.getThirdPartName()).append("\t");
               sb.append(item.getServiceName()).append("\t");
               sb.append(DateFormatUtils.format(item.getServiceDate(), "yyyy-MM-dd")).append("\t");
               sb.append(item.getServiceCount()).append("\t");
               sb.append(item.getPrice()).append("\t");
               sb.append(item.getTotalPrice()).append("\n");

           }
           Files.write(sb.toString().getBytes(), file);
           OutputStream out = response.getOutputStream();
           response.reset();
           response.setContentType("application/ms-excel");
           response.setHeader("content-disposition", "attachment; filename=bill.xls");
           response.setCharacterEncoding("UTF-8");
           long fileLength = file.length();
           String length1 = String.valueOf(fileLength);
           response.setHeader("Content_Length", length1);
           java.io.FileInputStream in = new java.io.FileInputStream(file);
           int n;
           byte[] b = new byte[1024];
           out.write(new byte[]{(byte)0xef,(byte)0xbb,(byte)0xbf});//为excel添加BOM头,否则部分excel打开会乱码
           while ((n = in.read(b)) != -1) {
               out.write(b, 0, n);
           }
           in.close();
           out.close();
       } catch (Exception e) {
           logger.error("exportBillDetail-error:", e);
       }
   }