SpringBoot中使用JeecgBoot的Autopoi导出Excel的方法步骤说到导出 Excel,我们首先会想到 poi、jsxl 等,使用这些工具会显得笨重,学习难度大。今天学习使用 JeecgBoot 中的 Autopoi 导出
说到导出 Excel,我们首先会想到 poi、jsxl 等,使用这些工具会显得笨重,学习难度大。今天学习使用 JeecgBoot 中的 Autopoi 导出 Excel,底层基于 easypoi,使用简单,还支持数据字典方式
一、开发前戏
1、引入 maven 依赖
<!– AutoPoi Excel工具类–><dependency> <groupId>org.jeecgframework</groupId> <artifactId>autopoi-web</artifactId> <version>1.1.1</version> <exclusions> <exclusion> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </exclusion> </exclusions></dependency>
exclusions 是将 commons-codec 从 autopoi 中排除,避免冲突
2、切换 Jeecg 镜像
以下代码放在 pom.xml 文件中的 parent 标签下面
<repositories><repository> <id>aliyun</id> <name>aliyun Repository</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <snapshots> <enabled>false</enabled> </snapshots></repository><repository> <id>jeecg</id> <name>jeecg Repository</name> <url>http://maven.jeecg.org/nexus/content/repositories/jeecg</url> <snapshots> <enabled>false</enabled> </snapshots></repository></repositories>
可以看到,这里我们配置了 aliyun 的国内镜像,还配置了 jeecg 的镜像,这样方便我们下载依赖文件
3、导出工具类
我们把导出 Excel 通用方法写在 ExcelUtils.java 文件中
import org.jeecgframework.poi.excel.def.NormalExcelConstants;import org.jeecgframework.poi.excel.entity.ExportParams;import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;import org.springframework.web.servlet.ModelAndView;import java.util.List;/** * 导出excel工具类 * * @author lizhou */public class ExcelUtils { /** * 导出excel * * @param title 文件标题 * @param clazz 实体类型 * @param exportList 导出数据 * @param <T> * @return */ public static <T> ModelAndView export(String title, Class<T> clazz, List<T> exportList) { ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); mv.addObject(NormalExcelConstants.FILE_NAME, title); mv.addObject(NormalExcelConstants.CLASS, clazz); mv.addObject(NormalExcelConstants.PARAMS, new ExportParams(title, title)); mv.addObject(NormalExcelConstants.DATA_LIST, exportList); return mv; }}
这样我们导出数据的时候,只需要传入文件的标题(标题同样作为表格的标题)、数据类型、数据集合,就可以导出数据了
二、开始导出
1、给实体类加注解
我们将需要导出的实体类或 VO 类中的属性加上注解 @Excel
package com.zyxx.sys.entity;import com.baomidou.mybatisplus.annotation.*;import com.baomidou.mybatisplus.extension.activerecord.Model;import com.zyxx.common.annotation.Dict;import io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;import lombok.Data;import lombok.EqualsAndHashCode;import lombok.experimental.Accessors;import org.jeecgframework.poi.excel.annotation.Excel;import java.io.Serializable;/** * <p> * 用户信息表 * </p> * * @author lizhou * @since 2020-07-06 */@Data@EqualsAndHashCode(callSuper = false)@Accessors(chain = true)@TableName(“sys_user_info”)@ApiModel(value = “SysUserInfo对象”, description = “用户信息表”)public class SysUserInfo extends Model<SysUserInfo> { @ApiModelProperty(value = “ID”) @TableId(value = “id”, type = IdType.AUTO) private Long id; @Excel(name = “账号”, width = 15) @ApiModelProperty(value = “登录账号”) @TableField(“account”) private String account; @ApiModelProperty(value = “登录密码”) @TableField(“password”) private String password; @Excel(name = “姓名”, width = 15) @ApiModelProperty(value = “姓名”) @TableField(“name”) private String name; @Excel(name = “电话”, width = 15) @ApiModelProperty(value = “电话”) @TableField(“phone”) private String phone; @ApiModelProperty(value = “头像”) @TableField(“avatar”) private String avatar; @Excel(name = “性别”, width = 15) @ApiModelProperty(value = “性别(0–未知1–男2–女)”) @TableField(“sex”) private Integer sex; @Excel(name = “状态”, width = 15) @ApiModelProperty(value = “状态(0–正常1–冻结)”) @TableField(“status”) private Integer status; @Excel(name = “创建时间”, width = 30) @ApiModelProperty(value = “创建时间”) @TableField(“create_time”) private String createTime;} @Excel(name = “性别”, width = 15) name:表头 width:列宽度
导出 Excel 时,只会导出加了 @Excel 注解的字段,不然不会导出
2、导出数据
@ApiOperation(value = “导出用户信息”, notes = “导出用户信息”)@GetMapping(value = “/export”)public ModelAndView exportXls(SysUserInfo sysUserInfo) { return ExcelUtils.export(“用户信息统计报表”, SysUserInfo.class, sysUserInfoService.list(1, Integer.MAX_VALUE, sysUserInfo).getData());}
我们传入了文件的标题,类型为 SysUserInfo,传入了数据的集合,这样我们请求这个 API 就能导出数据了
可以看出数据已经成功导出,但是性别、状态这些属性值还属于魔法值,我们需要自己写 SQL 来翻译这些值,或者配合数据字典来翻译这些值
三、配合数据字典导出
上面介绍了数据的简单导出,下面介绍配合数据字典导出数据,如果对数据字典不熟悉的同学,可先看看我的另一篇博客:【SpringBoot】廿四、SpringBoot中实现数据字典
1、@Excel 注解
与上面注解相比,我们需要多加一个属性,dicCode,如下
@Excel(name = “性别”, width = 15, dicCode = “sex”)@ApiModelProperty(value = “性别(0–未知1–男2–女)”)@TableField(“sex”)@Dict(dictCode = “sex”)private Integer sex; @Excel(name = “性别”, width = 15, dicCode = “sex”) name:表头 width:列宽度 dicCode :字典类型
这样,我们就为这个字段注入了一个字典类型,这样就能翻译成文本了
2、配置类
要配合数据字典导出,我们需要配置 autopoi 的配置类 AutoPoiConfig.java
import org.jeecgframework.core.util.ApplicationContextUtil;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * autopoi 配置类 * * @Author Lizhou */@Configurationpublic class AutoPoiConfig {/** * excel注解字典参数支持(导入导出字典值,自动翻译) * 举例: @Excel(name = “性别”, width = 15, dicCode = “sex”) * 1、导出的时候会根据字典配置,把值1,2翻译成:男、女; * 2、导入的时候,会把男、女翻译成1,2存进数据库; * @return */@Beanpublic ApplicationContextUtil applicationContextUtil() {return new org.jeecgframework.core.util.ApplicationContextUtil();}}
3、翻译规则
我们可以根据自己项目中的字典翻译规则,来重写 autopoi 的字典翻译规则 AutoPoiDictService.java
import com.zyxx.sys.entity.SysDictDetail;import com.zyxx.sys.mapper.SysDictDetailMapper;import lombok.extern.slf4j.Slf4j;import org.jeecgframework.dict.service.AutoPoiDictServiceI;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.ArrayList;import java.util.List;/** * 描述:AutoPoi Excel注解支持字典参数设置 * 举例: @Excel(name = “性别”, width = 15, dicCode = “sex”) * 1、导出的时候会根据字典配置,把值1,2翻译成:男、女; * 2、导入的时候,会把男、女翻译成1,2存进数据库; * * @Author lizhou */@Slf4j@Servicepublic class AutoPoiDictService implements AutoPoiDictServiceI { @Autowired private SysDictDetailMapper sysDictDetailMapper; /** * 通过字典翻译字典文本 * * @Author lizhou */ @Override public String[] queryDict(String dicTable, String dicCode, String dicText) { List<String> dictReplaces = new ArrayList<>(); List<SysDictDetail> dictList = sysDictDetailMapper.queryDictItemsByCode(dicCode); for (SysDictDetail t : dictList) { if (t != null) { dictReplaces.add(t.getName() + “_” + t.getCode()); } } if (dictReplaces != null && dictReplaces.size() != 0) { return dictReplaces.toArray(new String[dictReplaces.size()]); } return null; }}
实现了 AutoPoiDictServiceI 接口,重写 queryDict 方法,这里我只使用了 dicCode 来查询字典列表,这样就能配合数据字典导出了
4、导出数据
导出数据如图所示
可以看出,数据已经成功导出,性别、状态等魔法值已经被翻译成文本,这样,我们的字典翻译是成功的
四、总结
以上介绍了 JeecgBoot 中的 Autopoi 导出 Excel 的方法,还有配合数据字典导出等操作,可以看出,比以往我们使用的 poi、jsxl 使用方便,导出方便,大大提高了我们的工作效率。更多相关SpringBoot Autopoi导出Excel内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
SpringBoot项目导入导出Excel
简单、快速的导入导出Excel 推荐使用最新版本,可通过文章末尾官方文档链接跳转查看 定义Excel映射实体, @Data 是lombok的注解 数组中的每个值代表着一级表头 大标题的起始行是你要插入的sheet中最后一条数据的下一行,如果sheet中没有数据,就是第一行。你可以配置大标题占用的行数和起始单元格下标(默认第一个单元格)和结束单元格下标(默认跟随表头的数量) 单元格增加下拉框 导出时给列表头下方的单元格增加时间校验 导出时给列表头下方的单元格增加数值校验。
springboot生成excel并导出 拦截器设置
springboot后端代码实现。
1.导入依赖。
3.entity层中的Notice类:这里下载涉及到title、content、nickName、publishTime标题,所以这四个标题使用ExcelProperty注解,其他标签使用ExcelIgnore注解。EasyExcel自定义Converter解决LocalDateTime日期转换问题。
springmvc使用poi导出excel需要什么jar
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。这里的方法支持导出excel至项目所在服务器,或导出至客户端浏览器供用户下载,下面我把两个实例都放出来。
2.添加一个User类,用于存放用户实体,类中内容如下:1 package com.mvc.po; 2 3 public class User { 4 private int id; 5 private String name; 6 private String password; 7 private int age; 8 9 public User() {10 11 }12 13 public User(int id, String name, String password, int age) {14 this.id = id;15 this.name = name;16 this.password = password;17 this.age = age;18 }19 public int getId() {20 return id;21 }22 public void setId(int id) {23 this.id = id;24 }25 public String getName() {26 return name;27 }28 public void setName(String name) {29 this.name = name;30 }31 public String getPassword() {32 return password;33 }34 public void setPassword(String password) {35 this.password = password;36 }37 public int getAge() {38 return age;39 }40 public void setAge(int age) {41 this.age = age;42 }43 }3.添加一个UserController类,类中内容如下:1 package com.mvc.controller; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5 6 import javax.servlet.ServletOutputStream; 7 import javax.servlet.http.HttpServletResponse; 8 9 import org.springframework.stereotype.Controller;10 import org.springframework.beans.factory.annotation.Autowired;11 import org.springframework.web.bind.annotation.RequestMapping;12 import org.springframework.web.bind.annotation.ResponseBody;13 14 import com.mvc.po.User;15 import com.mvc.service.UserService;16 17 @Controller18 public class UserController {19 20 @Autowired21 private UserService userService;22 23 @RequestMapping(“/export.do”)24 public @ResponseBody String export(HttpServletResponse response){ 25 response.setContentType(“application/binary;charset=UTF-8”);26 try{27 ServletOutputStream out=response.getOutputStream();28 String fileName=new String((“UserInfo “+ new SimpleDateFormat(“yyyy-MM-dd”).format(new Date())).getBytes(),”UTF-8″);29 response.setHeader(“Content-disposition”, “attachment; filename=” + fileName + “.xls”);30 String[] titles = { “用户编号”, “用户姓名”, “用户密码”, “用户年龄” }; 31 userService.export(titles, out);32 return “success”;33 } catch(Exception e){34 e.printStackTrace();35 return “导出信息失败”;36 }37 }38 }4.添加一个接口类UserService和实现类UserServiceImpl,类中内容如下:1 package com.mvc.service;2 3 import javax.servlet.ServletOutputStream;4 import com.mvc.po.User;5 6 public interface UserService {7 public void export(String[] titles, ServletOutputStream out);8 }1 package com.mvc.service.impl; 2 3 import java.text.SimpleDateFormat; 4 import java.util.List; 5 6 import javax.servlet.ServletOutputStream; 7 8 import com.mvc.dao.UserDAO; 9 import com.mvc.po.User;10 import com.mvc.service.UserService;11 12 import org.apache.poi.hssf.usermodel.HSSFCell;13 import org.apache.poi.hssf.usermodel.HSSFCellStyle;14 import org.apache.poi.hssf.usermodel.HSSFRow;15 import org.apache.poi.hssf.usermodel.HSSFSheet;16 import org.apache.poi.hssf.usermodel.HSSFWorkbook;17 import org.springframework.beans.factory.annotation.Autowired;18 import org.springframework.stereotype.Service;19 20 @Service21 public class UserServiceImpl implements UserService {22 23 @Autowired24 private UserDAO userDAO;25 26 @Override27 public void export(String[] titles, ServletOutputStream out) { 28 try{29 // 第一步,创建一个workbook,对应一个Excel文件30 HSSFWorkbook workbook = new HSSFWorkbook();31 // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet32 HSSFSheet hssfSheet = workbook.createSheet(“sheet1”);33 // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short34 HSSFRow hssfRow = hssfSheet.createRow(0);35 // 第四步,创建单元格,并设置值表头 设置表头居中36 HSSFCellStyle hssfCellStyle = workbook.createCellStyle();37 //居中样式38 hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);39 40 HSSFCell hssfCell = null;41 for (int i = 0; i < titles.length; i++) {42 hssfCell = hssfRow.createCell(i);//列索引从0开始43 hssfCell.setCellValue(titles[i]);//列名144 hssfCell.setCellStyle(hssfCellStyle);//列居中显示 45 }46 47 // 第五步,写入实体数据 48 List<User> users = userDAO.query(); 49 50 SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd”);51 if(users != null && !users.isEmpty()){52 for (int i = 0; i < users.size(); i++) {53 hssfRow = hssfSheet.createRow(i+1); 54 User user = users.get(i);55 56 // 第六步,创建单元格,并设置值57 int userid = 0;58 if(user.getId() != 0){59 userid = user.getId();60 }61 hssfRow.createCell(0).setCellValue(userid);62 String username = “”;63 if(user.getName() != null){64 username = user.getName();65 }66 hssfRow.createCell(1).setCellValue(username);67 String password = “”;68 if(user.getPassword() != null){69 password = user.getPassword();70 }71 hssfRow.createCell(2).setCellValue(password);72 int age = 0;73 if(user.getAge() != 0){74 age = user.getAge();75 }76 hssfRow.createCell(3).setCellValue(age);77 }78 }79 80 // 第七步,将文件输出到客户端浏览器81 try {82 workbook.write(out);83 out.flush();84 out.close();85 86 } catch (Exception e) {87 e.printStackTrace();88 }89 }catch(Exception e){90 e.printStackTrace();91 throw new Exception(“导出信息失败!”);92 } 93 }94 }5.添加一个接口类UserDAO和实现类UserDAOImpl,类中内容如下:1 package com.mvc.dao;2 3 import java.util.List;4 import com.mvc.po.User;5 6 public interface UserDAO {7 List<User> query(); 8 }1 package com.mvc.dao.impl; 2 3 import java.util.List; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 7 import com.mvc.dao.UserDAO; 8 import com.mvc.po.User; 9 10 import org.springframework.stereotype.Repository;11 import org.springframework.beans.factory.annotation.Autowired;12 import org.springframework.jdbc.core.JdbcTemplate;13 import org.springframework.jdbc.core.RowMapper;14 15 @Repository16 public class UserDAOImpl implements UserDAO {17 18 @Autowired19 private JdbcTemplate jdbcTemplate;20 21 public List<User> query() {22 return this.jdbcTemplate.query(“select * from student”,23 new RowMapper<User>() {24 public User mapRow(ResultSet rs, int arg1)25 throws SQLException {26 return new User(rs.getInt(“sId”),27 rs.getString(“sName”), rs.getString(“sPwd”), rs28 .getInt(“sAge”));29 }30 });31 }32 }这样就完成了excel导出至客户端浏览器,当然有时候也会用到导出excel至服务器上。只需要对本文步骤4中的第七步文件输出方式进行修改,如下:1 // 第七步,将文件存到指定位置2 try {3 FileOutputStream fileOutputStream = new FileOutputStream(“C:/user.xls”);//指定路径与名字和格式4 workbook.write(fileOutputStream);//讲数据写出去5 fileOutputStream.close();//关闭输出流6 } catch (Exception e) {7 e.printStackTrace();8 }然后去除controller类中的out参数设置就ok了。也可以看出其实两种方式只是最终保存方式不同,其他步骤是共通的。
如何修改spring mvc poi 导出excel文件
首先要导入spring相关包,poi,和fileupload包,我是使用maven构建的。 一.导入excel (1)使用spring上传文件a.前台页面提交<form name=”excelImportForm” action=”${pageContext.request.contextPath}/brand/importBrandSort” method=”post” onsubmit=”return checkImportPath();” enctype=”multipart/form-data” id=”excelImportForm”><input type=”hidden” name=”ids” id=”ids”><div class=”modal-body”><div class=”row gap”><label class=”col-sm-7 control-label”><input class=”btn btn-default” id=”excel_file” type=”file” name=”filename” accept=”xls”/></label><div class=”col-sm-3″><input class=”btn btn-primary” id=”excel_button” type=”submit” value=”导入Excel”/></div></div></div><div class=”modal-footer”><button type=”button” class=”btn btn-default” data-dismiss=”modal” onClick=”uncheckBoxes();”>取消</button></div>b.后台spring的controller进行相关操作,这里主要讲的是使用spring上传文件,和读取文件信息。
<bean id=”multipartResolver” class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”></bean>@RequestMapping(value = “/importBrandSort”, method = RequestMethod.POST)public ModelAndView importBrandSort(@RequestParam(“filename”) MultipartFile file,HttpServletRequest request,HttpServletResponse response) throws Exception {String temp = request.getSession().getServletContext().getRealPath(File.separator)+ “temp”; // 临时目录File tempFile = new File(temp);if (!tempFile.exists()) {tempFile.mkdirs();}DiskFileUpload fu = new DiskFileUpload();fu.setSizeMax(10 * 1024 * 1024); // 设置允许用户上传文件大小,单位:位fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:位fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录// 开始读取上传信息//int index = 0;/* List fileItems = null;try {fileItems = fu.parseRequest(request);}catch (Exception e) {e.printStackTrace();}Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件FileItem fileItem = null;while (iter.hasNext()) {FileItem item = (FileItem) iter.next();// 忽略其他不是文件域的所有表单信息if (!item.isFormField()) {fileItem = item;// index++;}}if (fileItem == null)return null;*/if (file == null)return null;logger.info(file.getOriginalFilename());String name = file.getOriginalFilename();// 获取上传文件名,包括路径//name = name.substring(name.lastIndexOf(“\\”) + 1);// 从全路径中提取文件名long size = file.getSize();if ((name == null || name.equals(“”)) && size == 0)return null;InputStream in = file.getInputStream();List<BrandMobileInfoEntity> BrandMobileInfos = brandService.importBrandPeriodSort(in);// 改为人工刷新缓存KeyContextManager.clearPeriodCacheData(new// PeriodDimensions());// 清理所有缓存int count = BrandMobileInfos.size();String strAlertMsg =””;if(count!=0){strAlertMsg= “成功导入” + count + “条!”;}else {strAlertMsg = “导入失败!”;}logger.info(strAlertMsg);//request.setAttribute(“brandPeriodSortList”, BrandMobileInfos);//request.setAttribute(“strAlertMsg”, strAlertMsg);request.getSession().setAttribute(“msg”,strAlertMsg);return get(request, response);//return null;}代码中的注释部分是如果不使用spring的方式,如何拿到提交过来的文件名(需要是要apache的一些工具包),其实使用spring的也是一样,只是已经做好了封装,方便我们写代码。 代码中的后半部分是读取完上传文文件的信息和对数据库进行更新之后,输出到前台页面的信息。上述代码中: InputStream in = file.getInputStream();List<BrandMobileInfoEntity> BrandMobileInfos = brandService.importBrandPeriodSort(in);读取excel的信息。 (2)使用poi读取excela.更新数据库@Overridepublic List<BrandMobileInfoEntity> importBrandPeriodSort(InputStream in) throws Exception {List<BrandMobileInfoEntity> brandMobileInfos = readBrandPeriodSorXls(in);for (BrandMobileInfoEntity brandMobileInfo : brandMobileInfos) {mapper.updateByConditions(brandMobileInfo);}return brandMobileInfos;}这部分是sevice层的代码,用于读取excel信息之后更新数据库数据,我这里是使用mybatis。
定义一个类BrandMobileInfoEntity,用与保存excel表每一行的信息,而List< BrandMobileInfoEntity > 则保存了全部信息,利用这些信息对数据库进行更新。 b.读取excel信息private List<BrandMobileInfoEntity> readBrandPeriodSorXls(InputStream is)throws IOException, ParseException {HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);List<BrandMobileInfoEntity> brandMobileInfos = new ArrayList<BrandMobileInfoEntity>();BrandMobileInfoEntity brandMobileInfo;// 循环工作表Sheetfor (int numSheet = 0;numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);if (hssfSheet == null) {continue;}// 循环行Rowfor (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {brandMobileInfo = new BrandMobileInfoEntity();HSSFRow hssfRow = hssfSheet.getRow(rowNum);for (int i = 0; i < hssfRow.getLastCellNum(); i++) {HSSFCell brandIdHSSFCell = hssfRow.getCell(i);if (i == 0) {brandMobileInfo.setBrandId(Integer.parseInt(getCellValue(brandIdHSSFCell)));} else if (i == 1) {continue;} else if (i == 2) {brandMobileInfo.setMobileShowFrom(Integer.parseInt(getCellValue(brandIdHSSFCell)));} else if (i == 3) {brandMobileInfo.setMobileShowTo(Integer.parseInt(getCellValue(brandIdHSSFCell)));} else if (i == 4) {brandMobileInfo.setSellMarkValue(getCellValue(brandIdHSSFCell));} else if (i == 5) {brandMobileInfo.setWarehouse(getCellValue(brandIdHSSFCell));} else if (i == 6) {brandMobileInfo.setSortA1(Integer.parseInt(getCellValue(brandIdHSSFCell)));} else if (i == 7) {brandMobileInfo.setSortA2(Integer.parseInt(getCellValue(brandIdHSSFCell)));} else if (i == 8) {brandMobileInfo.setSortB(Integer.parseInt(getCellValue(brandIdHSSFCell)));} else if (i == 9) {brandMobileInfo.setSortC10(Integer.parseInt(getCellValue(brandIdHSSFCell)));}else if (i == 10) {brandMobileInfo.setSortC(Integer.parseInt(getCellValue(brandIdHSSFCell)));} else if (i == 11) {brandMobileInfo.setHitA(getCellValue(brandIdHSSFCell));} else if (i == 12) {brandMobileInfo.setHitB(getCellValue(brandIdHSSFCell));} else if (i == 13) {brandMobileInfo.setHitC(getCellValue(brandIdHSSFCell));} else if (i == 14) {brandMobileInfo.setCustomSellType(getCellValue(brandIdHSSFCell));}else if (i == 15){continue;}else if (i == 16) {brandMobileInfo.setChannelId(Integer.parseInt(getCellValue(brandIdHSSFCell)));}}brandMobileInfos.add(brandMobileInfo);}}return brandMobileInfos;}这种代码有点搓,还没有优化,可以大概看到是怎么读取信息的。 (3)使用mybatis更新数据。
如何使用POI对Excel表进行导入和导出
导入POI的jar包新建一个项目,在根目录在新建一个lib文件夹,将jar包复制粘贴到lib文件夹后,右键将其添加到项目的build path中,最后的结果如图所示:2编写java类,新建一个实体类,比如我们要导出数据库的有关电脑的信息,那么就建一个Computer实体类,代码如下:package com.qiang.poi;public class Computer {private int id;private String name;private String description;private double price;private double credit;public int getId() {return id;}public Computer(int id, String name, String description, double price,double credit) {super();this.id = id;this.name = name;this.description = description;this.price = price;this.credit = credit;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public double getCredit() {return credit;}public void setCredit(double credit) {this.credit = credit;}}3新建一个写入excel的方法,如write2excel,参数可以后面边写边决定(站在一个不熟悉POI的角度)public static void write2Excel(){} 4创建操作Excel的HSSFWorkbook对象HSSFWorkbook excel= new HSSFWorkbook();创建HSSFSheet对象Excel中的一个sheet(工作表)对应着java中的一个HSSFSheet对象,利用HSSFWorkbook对象可以创建一个HSSFSheet对象如:创建一个sheet名为computer的excel HSSFSheet sheet = excel.createSheet(“computer”);创建第一行标题信息的HSSFRow对象我们都知道excel是表格,即由一行一行组成的,那么这一行在java类中就是一个HSSFRow对象,我们通过HSSFSheet对象就可以创建HSSFRow对象如:创建表格中的第一行(我们常用来做标题的行) HSSFRow firstRow = sheet.createRow(0); 注意下标从0开始创建标题行中的HSSFCell数组当然,excel中每一行是由若干个单元格,我们常称为cell,它对应着java中的HSSFCell对象如:创建5个单元格 HSSFCell cells[] = new HSSFCell[5]; //假设我们一行有五列数据创建标题数据,并通过HSSFCell对象的setCellValue()方法对每个单元格进行赋值既然单元格都准备好了,那最后是不是该填充数据了呀。对的,没错。
好的,继续。现在就通过for循环来填充第一行标题的数据for (int i = 0; i < 5; i++) {cells[0] = firstRow.createCell(i);cells[0].setCellValue(titles[i]);}数据分析第一行标题栏创建完毕后,就准备填充我们要写入的数据吧,在java中,面向对象给我们带来的好处在这里正好体现了,没错把要填写的数据封装在对象中,即一行就是一个对象,n行就是一个对象列表嘛,好的,走起。创建对象Computer,私有属性id,name,description,price,credit,以及各属性的setter和getter方法,如步骤二所示。假设我们要写入excel中的数据从数据库查询出来的,最后就生成了一个List<Computer>对象computers数据写入具体数据有了,又该让机器帮我们干活了,向excel中写入数据。
for (int i = 0; i < computers.size(); i++) {HSSFRow row = sheet.createRow(i + 1);Computer computer = computers.get(i);HSSFCell cell = row.createCell(0);cell.setCellValue(computer.getId());cell = row.createCell(1);cell.setCellValue(computer.getName());cell = row.createCell(2);cell.setCellValue(computer.getDescription());cell = row.createCell(3);cell.setCellValue(computer.getPrice());cell = row.createCell(4);cell.setCellValue(computer.getCredit());}将数据真正的写入excel文件中做到这里,数据都写好了,最后就是把HSSFWorkbook对象excel写入文件中了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表优客号立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://www.youkehao.org.cn/article/80467.html
如若内容造成侵权/违法违规/事实不符,请联系优客号进行投诉反馈,一经查实,立即删除!