前面讲述了使用实体类的方式绑定excel表头的方式进行读取和写入操作,是比较简单的,那么由于表头可能会变,那么就不能使用绑定实体类的方式进行了,于是搜索百度一番,借鉴别人的博客,使用map集合的方式进行读取和写入操作。
目录
1、导入相关依赖
2、读取Excel的服务调用
3、将excel数据读取到map中并保存到数据库
4、编写通过map保存到数据库的SQL语句
5、保存到数据库的结果
6、写入数据到excel
7、总结
com.alibaba
easyexcel
2.1.1
@Override
public void saveTypeSpectrumInfosFromExcel(MultipartFile file, SelfDefineTypeSpectrumInfoService selfDefineTypeSpectrumInfoService, Integer treeNodeId, HeaderTableService headerTableService) {
//文件输入流
InputStream is = null;
try {
is = file.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
//调用方法进行读取
EasyExcel.read(is, new TypeSpectrumInfoExcelListener(selfDefineTypeSpectrumInfoService, treeNodeId, headerTableService)).sheet().doRead();
}
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.bjsasc.productksys.exceptionHandler.SelfDefinitionException;
import com.bjsasc.productksys.headertableservice.entity.HeaderTable;
import com.bjsasc.productksys.headertableservice.service.HeaderTableService;
import com.bjsasc.productksys.selfdefinetypespectruminfoservice.service.SelfDefineTypeSpectrumInfoService;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author 不要有情绪的 ljy
* @Date 2022/11/16 9:41
* @Description:
*/
public class TypeSpectrumInfoExcelListener extends AnalysisEventListener
对以上代码进行解读下:首先创建了个map用于存储表头,是为了后面将数据存入数据库做准备,paramsMap 是一个存储所有插入数据库的(即excel一行的数据字段)参数,其中key为表头。value为读取的数据。
由于不是绑定的实体类,就不能直接使用mybatis-plus通过传递实体类进行数据的保存了,因此要自己的手动写SQL语句,SQL语句如下:
@Insert("")
public int addTypeSpectrumInfo(@Param("paramsMap") HashMap paramsMap);
为了清晰表达,再给个截图,如下:
这儿就不展示了
以上就是读取excel到map集合,然后保存到数据库的过程。
@ApiOperation(value = "选择一个路径,将当前的列表导出到excel")
@GetMapping("/xxxxxx/{treeNodeId}")
public R xxxxxx(HttpServletResponse response,
@ApiParam(name = "treeNodeId", value = "当前树节点id", required = true) @PathVariable Integer treeNodeId) {
SysTree treeNode = sysTreeService.getById(treeNodeId);
String treeNodeName = treeNode.getNodeName();
String fileName = treeNodeName + "_型谱信息.xlsx";
List
对以上代码进行解读:
由于表头不固定,但是我们是让自己配置表头,当配置的一致时,才可以让excel导入,因此,headerTableService是为了查询配置的表头为哪些的操作,此外,
headArr[i++] = "产品专业"; headArr[i++] = "产品类别"; headArr[i++] = "产品规格";
这三个是写入excel必须的表头,以及数据库中有相应的数据。
其主要看这行代码
EasyExcel.write(fileName).head(createdHead(headArr)).sheet(treeNodeName).doWrite(dataList);
顺便看下表头是如何与数据进行对应起来的!!!其中createdHead()函数是参考别人的博客,具体哪个的博客忘掉了,在此感谢无名的他或她,嘻嘻嘻!
上面代码的功能是通过查询哪些表头对应的数据需要写入excel,即比如数据库表中有 姓名 这一列,但是excel中不想需要写入,那么就可以改变以上代码完成相应需求。
下面附上查询数据库将数据封装到map中的SQL语句
@ResultType(Map.class)
@Select("select * from self_define_type_spectrum_info where sys_tree_id = #{treeNodeId}")
public List
以上就是通过map对excel 的读取和写入操作,整个过程相对于绑定实体类的方式是较复杂的,希望你们认真看,认真读,我在尽力地写清楚我所说的话,可能其中没说明白,也希望谅解下,真心希望读完后能够帮助到你完成你的需求,哪怕一点点!!! 如果可以给个zan 赞!
学习之所以会想睡觉,是因为那是梦开始的地方。
ଘ(੭ˊᵕˋ)੭ (开心) ଘ(੭ˊᵕˋ)੭ (开心)ଘ(੭ˊᵕˋ)੭ (开心)ଘ(੭ˊᵕˋ)੭ (开心)ଘ(੭ˊᵕˋ)੭ (开心)
------不写代码不会凸的小刘