先查询 ,在导出
实体类
@Data
//@TableName是mybatis-plus中的注解,主要是实现实体类型和数据库中的表实现映射。
@TableName("wsf_test")
//@Accessors(chain = true) 开启链式编程
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="wsf_test对象", description="测试")
public class WsfTest implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**名字*/
// @Excel(dictKey,dictExp)
//该注解属于一个字典注解,主要作用就是可以让一些数值型属性能自动转换字典值(注意需生成get/set)
@Excel(name = "名字", width = 15)
@ApiModelProperty(value = "名字")
private java.lang.String name;
/**年龄*/
@Excel(name = "年龄", width = 15)
@ApiModelProperty(value = "年龄")
private java.lang.String age;
/**性别*/
@Excel(name = "性别", width = 15, dicCode = "sex")
// @Dict数据字典
@Dict(dicCode = "sex")
@ApiModelProperty(value = "性别")
private java.lang.String sex;
controller (第一种方法)
@RequestMapping(value = "/exportXls3")
public void exportXls3(HttpServletResponse response) throws IOException {
//查询要导出的数据
List<WsfTest> telist = iWsfTestService.list(null);
System.out.println(telist);
// 创建Workbook这个对象
// 第一个参数是一个ExportParams(ExportParams 导出参数)对象,这里直接new,
// ExportParams对象里面的第一个参数是你自己定义的表的名字
// ExportParams对象里面的第二个参数是你自己定义Excel中Sheet的名字
// 第二个参数是实体类的class 第三个是你封装的集合
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("测试导出", "sheetname名字"), WsfTest.class, telist);
// 设置下载的头信息,设置Http响应头 使用URLEncoder.encode是为了解决编码问题
response.setCharacterEncoding("utf-8");
//设置文件ContentType类型(多部分/表单数据)
response.setContentType("multipart/form-data");
// 设置文件名字(文件头)
String fileName = "区域表.xls";
//使用Servlet实现文件下载的时候,避免浏览器自动打开文件
response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
//输出字符流
ServletOutputStream os = response.getOutputStream();
// 用workbook对象直接写出输出流就可以
workbook.write(os);
os.close();
workbook.close();
}
controller(第二种方法)
@RequestMapping(value = "/exportXls1")
public ModelAndView exportXls1(HttpServletRequest request, WsfTest wsfTest) {
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
// 获取导出数据
List<WsfTest> pageList = iWsfTestService.list();
//导出文件名称//此处设置的filename无效 ,前端会重更新设置一下
mv.addObject(NormalExcelConstants.FILE_NAME,"TESTT2");
//注解对象Class
mv.addObject(NormalExcelConstants.CLASS,WsfTest.class);
//自定义导出字段 mv.addObject(NormalExcelConstants.EXPORT_FIELDS,"name,keyWord,punchTime");
//自定义表格参数
mv.addObject(NormalExcelConstants.PARAMS,new ExportParams("导出1", "sheetname1"));
//导出数据列表
mv.addObject(NormalExcelConstants.DATA_LIST,pageList);
return mv;
}
controller(第三种 与第一种类似,但可以过滤到选中的数据)
protected ModelAndView exportXls(HttpServletRequest request, T object, Class<T> clazz, String title) {
// Step.1 组装查询条件
QueryWrapper<T> queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap());
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// 过滤选中数据
String selections = request.getParameter("selections");
if (oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
queryWrapper.in("id",selectionList);
}
// Step.2 获取导出数据
List<T> exportList = service.list(queryWrapper);
// Step.3 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
//此处设置的filename无效 ,前端会重更新设置一下
mv.addObject(NormalExcelConstants.FILE_NAME, title);
mv.addObject(NormalExcelConstants.CLASS, clazz);
//update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------
ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title);
exportParams.setImageBasePath(upLoadPath);
//update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------
mv.addObject(NormalExcelConstants.PARAMS,exportParams);
mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
return mv;
}
想,都是问题;做,才有答案
227

被折叠的 条评论
为什么被折叠?



