java向现有的excel插入数据列
需求:根据客户号和证件号,查询出折算保费和积分值,插入到黄色列。最近客户提取数据的频率是越来越高了,数据量越来越大了,方法1出现了一次重大事故,先只能使用方法2了,虽然麻烦一点,也是没办法啊。方法1:使用mysql客户端,建临时表—>导入excel—>使用sql查询修改临时表缺少的数据—>导出excel—>删临时表。此方法简单粗暴,但不能用于大数据量,易锁表,尤...
·
需求:根据客户号和证件号,查询出折算保费和积分值,插入到黄色列。
最近客户提取数据的频率是越来越高了,数据量越来越大了,方法1出现了一次重大事故,先只能使用方法2了,虽然麻烦一点,也是没办法啊。
- 方法1:使用mysql客户端,建临时表—>导入excel—>使用sql查询修改临时表缺少的数据—>导出excel—>删临时表。此方法简单粗暴,但不能用于大数据量,易锁表,尤其是读写分离时会导致同步失败
- 方法2:当然就信手拈来的java代码了。虽然简单,也想做个笔记。这里是查库数据,遍历excel数据,证件号相同时插入excel。启动项目后,main'方法执行就ok了。下次换了excel,变更下行或列。
部分包 import org.apache.commons.lang.StringUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*; import java.util.ArrayList; import java.util.List; @Transactional @Service public class AddUserImpl implements AddUser { public void getIslog(String filepath) { OutputStream out = null; List<Model1> model1list = adduserDAO.getIslog();//查询数据: try { File file = new File(filepath); BufferedInputStream in = new BufferedInputStream(new FileInputStream(file)); Workbook workBook = new XSSFWorkbook(in);//获取excel Sheet sheet = workBook.getSheetAt(0);//获取第一个sheet页 int i = 0;//用于显示空行 int j = 0;//已经匹配到的数据行 for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {//从表格第二行开始遍历 i += 1; Row row = sheet.getRow(rowNum);//获取行 Cell cell = row.getCell(7);//获取该行的第7列的单元格 if (null == cell) { System.out.println("null====第" + i + "行"); continue; } cell.setCellType(Cell.CELL_TYPE_STRING);//设置单元格格式,证件号多为纯数字 String idno = cell.getStringCellValue();//获取单元格数据 idno = StringUtils.deleteWhitespace(idno);//删除字符串中的空格,不然怎么equals for (Model1 model1 : model1list) { if (null != model1.getIdno() && model1.getIdno().equals(idno)) { Cell cell6 = row.createCell(11);//创建单元格 cell6.setCellValue(null == model1.getIsLog() ? "否" : model1.getIsLog());//插入单元格数据,不能为空 Cell cell7 = row.createCell(12); cell7.setCellValue(null == model1.getIsReu() ? "否" : model1.getIsReu()); Cell cell9 = row.createCell(14); cell9.setCellValue(null == model1.getPoint() ? "0" : model1.getPoint()); j += 1; System.out.println("" + j); continue; } } } out = new FileOutputStream(filepath); workBook.write(out);//最后一顶要写入输出流 } catch (Exception e) { e.printStackTrace(); } } }
有次博文定义的实体类名字有人没看明白,这里Model1是实体类,顺便把实体类字段也放进来算了。mapper层就不写了,要什么数据查什么数据就好了
public class Model1 implements Serializable { private static final long serialVersionUID = 7104046421371851608L; private String isLog; private String isReu; private String idno; private String point; public String getIsLog() { return isLog; } public void setIsLog(String isLog) { this.isLog = isLog; } public String getIsReu() { return isReu; } public void setIsReu(String isReu) { this.isReu = isReu; } public String getIdno() { return idno; } public void setIdno(String idno) { this.idno = idno; } public String getPoint() { return point; } public void setPoint(String point) { this.point = point; } }
更多推荐
已为社区贡献1条内容
所有评论(0)