java web 导出excel,记录导出前端的数据(并未存储到数据库中)

这篇博客再次记录一下导出excel; 收到一个改一个excel导出的任务,于是很自然的去参考上一篇博客。
https://blog.csdn.net/qq_35529931/article/details/81988802
结果导出excel后,里面的内容却一直是乱码。于是一度认为是字符集没有设置,各种设置都没有效果。于是改成了英文,发现下载下来的却也是乱码。可以得出结论,不是乱码的问题了。改成英文打开,如下图;在这里插入图片描述
于是参考了另一篇博客。记录一下。
前端的写法,url的传输方式没有改变,增加了传入一个json数组。 这样后台就会带一个参数了。

   <input type="hidden" name="jsonStr" :value="reversedMessage"/>
                <form method="get" :action="apiUrl + context.oms + '/material/goods/v1/stocks/enter/template/export'"
                      accept-charset="UTF-8">
                  <input type="hidden" name="access_token" :value="token"/>
                  <input  type="hidden" name="jsonStr" :value="jsonStr"/>
                  <input type="submit" size="small" class="lightGreenBtn" value="导出模版">
                </form>
JS的写
 computed: {
      // json对象
      reversedMessage: function () {
        this.jsonStr = JSON.stringify(this.tableData);
        return 1;
      }
    },

在这里插入图片描述
在这里插入图片描述
后台的写法 也很简单。
代码如下:
展示 接收前端传过来的数据,进行解析:

  @ResponseBody
    @RequestMapping(value = "v1/stocks/enter/template/export", method = RequestMethod.GET)
    @ApiOperation(httpMethod = "GET", value = "导出物资入库模板")
    public void  exportEnterStockDetailTemplate(HttpServletResponse response,String jsonStr) throws  IOException{
        // 接收前端传过来的json值

        JSONArray obj = JSONArray.fromObject(jsonStr);
        List<EnterStockImportDTO> enterStockImportDTOList = (List<EnterStockImportDTO>) JSONArray.toList(obj,EnterStockImportDTO.class);
     ...

在这里插入图片描述
后台继续展示创建excel,并且将前端的DTO放到对应的excel中:

 // 创建excel,设置名称
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("物资入库导出模板");
        String fileName = null;
        try {
            fileName = new String("物资入库导出模板.xls".getBytes("utf-8"), "iso-8859-1");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("字符编码格式不支持," + e);
        }
        // 设置excel的表头
        HSSFRow row = sheet.createRow(0);
        row.createCell(0).setCellValue("入库数量");
        row.createCell(1).setCellValue("物资名称");
        row.createCell(2).setCellValue("品牌");
        row.createCell(3).setCellValue("型号");
        row.createCell(4).setCellValue("单位");
        row.createCell(5).setCellValue("入库单价");
        row.createCell(6).setCellValue("有效期");
        row.createCell(7).setCellValue("供应商");
        row.createCell(8).setCellValue("位置");
        // 将数据插入到excel中
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        for(int i= 0; i < enterStockImportDTOList.size(); i++){
            row = sheet.createRow(i + 1);
            row.createCell(0).setCellValue(enterStockImportDTOList.get(i).getEnterNum());
            row.createCell(1).setCellValue(enterStockImportDTOList.get(i).getGoodsName());
            row.createCell(2).setCellValue(enterStockImportDTOList.get(i).getBrand());
            row.createCell(3).setCellValue(enterStockImportDTOList.get(i).getModel());
            row.createCell(4).setCellValue(enterStockImportDTOList.get(i).getUnit());
            row.createCell(5).setCellValue(String.valueOf(enterStockImportDTOList.get(i).getPrice()));
            row.createCell(6).setCellValue(simpleDateFormat.format(enterStockImportDTOList.get(i).getDueDate()));
            row.createCell(7).setCellValue(enterStockImportDTOList.get(i).getSupplierName());
            row.createCell(8).setCellValue(enterStockImportDTOList.get(i).getLocation());
        }
        // 写入并导出
        response.setContentType("application/octet-stream");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        response.flushBuffer();
        workbook.write(response.getOutputStream());

在这里插入图片描述
这样就可以了。主要是设置了表名的中文,以及头部的设置,并将前端的数据导入到excel中
这个DTO的数据是未保存到数据库中的,通过前端json得到值后,进行解析放到对应的excel的列中。
这次记录完成。这是第二种spring boot导出excel的方法!!!

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页