说一下大体的思路:
1.首先通过页面的上传文件,选择excle;
2.通过ajax 传到后台(有回调函数);
3.后台处理,返回数据;
因为我想将数据先检查数据,是否满足我们的插入条件,执行回调函数,假如其中的数据有问题,就将在页面弹框显示,有问题的原因(后面我是输出在控制台,还没有传到前台),。我只是将数据打印在控制台,也还没有写入数据库,所以其中写入数据库部分,要将输出语句改为插入到数据库的方法,这个后面会完成
一。先上前台和ajax
导入数据
二。后台
package com.ciitc.hsi.controller;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSONObject;
import com.ciitc.hsi.bean.BaseResponseBean;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
//这个是响应实体
BaseResponseBean brb=new BaseResponseBean();
//对取得的列中的数据类型进行判断
public static String getCellValue(HSSFCell cell) {
String cellValue = "";
DecimalFormat df = new DecimalFormat("#");
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
cellValue = cell.getRichStringCellValue().getString().trim();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
cellValue = df.format(cell.getNumericCellValue()).toString();
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
cellValue = String.valueOf(cell.getBooleanCellValue()).trim();
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue = cell.getCellFormula();
break;
default:
cellValue = "";
}
return cellValue.toString();
}
/*方法二:在不满足条件的字段,给出错误提示*/
@RequestMapping(value="doCheck",method=RequestMethod.POST)
public @ResponseBody String doCheck(HttpServletRequest request,HttpServletResponse response,
@RequestParam("uploadexcle") MultipartFile file) {
try {
//获取excle的输入流
InputStream inputStream=file.getInputStream();
POIFSFileSystem fs=new POIFSFileSystem(inputStream);
HSSFWorkbook workbook=new HSSFWorkbook(fs);
//设置开始行为
int currentPosition=0;
//设置当前位置
int currentSheet=0;
//设置sheet数
int numOfSheet=workbook.getNumberOfSheets();
//获取第一个sheet
HSSFSheet sheet=workbook.getSheetAt(currentSheet);
//getLastRowNum 是列
//判断当前行是否到达sheet的结尾
System.out.println("currentPosition值:"+currentPosition);
System.out.println("sheet.getLastRowNum()值:"+sheet.getLastRowNum());
int i=0;;
while(currentPosition<=sheet.getLastRowNum()) {
//获取当前行数
int row=currentPosition;
currentPosition++;
//读取当前行的数据
String line=getLine2(sheet,row);
System.out.println( line);
i++;
}
currentPosition=0;
//判断是否还有sheet
while(currentSheet!=numOfSheet-1) {
//得到下一张sheet
sheet=workbook.getSheetAt(currentSheet+1);
//获取当前行数
int row=currentPosition;
//当前行数是否到达文件末尾
if(currentPosition==sheet.getLastRowNum()) {
//当前sheet只想下一张sheet
currentSheet++;
//重新设定当前行数为0;
currentPosition=0;
String line= getLine2(sheet,row);
System.out.println( line);
continue;
}else{
currentPosition++;
//读取当前行的数据
String line= getLine2(sheet,row);
System.out.println( line);
}
}
if(i!=0) {
brb.setCode("200");
brb.setMsg("执行成功");
}else {
brb.setCode("100");
brb.setMsg("未执行数据检查");
}
} catch (IOException e) {
e.printStackTrace();
}
return JSONObject.toJSONString(brb);
}
//函数getLine返回sheet的一行数据
public static String getLine2(HSSFSheet sheet,int row) {
//创建字符缓冲区
StringBuffer buffer=new StringBuffer();
StringBuffer error=new StringBuffer();
//根据行数取䮻sheet的一行数据
HSSFRow rowline=sheet.getRow(row);
//获得当前行的列数
//int filedColumns=rowline.getLastCellNum();
HSSFCell cell;
//此处 i<列数,可以写成i