今天完成一个小项目,通过xls一键导入导出数据
导入在线
导出
前端代码:
此代码是一键导出或是多选导出,需要自己获取id
exportExcels: function () { //选择导出 实体要写@ExcelResources(title="用户名",order=1) 1是第一列存入的值,如果实体不写会导出数据有条数,但没有值
//alert(getSelectedRowsdao().length);
var arr =0;
arr=getSelectedRowsdao();
if(arr==""||arr==null){
window.top.location.href = baseURL + "platform/student/exportExcel?token="+token;
}else{
var id=arr.join(",");
window.top.location.href = baseURL + "platform/student/exportExcels?token="+token+"&id="+id;
}
后端 控制器代码:
实体类要写@ExcelResources(title=“用户名”,order=1),tiele导出后的列名,1就是是导出后的第几列 必须写,否则导出后不出数据
重点,导出全部的方式是要自己定义的,选择导出是可以用已经给出的方法
//导出
/**
* 导出用户
* @throws IOException
*/
@Log("导出用户")
@RequestMapping("/exportExcel")
//@RequiresPermissions("sys:user:exportExcel")
public void exportExcel(HttpServletResponse response) throws IOException{
Map<String, Object> params = new HashMap<String, Object>();
List<TimsStu> stuList = (List<TimsStu>)timsStuService.queryList(params);//把表全部信息存到集合里
//querList需要自己写方法,就是查询全部
OutputStream os = response.getOutputStream();
Map<String, String> map = new HashMap<String, String>();
map.put("title", "用户信息表");
map.put("total", stuList.size()+" 条");
//map.put("date", DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN));
//响应信息,弹出文件下载窗口
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode("用户信息表.xls", "UTF-8"));
ExcelTemplate et = ExcelUtil.getInstance().handlerObj2Excel("web-info-template.xls", stuList, TimsStu.class, true);
et.replaceFinalData(map);
et.wirteToStream(os);
os.flush();
os.close();
}
/**
* 选择导出用户
* @throws IOException
*/
@Log("选择导出用户")
@RequestMapping("/exportExcels")
//@RequiresPermissions("sys:user:exportExcel")
public String exportExcels(HttpServletResponse response,HttpServletRequest req) throws IOException{
Map<String, Object> params = new HashMap<String, Object>();
String ids=req.getParameter("id"); //获取前端传来的字符串
List<TimsStu> stuList =null;
String[] studentIds=ids.split(",");
int arr[]=new int[studentIds.length];
for (int i = 0; i < arr.length; i++) //
arr[i]=Integer.parseInt(studentIds[i]);
List<Long> id=new ArrayList<Long>();
for (int i = 0; i < arr.length; i++) {
id.add((long) arr[i]);
}
stuList =timsStuService.selectBatchIds(id);//方法是已经定义好的
OutputStream os = response.getOutputStream();
Map<String, String> map = new HashMap<String, String>();
map.put("title", "用户信息表");
map.put("total", stuList.size()+" 条");
//map.put("date", DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN));
//响应信息,弹出文件下载窗口
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode("用户信息表.xls", "UTF-8"));
ExcelTemplate et = ExcelUtil.getInstance().handlerObj2Excel("web-info-template.xls", stuList, TimsStu.class, true);
et.replaceFinalData(map);
et.wirteToStream(os);
os.flush();
os.close();
return "1";
}
表连接的数据导出,需要在dao(xml)里面定义方法,用选择用户控制器方法,把Service方法改成自己新定义的就可以了(可以用图中给出的selectBatchIds重写,这样写好就可以直接用)
导入
pom文件需要配置一下
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
</dependency>
前端 代码:
<input type="file" class="form-control" name="file" id="file" >
daoru:function(){ //导入
var form = new FormData();
form.append("file", document.getElementById("file").files[0]);
$.ajax({
url: baseURL + 'platform/cla/daoru', //后台url
data: form,
cache: false,
async: false,
type: "POST", //类型,POST或者GET
dataType: 'json', //数据返回类型,可以是xml、json等
processData: false,
contentType: false,
success: function (data) { //成功,回调函数
alert("cj");
if(data=="1"){
alert("成功");
}
},
error: function (er) { //失败,回调函数
alert(JSON.stringify(er));
}
});
},
控制器 代码:
注释了比较多,比较精简 for循环里是获取值,重点
//导入
@RequestMapping("/daoru")
public String daoru(@RequestParam("file") MultipartFile file,HttpServletRequest request){
String contentType = file.getContentType();
String fileName = file.getOriginalFilename();
if (file.isEmpty()) {
return "文件为空!";
}
try {
//根据路径获取这个操作excel的实例
HSSFWorkbook wb = new HSSFWorkbook(file.getInputStream()); //根据页面index 获取sheet页
HSSFSheet sheet = wb.getSheetAt(0);
//实体类集合
List<TmisCla> importDatas = new ArrayList<>();
HSSFRow row = null;
//循环sesheet页中数据从第二行开始,第一行是标题
for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {
//获取每一行数据
row = sheet.getRow(i);
TmisCla data = new TmisCla();
//data.setTmisClaid(Integer.valueOf((int) row.getCell(0).getNumericCellValue()));;
data.setTmisClaname(row.getCell(1).getStringCellValue());
data.setTmisCaid(Integer.valueOf((int) row.getCell(2).getNumericCellValue()));
// data.setContent(row.getCell(2).getStringCellValue());
// data.setAuthor(row.getCell(3).getStringCellValue());
// data.setU_id(Integer.valueOf((int) row.getCell(5).getNumericCellValue()));
// data.setC_id(Integer.valueOf((int) row.getCell(6).getNumericCellValue()));
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//data.setAddtime(new java.sql.Timestamp(df.parse(df.format(HSSFDateUtil.getJavaDate(row.getCell(4).getNumericCellValue()))).getTime()));
importDatas.add(data);
tmisClaService.insert(data); //调用添加方法,此方式是自带方法
}
//循环展示导入的数据,实际应用中应该校验并存入数据库
// for (TmisCla imdata : importDatas) {
// SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// System.out.println("ID:"+imdata.getTimsSname());
// }
} catch (Exception e) {
e.printStackTrace();
}
return "1";
}