/**

* 导入信息

*/

@Override

public List add(HttpServletRequest request) {

// TODO Auto-generated method stub

List num=new ArrayList();

MultipartHttpServletRequest multipartRequest =(MultipartHttpServletRequest) request;

CommonsMultipartFile file = (CommonsMultipartFile)multipartRequest.getFile("zlUpload");

if(file!=null){

try {

num = save(file.getInputStream());

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

returnnum;

}

/**

* 保存上传的Excel信息

*/

private List save(InputStream inputStream) throwsIOException {

// TODO Auto-generated method stub

List error_num = new ArrayList();

List temp =(List)readXls(inputStream,error_num);

System.out.println(temp.get(0).getClass().getName());

if(temp.get(0).getClass().getName().equals("org.apache.poi.hssf.usermodel.HSSFCell")){

return error_num;

}else{

TStudentNo student = null;

List studentList = newArrayList();

for(int i=0;i

student = (TStudentNo)temp.get(i);

studentList.add(student);

}

try {

//在插入数据前进行判断,看数据库中是否有不允许重复的字段出现,以打断保存进度

int repeat = 0;

for(int j = 0;j

TStudentNo Studenttemp =studentMapper.findByStudentNo(studentList.get(j).getStudent_no());

//如果查到了,重复数加一,然后跳过不保存

if(Studenttemp!=null){

repeat++;

}

}

if(repeat==0){

for(int z=0;z

studentMapper.saveStudent(studentList.get(z));

}

}else{

error_num.add("数据库中有相同的数据,请检查学号等不允许重复的部分!");

return error_num;

}

} catch (Exception e) {

//判断Excel中是否有重复数据,如果有重复跳过保存异常

error_num.add("数据库中有相同的数据,请检查学号等不允许重复的部分!");

return error_num;

}

return temp;

}

}

/**

* 逐行遍历其Excel

*/

private Object readXls(InputStream inputStream,Listerror_num) throws IOException {

InputStream is = new BufferedInputStream(inputStream);

HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

TStudentNo student = null;

List list = new ArrayList();

//循环工作表Sheet

for(int numSheet =0;numSheet

HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);

if(hssfSheet == null){

continue;

}

for(int rowNum =2;rowNum<=hssfSheet.getLastRowNum();rowNum++){

System.out.println(hssfSheet.getLastRowNum());

HSSFRow hssfRow = hssfSheet.getRow(rowNum);

//检查每行的空格数,如果小于4证明有一个或多个空格,但不是整行

if(CheckRowNull(hssfRow)<4){

student = new TStudentNo();

HSSFCell name = hssfRow.getCell(0);

HSSFCell student_no = hssfRow.getCell(1);

HSSFCell phone = hssfRow.getCell(2);

HSSFCell class_no = hssfRow.getCell(3);

HSSFCell subject_category = hssfRow.getCell(4);

List temp = new ArrayList();

temp.add(0, name);

temp.add(1, student_no);

temp.add(2, phone);

temp.add(3, class_no);

temp.add(4, subject_category);

int temp1 = 0;//用于跳出双层for循环

for(int i=0;i<5;i++){

//为记录前台进行提示某行某列出错

temp1 = CheckRowError(temp.get(i),error_num,rowNum,i);

if(temp1==-1){

break;

}

}

if(temp1==-1){

return temp;

}

student.setName(getCellValue(name));

student.setPhone(getCellValue(phone));

student.setStudent_no(getCellValue(student_no));

student.setClass_no(getCellValue(class_no));

student.setSubject_category(Integer.parseInt(getCellValue(subject_category)));

list.add(student);

}else{

continue;

}

}

}

return list;

}

/**

* 对Excel的各个单元格的格式进行判断并转换

*/

private String getCellValue(HSSFCell cell) {

String cellValue = "";

DecimalFormat df = newDecimalFormat("#");

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;

}

//判断某行某列有问题

private int CheckRowError(HSSFCell cell,Listerror_num,int rowNum,int cell_num){

//判断各个单元格是否为空

if(cell==null||cell.equals("")||cell.getCellType() ==HSSFCell.CELL_TYPE_BLANK){

error_num.add("出错啦!请检查第"+(rowNum+1)+"行第"+(cell_num+1)+"列。"+"如果您在该行没有数据,建议您选择删除该行,重试!");

return -1;

}

return 0;

}

//判断行为空

private int CheckRowNull(HSSFRow hssfRow){

int num = 0;

Iterator cellItr =hssfRow.iterator();

while(cellItr.hasNext()){

Cell c =cellItr.next();

if(c.getCellType() ==HSSFCell.CELL_TYPE_BLANK){

num++;

}

}

return num;

}

java poi 空_Java的poi技术遍历Excel时进行空Cell,空row,判断相关推荐

  1. Java的poi技术遍历Excel时进行空Cell,空row,判断

    /** * 导入信息 */ @Override public List<Object> add(HttpServletRequest request) { // TODO Auto-gen ...

  2. java获取内容为空_Java使用POI读取Word文档时如果文档内容为空时出现异常

    异常如下: org.apache.poi.EmptyFileException: The supplied file was empty (zero bytes long) at org.apache ...

  3. cpu java poi 导出_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  4. java自动生成生成java透视表_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  5. java poi 换行_Java利用POI生成Excel强制换行

    前一段时间在做一个学校排课系统时,有一个地方需要利用把课程表生成excel汇出给客户,由于之前用excel都只是简单的应用,在单元格里都是用自动换行,而这次可能需要用到手动强制换行. 于是我在网上找了 ...

  6. java poi教程_Java完成POI的功能

    /***Controller层操作,省略service和dao*/@Controller@RequestMapping("/excel")publicclassExcelContr ...

  7. java word 乱码_JAVA 使用POI替换word中的某些字符串,在本地调试一切ok,在服务器上出现乱码...

    最近做了一个在word中替换指定字符串,插入图片,转换成pdf的需求,弄了两天多才搞出来,本以为everything is ok,但是在本地调试什么都是好的. 放到服务器上以后...却乱码了...乱码 ...

  8. java权限框架_Java高级工程师必备技术栈-由浅入深掌握Shiro权限框架

    权限系统在任何一个系统中都存在,随着分布式系统的大行其道,权限系统也趋向服务化,对于一个高级工程师来说,权限系统的设计是必不可少需要掌握的技术栈 Apache Shiro™是一个功能强大且易于使用的J ...

  9. java set 操作_java:Set循环遍历的俩种方法使用

    java:Set循环遍历的俩种方法使用 package collection; import java.util.*; public class NewSet { public static void ...

最新文章

  1. MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 五 --- 为ListMongoDBRef增加扩展方法...
  2. 清华姚班2019级新生来了:高考状元、奥赛金牌,也是一批被AI感召的00后
  3. python学习之路-继承
  4. phpcms v9 的表单向导功能的使用方法
  5. 将一个实体转换成 Url 参数的形式 ?a=ab=b
  6. 连接 F5 大 IP 设备
  7. 「2019纪中集训Day7」解题报告
  8. git提交大文件的解决方法
  9. [转]使用FFmpeg将视频推流到nginx,通过vlc拉流播放(通过命令的方式)
  10. HTML网上书店静态HTML网页作业作品 大学生三联书店网页设计制作成品 简单DIV CSS布局网站
  11. matlab图像粘连计数,Matlab图像处理在水稻谷粒计数中的应用
  12. matlab生成的图片有边,科学网—图片空白边缘处理/统计直方图---matlab/保存生成高质量的清晰图 - 杨小林的博文...
  13. 数据分析十年来电影票房数据
  14. 深度学习-感知机模型---思路图解+python代码
  15. 0045-一个Dashbord页面监控多个消费者
  16. 深圳大厂程序员自述:我37岁,年薪百万,等着被公司干掉!
  17. ubuntu18.04安装Nvidia显卡
  18. 收藏.IBM.某高手点评IBM历年试题
  19. Python MyQR 生成不一样的二维码
  20. 生产进度管理系统为制造管理提供较完善的解决方案

热门文章

  1. STL Vector使用例程
  2. 中国大数据企业排行榜V6.0- 5 年后再去看看中几个大数据公司的发展状况
  3. 为什么你应该让你的孩子尽早学习编程
  4. 一起谈.NET技术,VS2010测试功能之旅:编码的UI测试(2)-操作动作的录制原理(下)...
  5. 真正的取真实IP地址及利弊
  6. SQL语句中用Parameters有什么好处
  7. Android 创建其它应该程序的上下文对象
  8. 百度技术研发笔试题目1
  9. 计算机竞赛作文,计算机打字比赛作文例文
  10. 最新版idea如何在包下建立子包(dao包下建立impl包)