目录
- 1. 数据库展示
- 2. 导入依赖
- 3. 写方法
- 3.1 导入数据
- 3.2 导出数据
- 4. 效果
- 5. 不足
- 6. 参考链接
1. 数据库展示
2. 导入依赖
pom.xml
<!--文件上传处理-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<!--poi依赖-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
在springmvc.xml中插入语句,限制导入大小
<!--图片转换器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸 -->
<property name="maxUploadSize" value="10024000"></property>
</bean>
3. 写方法
3.1 导入数据
@RequestMapping("/workbench/activity/importActivity.do")
public @ResponseBody Object importActivity(MultipartFile activityFile, String userName, HttpSession session){
System.out.println("userName="+userName);
User user=(User) session.getAttribute("sessionUser");
ReturnObject returnObject=new ReturnObject();
try {
InputStream is=activityFile.getInputStream();
HSSFWorkbook wb=new HSSFWorkbook(is);
//根据wb获取HSSFSheet对象,封装了一页的所有信息
HSSFSheet sheet=wb.getSheetAt(0);//页的下标,下标从0开始,依次增加
//根据sheet获取HSSFRow对象,封装了一行的所有信息
HSSFRow row=null;
HSSFCell cell=null;
Activity activity=null;
List<Activity> activityList=new ArrayList<>();
for(int i=1;i<=sheet.getLastRowNum();i++) {//sheet.getLastRowNum():最后一行的下标
row=sheet.getRow(i);//行的下标,下标从0开始,依次增加
activity=new Activity();
activity.setId(UUIDUtils.getUUID());
activity.setOwner("2"); // 设置人
activity.setCreateTime(DateUtils.formateDateTime(new Date()));
activity.setCreateBy("2"); // 设置创造人
for(int j=0;j<row.getLastCellNum();j++) {//row.getLastCellNum():最后一列的下标+1
//根据row获取HSSFCell对象,封装了一列的所有信息
cell=row.getCell(j);//列的下标,下标从0开始,依次增加
//获取列中的数据
String cellValue= HSSFUtils.getCellValueForStr(cell);
if(j==0){
activity.setName(cellValue);
}else if(j==1){
activity.setStartDate(cellValue);
}else if(j==2){
activity.setEndDate(cellValue);
}else if(j==3){
activity.setCost(cellValue);
}else if(j==4){
activity.setDescription(cellValue);
}
}
//每一行中所有列都封装完成之后,把activity保存到list中
activityList.add(activity);
}
//调用service层方法,保存市场活动,这里就不多说了
int ret=activityService.saveCreateActivityByList(activityList);
// 这里设置一下code,传输给前端
returnObject.setCode("1");
// 设置数据
returnObject.setRetData(ret);
}catch (Exception e){
e.printStackTrace();
returnObject.setCode("0");
returnObject.setMessage("系统忙,请稍后重试....");
}
return returnObject;
}
获取随机ID
public class UUIDUtils {
public static String getUUID(){
return UUID.randomUUID().toString().replaceAll("-","");
}
}
获取当前时间
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtils {
/**
* 对指定的date对象进行格式化: yyyy-MM-dd HH:mm:ss
* @param date
* @return
*/
public static String formateDateTime(Date date){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr=sdf.format(date);
return dateStr;
}
/**
* 对指定的date对象进行格式化: yyyy-MM-dd
* @param date
* @return
*/
public static String formateDate(Date date){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
String dateStr=sdf.format(date);
return dateStr;
}
/**
* 对指定的date对象进行格式化: HH:mm:ss
* @param date
* @return
*/
public static String formateTime(Date date){
SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");
String dateStr=sdf.format(date);
return dateStr;
}
}
HSSFUtils.java:关于excel文件操作的工具类
import org.apache.poi.hssf.usermodel.HSSFCell;
/**
* 关于excel文件操作的工具类
*/
public class HSSFUtils {
/**
* 从指定的HSSFCell对象中获取列的值
* @return
*/
public static String getCellValueForStr(HSSFCell cell){
String ret="";
if(cell.getCellType()==HSSFCell.CELL_TYPE_STRING){
ret=cell.getStringCellValue();
}else if(cell.getCellType()==HSSFCell.CELL_TYPE_NUMERIC){
ret=cell.getNumericCellValue()+"";
}else if(cell.getCellType()==HSSFCell.CELL_TYPE_BOOLEAN){
ret=cell.getBooleanCellValue()+"";
}else if(cell.getCellType()==HSSFCell.CELL_TYPE_FORMULA){
ret=cell.getCellFormula();
}else{
ret="";
}
return ret;
}
}
前端的设计代码:
//给"导入"按钮添加单击事件
$("#importActivityBtn").click(function () {
//收集参数
var activityFileName=$("#activityFile").val();
var suffix=activityFileName.substr(activityFileName.lastIndexOf(".")+1).toLocaleLowerCase();//xls,XLS,Xls,xLs,....
if(suffix!="xls"){
alert("只支持xls文件");
return;
}
var activityFile=$("#activityFile")[0].files[0];
if(activityFile.size>5*1024*1024){
alert("文件大小不超过5MB");
return;
}
//FormData是ajax提供的接口,可以模拟键值对向后台提交参数;
//FormData最大的优势是不但能提交文本数据,还能提交二进制数据
var formData=new FormData();
formData.append("activityFile",activityFile);
formData.append("userName","张三");
//发送请求
$.ajax({
url:'workbench/activity/importActivity.do',
data:formData,
processData:false,//设置ajax向后台提交参数之前,是否把参数统一转换成字符串:true--是,false--不是,默认是true
contentType:false,//设置ajax向后台提交参数之前,是否把所有的参数统一按urlencoded编码:true--是,false--不是,默认是true
type:'post',
dataType:'json',
success:function (data) {
if(data.code=="1"){
//提示成功导入记录条数
alert("成功导入"+data.retData+"条记录");
// 自己设置展示
}else{
//提示信息
alert(data.message);
}
}
});
});
3.2 导出数据
// 导出
@RequestMapping("/workbench/activity/exportAllActivitys.do")
public void exportAllActivitys(HttpServletResponse response) throws Exception{
//调用service层方法,查询所有的市场活动,不多说什么,这是基础
List<Activity> activityList=activityService.queryAllActivitys();
//创建exel文件,并且把activityList写入到excel文件中
HSSFWorkbook wb=new HSSFWorkbook();
HSSFSheet sheet=wb.createSheet("市场活动列表");
HSSFRow row=sheet.createRow(0);
HSSFCell cell=row.createCell(0);
cell.setCellValue("ID");
cell=row.createCell(1);
cell.setCellValue("所有者");
cell=row.createCell(2);
cell.setCellValue("名称");
cell=row.createCell(3);
cell.setCellValue("开始日期");
cell=row.createCell(4);
cell.setCellValue("结束日期");
cell=row.createCell(5);
cell.setCellValue("成本");
cell=row.createCell(6);
cell.setCellValue("描述");
cell=row.createCell(7);
cell.setCellValue("创建时间");
cell=row.createCell(8);
cell.setCellValue("创建者");
cell=row.createCell(9);
cell.setCellValue("修改时间");
cell=row.createCell(10);
cell.setCellValue("修改者");
//遍历activityList,创建HSSFRow对象,生成所有的数据行
if(activityList!=null && activityList.size()>0){
Activity activity=null;
for(int i=0;i<activityList.size();i++){
activity=activityList.get(i);
//每遍历出一个activity,生成一行
row=sheet.createRow(i+1);
//每一行创建11列,每一列的数据从activity中获取
cell=row.createCell(0);
cell.setCellValue(activity.getId());
cell=row.createCell(1);
cell.setCellValue(activity.getOwner());
cell=row.createCell(2);
cell.setCellValue(activity.getName());
cell=row.createCell(3);
cell.setCellValue(activity.getStartDate());
cell=row.createCell(4);
cell.setCellValue(activity.getEndDate());
cell=row.createCell(5);
cell.setCellValue(activity.getCost());
cell=row.createCell(6);
cell.setCellValue(activity.getDescription());
cell=row.createCell(7);
cell.setCellValue(activity.getCreateTime());
cell=row.createCell(8);
cell.setCellValue(activity.getCreateBy());
cell=row.createCell(9);
cell.setCellValue(activity.getEditTime());
cell=row.createCell(10);
cell.setCellValue(activity.getEditBy());
}
}
//把生成的excel文件下载到客户端
response.setContentType("application/octet-stream;charset=UTF-8");
response.addHeader("Content-Disposition","attachment;filename=activityList.xls");
OutputStream out=response.getOutputStream();
wb.write(out);
wb.close();
out.flush();
}
前端代码:
//给"批量导出"按钮添加单击事件
$("#exportActivityAllBtn").click(function () {
//发送同步请求
window.location.href="workbench/activity/exportAllActivitys.do";
});
4. 效果
下载
上传
5. 不足
无法精准判断每一列对应的数据,必须以一个固定的表规范才能使用
6. 参考链接
无