【Java】导⼊本地excel⽂件并对⽐数据库差异数据⽂章⽬录
前⾔
在本次项⽬中,有⼀个需求,导⼊本地Excel⽂件,对⽐数据库差异数据,再将差异数据导出Excel
项⽬使⽤前后端分离,所有这⾥采⽤前后端分离思想
⼀、思路
1. 读取本地Excel⽂件,获取其中的数据
2. 通过获取的参数查询数据库数据
3. 对⽐差异数据
java valueof4. 导出差异数据Excel表格
⼆、使⽤步骤
1.引⼊库
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!--如有需要处理⼤量数据则导⼊-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
2.读取上传的Excel数据并对⽐差异数据接⼝
/**
*  对⽐上传的Exccel的差异数据
*/
public JSONObject dataComparison(JSONObject jsonobject){
// 请求⽂件路径地址
String url = String("url");
Assert.isBlank(url,"清选择⽂件");
String fullFileName = url;
List<JSONObject> list;
try{
InputStream is =new FileInputStream(fullFileName);
list =read2007Xlsx(is);
}catch(Exception e){
throw new BaseException(400,"读取⽂件错误");
}
// 匹配数据库数据
JSONObject params =new JSONObject();
params.put("list", list);
JSONObject objectList =matchDatabaseData(params);
JSONObject objectList =matchDatabaseData(params);
return objectList ;
}
/**
* 读取excel⽂件
* XSSF -- 提供读写Microsoft Excel OOXML格式档案的功能
* XSSFWorkbook:是操作Excel2007(以上)的版本,扩展名是.xlsx
* @param in
* @return
* @throws IOException
*/
public static List<JSONObject>read2007Xlsx(InputStream in)throws IOException {
List<JSONObject> list =new ArrayList<>();
XSSFWorkbook xWorkbook =new XSSFWorkbook(in);
// Read the Sheet
XSSFSheet xssfSheet = SheetAt(0);
// Read the Row
for(int rowNum =1; rowNum <= LastRowNum(); rowNum++){
XSSFRow xssfRow = Row(rowNum);
if(xssfRow != null){
// 设置读取格式
JSONObject params =new JSONObject();
params.put("receivedLinkman", Cell(0).getStringCellValue());
params.put("receivedTelephone", Cell(1).getStringCellValue());
// 开始时间
String _startTime = Cell(2).getStringCellValue();
Date startTime = JavaDate(Double.valueOf(_startTime));
params.put("startTime",testTime(startTime));
String _endTime = Cell(3).getStringCellValue();
Date endTime = JavaDate(Double.valueOf(_endTime));
params.put("endTime",testTime(endTime));
list.add(params);
}
}
xWorkbook.close();
return list;
}
/**
* 匹配数据库数据
* key = "list"
*
* @param params
*/
private BasePageInfo<JSONObject>matchDatabaseData(JSONObject params){
if(params == null && String("list")== null && JSONArray("list").isEmpty()){ return null;
}
JSONArray array = JSONArray("list");
JSONObject jsonObject =new JSONObject();
if(array != null && array.size()>0){
jsonObject = JSONObject(0);
jsonObject.put("page", String("page"));
jsonObject.put("rows", String("rows"));
}
}
// 查询相关订单数据
BasePageInfo<JSONObject> objectList = iOrderDao.queryOrderByExcel(jsonObject);        JSONArray list = JSONArray("list");
// 处理差异数据
List<JSONObject> returnList =processingDifferenceData(list, List());
objectList.setList(returnList);
return objectList;
}
3.获取差异数据并导出Excel
前⾯通过上⼀个接⼝获取到差异数据,将差异数据写⼊Excel表格
public JSONObject exportExcel(JSONObject jsonObject){
// 导出差异数据
JSONArray list = JsonArray("list");
if(list == null){
throw new BaseException(400,"缺少导出数据");
}
// 获取桌⾯路径
String path =getDesktopPath();
// 填充导出内容
fillExportContent(path, list);
return Output.out(Message.OK, Message.EXPORT_EXCEL);
}
/**
* 获取桌⾯路径
*
* @return
*/
private static String getDesktopPath(){
// 获取桌⾯
FileSystemView view = FileSystemView();
File file = HomeDirectory();
String path = Path();
Path();
}
/**
* 填充导出内容
*
* @param path 导出路径
* @param list 导出内容
*/
private void fillExportContent(String path, JSONArray list){
if(list == null && list.size()<=0){
return;
}
//创建⼯作薄对象
HSSFWorkbook workbook =new HSSFWorkbook();//这⾥也可以设置sheet的Name //创建⼯作表对象
HSSFSheet sheet = ateSheet();
//创建⼯作表的⾏
HSSFRow row = ateRow(0);//设置第⼀⾏,从零开始
//第⼀⾏第⼀列
//第⼀⾏第⼆列
/
/第⼀⾏第三列
//第⼀⾏第四列 settledAmount
// (1wap移动 2pc  3⼩程序 4百度⼩程序 5第三⽅平台)
// 转单平台(0未转 1花娃 2花⼤侠 3⽆需转单 4转单宝)
// 设置表体内容
for(int i =0; i < list.size(); i++){
JSONObject listJSONObject = JSONObject(i);
row = ateRow(i +1);
String platform = String("platform");
switch(platform){
case"1":
platform ="移动端";
break;
case"2":
platform ="pc端";
break;
case"3":
platform ="⼩程序";
break;
case"4":
platform ="百度⼩程序";
break;
case"5":
platform ="第三⽅平台";
break;
}
String deferentPlatform = String("deferentPlatform");
switch(deferentPlatform){
case"0":
deferentPlatform ="未转";
break;
case"1":
deferentPlatform ="花娃";
break;
case"2":
deferentPlatform ="花⼤侠";
break;
case"3":
deferentPlatform ="⽆需转单";
break;
case"4":
deferentPlatform ="转单宝";
break;
}
}
// workbook.setSheetName(0,"sheet的Name");//设置sheet的Name
//⽂档输出
try{
FileOutputStream out =new FileOutputStream(path +"/"+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString()+".xls");            workbook.write(out);
out.close();
}catch(Exception e){
throw new BaseException(400,"导出错误");
}
}
总结
1. 导⼊导出注意⽂件格式
2. 获取路径的时候使⽤ “/”