处理需要上传的excel
需要导入的jar包有
dom4j-1.6.1.jar
poi-3.8.jar
poi-ooxml-3.8.jar
poi-ooxml-schemas-3.8.jar
xmlbeans-2.3.0.jar
也可以通过maven
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.8</version>
需要导入的jar包有
dom4j-1.6.1.jar
poi-3.8.jar
poi-ooxml-3.8.jar
poi-ooxml-schemas-3.8.jar
xmlbeans-2.3.0.jar
也可以通过maven
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.8</version>
</dependency>
代码如下
package com.lixy;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExcelReader {
private String filePath;
private String sheetName;
private int startNum=0;//列头开始行
private Workbook workBook;
private Sheet sheet;
private List
columnHeaderList;//列头
private List
typeList;//列头类型
private List
> listData;
private List
package com.lixy;
import java.io.*;
import java.util.*;
/***
* desc:服务器启动时同步excel中的员工星级到数据库
* @author Administrator
*
*/
public class StaffStarOperator {
public static void main(String... args) {
ExcelReader eh = new ExcelReader("E:\\staffstar.xlsx","Sheet1",2,"\\|");
//解析excel并封装
eh.getAllRowCellData();
//excel中读取的数据
List
> dataList = eh.getMapData();
Map
idToName = new LinkedHashMap<>();
Map
nameToId = new LinkedHashMap<>();
//解析staffstarErr.txt文件
readTxtToMap("E:\\staffstarErr.txt",idToName,nameToId);
System.out.println("idToName:" + idToName.size());
System.out.println("nameToId:"+nameToId.size());
Set
nameKeys = nameToId.keySet(); /*mapData.stream() .filter(map1->map1.get("staffNum").endsWith("sdf")&&map1.get("staffName").equals("")) .*/ StringBuilder sb = new StringBuilder(); /* for (Map
dMap : dataList) { if (!nameKeys.contains(dMap.get("staffName"))) continue; if(dMap.get("staffNum").endsWith(nameToId.get(dMap.get("staffName")))) sb.append("UPDATE SYS_STAFF SET STAFF_STAR = ") .append(dMap.get("staffStar")) .append(" WHERE STAFF_ID = ") .append("'") .append(dMap.get("staffNum")) .append("'") .append(";").append("\r\n"); }*/ dataList.stream() .filter(map1 -> nameKeys.contains(map1.get("staffName"))) .filter(map2 -> map2.get("staffNum").endsWith(nameToId.get(map2.get("staffName")))) .forEach(value->{ sb.append("UPDATE SYS_STAFF SET STAFF_STAR = ") .append(value.get("staffStar")) .append(" WHERE STAFF_ID = ") .append("'") .append(value.get("staffNum")) .append("'") .append(";").append("\r\n"); }); //输出结果 if(sb.length()>0) writeStringTOFile(sb.toString(),"E:\\","staff_star_sql.txt"); } /*** * 输出指定内容到文件 * @author li_shuai * @throws IOException * @date 2017年3月8日 */ public static void writeStringTOFile(String content,String path,String fileName) { byte [] buff=new byte[]{}; FileOutputStream output = null; try { output = new FileOutputStream(path+fileName); buff=content.getBytes(); output.write(buff, 0, buff.length); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { output.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /*** * 解析staffstarErr.txt文件为map * @param path * @return */ public static void readTxtToMap(String path,Map
idToName,Map
nameToId) { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(new FileInputStream(path))); String[] arr; //["工编号:8120077","姓名:黄龙宝"] try { while (br.read()!=-1){ String str = br.readLine(); arr = str.split("-->")[0].split(","); idToName.put(arr[0].split(":")[1], arr[1].split(":")[1]); nameToId.put(arr[1].split(":")[1], arr[0].split(":")[1]); } } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (null != br) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } /*** * 分小批量进行更新,防止数据量过大 * @author li_shuai * @throws ServiceException * @date 2017年3月8日 */ private static int batchUpdateStaffStarList(IBaseService baseService,List
> mapList) throws ServiceException{ List
> subList = new ArrayList
>(); int size = mapList.size(); int index = 100;//多少条记录一个小批量 int len = size%index==0?(size/index):(size/index+1); int suCount = 0;//统计更新成功的数量 for(int s=0;s
=index?index:mapList.size()); //批量更新员工星级信息到数据库 baseService.updateByIBatis("sys.batchUpdateStaffStarByIds", subList); suCount +=subList.size(); //清空 subList.clear(); } return suCount; } }
excel模板样式