前言
有时候存在子表数据时,需要导出子表数据。
一、代码实现
1.引入库
代码如下(示例):
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;
2.逻辑代码
代码如下(示例):
public void export(ProduceCostOther produceCostOther, HttpServletRequest request, HttpServletResponse response) {
// 定义导出内容
Map<String,Object> paramMap = Maps.newHashMap();
// 获取list列表
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("del_flag", CommonConstant.STATUS_0);
if(StringUtils.isNotBlank(produceCostOther.getCompanyId())){
queryWrapper.eq("company_id", produceCostOther.getCompanyId());
}
if(StringUtils.isNotBlank(produceCostOther.getIds())){
queryWrapper.in("id", Arrays.asList(produceCostOther.getIds().split(CommonConstant.ARRAY_SEPARATOR)));
}
queryWrapper.orderByDesc("create_time");
List<ProduceCostOther> list = this.list(queryWrapper);
if(CollectionUtil.isNotEmpty(list)){
int num = 1;
for (ProduceCostOther le : list) {
// 序号
le.setNumIndex(num);
// 查找list
ProduceCostOtherField otherField = new ProduceCostOtherField();
otherField.setZid(le.getId());
le.setDataList(fieldService.findDataList(otherField));
num++;
}
}
paramMap.put("list", list);
// 增加一个空的list防止模板空指针异常
if(paramMap.get("list") == null){
ArrayList<String> emptyList = new ArrayList<>();
emptyList.add("");
paramMap.put("list",emptyList);
}
String fileName = "其他生产成本.xlsx";
String templatePath = upLoadPath + File.separator + TEMPLE_URL + File.separator + "other/produceCostOther.xlsx";
File folder = new File(upLoadPath + File.separator + TEMPLE_URL + File.separator + "other");
// 文件夹不存在则创建文件夹
if(!folder.exists()){
folder.mkdirs();
}
// 文件不存在 则联系管理员添加导出模板
File file = new File(templatePath);
if(!file.exists()){
throw new JeecgBootException("导出模板不存在,请联系管理员在【" + templatePath + "】路径添加导出模板!");
}
try {
TemplateExportParams exportParams = new TemplateExportParams(templatePath);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, JSONObject.parseObject(JSON.toJSON(paramMap).toString(), Map.class));
// 表格单元格为实线
Sheet firstSheet = workbook.getSheetAt(0);
List<CellRangeAddress> mergedRegions = firstSheet.getMergedRegions();
for (CellRangeAddress mergedRegion : mergedRegions) {
RegionUtil.setBorderBottom(BorderStyle.THIN, mergedRegion, firstSheet);
RegionUtil.setBorderTop(BorderStyle.THIN, mergedRegion, firstSheet);
RegionUtil.setBorderLeft(BorderStyle.THIN, mergedRegion, firstSheet);
RegionUtil.setBorderRight(BorderStyle.THIN, mergedRegion, firstSheet);
}
response.addHeader("filename", URLEncoder.encode(fileName,"utf-8"));
response.addHeader("Access-Control-Expose-Headers","filename");
response.setHeader("Content-disposition", "attachment; fileName=" + URLEncoder.encode(fileName, "utf-8"));
OutputStream out = response.getOutputStream();
workbook.write(out);
out.flush();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
示例