效果图:
这里只解释control层的处理,到service层其实也就是存数据到数据库了,没什么好讲的
先解释导出的实体类,需要在要导出的实体类属性上加上@Excel注解,只有加了@Excel注解的属性才会导出
public class GhaKbTitle extends BaseEntity {
/** 主键 */
private Integer id_ ;
/** 删除标志:0:未删除;1:已删除 */
/** 版本号 */
@NotBlank( message = "版本号不能为空!")
private String versionCode ;
/** 标题编码 */
@Excel(name = "维度标题")
@NotBlank(message = "标题编码不能为空!")
private String titleCode ;
/** 标题名称 */
@Excel(name = "维度名称")
@NotBlank(message = "标题名称不能为空!")
private String titleName ;
}
导出:
/**
* 导出维度信息
* @param versionCode
* @return
*/
@PreAuthorize(hasPermi = "ghakb:ghaKbTitle:basic")
@PostMapping("/exportExtent")
public AjaxResult exportExtent(@RequestParam("versionCode") String versionCode, HttpServletResponse response){
try{
//设置sheet名称
String excelTitle = "政策维度_" + versionCode;
GhaKbTitle ghaKbTitle = new GhaKbTitle();
ghaKbTitle.setVersionCode(versionCode);
ghaKbTitle.setParentId(0);
//从数据库中获取要导出的数据
List<GhaKbTitle> ghaKbTitles = ghaKbTitleService.selectTitleDropBox(ghaKbTitle);
//导出的实体类属性
KbExcelUtil<GhaKbTitle> util = new KbExcelUtil<>(GhaKbTitle.class);
//利用KbExcelUtil工具类导出
util.exportKbExcel(response, ghaKbTitles, excelTitle);
return AjaxResult.success("导出维度信息成功!");
}catch (Exception e){
e.printStackTrace();
return AjaxResult.error("导出维度信息异常!" ,ExceptionUtils.getMessage(e));
}
}
导入:
/**
* 导入维度
* @param versionCode
* @param file
* @return
*/
@PreAuthorize(hasPermi = "ghakb:ghaKbTitle:basic")
@PostMapping("/importExtent")
public AjaxResult importExtent(@RequestParam(value = "versionCode") String versionCode,@RequestParam(name = "file") MultipartFile file){
try{
String excelTitle = "政策维度_" + versionCode;
String excel2007 = ".xls";
String excel2010 = ".xlsx";
List<String> requiredFields = new ArrayList<String>(){{
add("维度标题");
add("维度名称");
}};
String fileName = file.getOriginalFilename();
if (!fileName.endsWith(excel2007) && !fileName.endsWith(excel2010)){
return AjaxResult.error("上传文件类型错误!");
}
if (file.getSize() == 0){
return AjaxResult.error("文件大小为0");
}
KbExcelUtil<GhaKbTitle> util = new KbExcelUtil(GhaKbTitle.class);
List<GhaKbTitle> list = null;
try{
//检查文件不同的sheet的表头是否与模板表头相同
util.checkKbExcel(excelTitle, file,requiredFields);
//从文件中提取数据
list= util.importKbExcel(excelTitle, file);
}catch (Exception e){
return AjaxResult.error(e.getMessage());
}
//检查数据是否符合规范
//记录错误位置
List<String> errorMsg = new ArrayList<>();
for (int i = 0; i<list.size(); i++){
GhaKbTitle ghaKbTitle = list.get(i);
if (StringUtils.isEmpty(ghaKbTitle.getTitleCode())){
errorMsg.add(excelTitle + "表第" + (i+2) + "行”维度标题“内容不能为空!");
}
if (StringUtils.isEmpty(ghaKbTitle.getTitleName())){
errorMsg.add(excelTitle + "表第" + (i+2) + "行”维度名称“内容不能为空!");
}
}
if (errorMsg.size() > 0){
return AjaxResult.error(String.valueOf(errorMsg));
}
int affect = 0;
affect = ghaKbTitleService.importExtent(list, versionCode);
return affect > 0 ? AjaxResult.success("导出维度信息成功!") : AjaxResult.error("维度信息导出失败");
}catch (Exception e){
e.printStackTrace();
return AjaxResult.error("维度信息导出失败!" ,ExceptionUtils.getMessage(e));
}
}
22.11.7新增内容,实体类@Excel注解新增内容,可合并单元格
public class GhaKbCatalogExportDTO {
//维度标题
@Excel(name = "维度标题", mergeByField = "dimensionTitle")
private String dimensionTitle;
//维度名称
@Excel(name = "维度名称", mergeByField = "dimensionTitle")
private String dimensionName;
//章节标题
@Excel(name = "章节标题", mergeByField = "sectionTitle")
private String sectionTitle;
//章节名称
@Excel(name = "章节名称", mergeByField = "sectionTitle")
private String sectionName;
}
解释:维度标题和维度名称是同一层单元格,所以是统一以维度标题的dimensionTitle标识。
效果图: