对Excle的行和列进行检查  转换代码 ;

 **
* 导入信息
*/
@Override
public List<Object> add(HttpServletRequest request) {
// TODO Auto-generated method stub
List<Object> num=new ArrayList<Object>();
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<Object> save(InputStream inputStream) throwsIOException {
// TODO Auto-generated method stub
List<Object> error_num = new ArrayList<Object>();
List<Object> temp =(List<Object>)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<TStudentNo> studentList = newArrayList<TStudentNo>();
for(int i=0;i<temp.size();i++){
student = (TStudentNo)temp.get(i);
studentList.add(student);
}
try {
//在插入数据前进行判断,看数据库中是否有不允许重复的字段出现,以打断保存进度
int repeat = 0;
for(int j = 0;j<studentList.size();j++){
TStudentNo Studenttemp =studentMapper.findByStudentNo(studentList.get(j).getStudent_no());
//如果查到了,重复数加一,然后跳过不保存
if(Studenttemp!=null){
repeat++;
}
}
if(repeat==0){
for(int z=0;z<studentList.size();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,List<Object>error_num) throws IOException {
InputStream is = new BufferedInputStream(inputStream);
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
TStudentNo student = null;
List<TStudentNo> list = new ArrayList<TStudentNo>();
//循环工作表Sheet
for(int numSheet =0;numSheet<hssfWorkbook.getNumberOfSheets();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<HSSFCell> temp = new ArrayList<HSSFCell>();
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,List<Object>error_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<Cell> cellItr =hssfRow.iterator();
while(cellItr.hasNext()){
Cell c =cellItr.next();
if(c.getCellType() ==HSSFCell.CELL_TYPE_BLANK){
num++;
}
}
return num;
}

对Excle的行和列进行检查 单元格类型转换代码 ;的更多相关文章

  1. POI教程之第二讲:创建一个时间格式的单元格,处理不同内容格式的单元格,遍历工作簿的行和列并获取单元格内容,文本提取

    第二讲 1.创建一个时间格式的单元格 Workbook wb=new HSSFWorkbook(); // 定义一个新的工作簿 Sheet sheet=wb.createSheet("第一个 ...

  2. C# 对Excel 单元格格式, 及行高、 列宽、 单元格边框线、 冻结设置

    一.对行高,列宽.单元格边框等的设置 这篇简短的文字对单元格的操作总结的比较全面,特此转载过来. private _Workbook _workBook = null; private Workshe ...

  3. Repeater多列分别合并单元格

    GridView.Repeater合并单元格可以参考http://www.cnblogs.com/zhmore/archive/2009/04/22/1440979.html,但是原文例子是合并一列的 ...

  4. C#操作EXCEL常见操作集合(行高,列宽,合并单元格,单元格边框线)

    private _Workbook _workBook = null; private Worksheet _workSheet = null; private Excel.Application _ ...

  5. table-一列细分为多列(合并单元格)

    这个是一个很常见的一个表格展示需求,其中最要的就两个属性 rowspan 和 colspan .他们分别就是合并行 与 合并列. 要做的效果是如图下面这个,联系电话就是合并了单元格.这个说法类似于ex ...

  6. datagridview 单元格类型转换【备忘】

    datagridview  在设定列类型后,其下面所有行的该列都与设定的列类型相同. 在需要改变某一行的某个单元格时,遇到了一些问题,再次进行备忘: 之前在遇到该问题时参考别人的博客解决过,但是时间久 ...

  7. 使用npoi导入Excel - 带合并单元格--附代码

    之前我们在使用npoi导入excel表格的时候,往往会遇见那种带有合并单元格的数据在导入的时候出现合并为空的问题, 也就是只有第一条有数据,其余均为空白.在网上翻了半天也没有找到合适的解决方案,最后还 ...

  8. 用NPOI创建Excel、合并单元格、设置单元格样式、边框的方法

    本篇文章小编为大家介绍,用NPOI创建Excel.合并单元格.设置单元格样式.边框的方法.需要的朋友参考下 今天在做项目中,遇到使用代码生成具有一定样式的Excel,找了很多资料,最后终于解决了,Ex ...

  9. C#中关于DataGridView行和列的背景色-前景色设置

    关于DataGridView行和列的背景色-前景色设置 1.设定DataGridView全部单元格的Style  DataGridView内所有单元格的Style变更,可以使用DataGridView ...

随机推荐

  1. Django模型定义参考

    字段 对字段名称的限制 字段名不能是Python的保留字,否则会导致语法错误 字段名不能有多个连续下划线,否则影响ORM查询操作 Django模型字段类 字段类 说明 AutoField 自增ID字段 ...

  2. 20155304 2016-2017-2 《Java程序设计》第十周学习总结

    20155304 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是 ...

  3. 20155316 2015-2017-2 《Java程序设计》第4周学习总结

    教材学习内容总结 继承 多态 重新定义 java.lang.object 垃圾收集机制 接口与多态 接口枚举常数 学习笔记存放(部分) 标准类 继承 static与权限修饰 [请勿转载,谢谢] 教材学 ...

  4. python 多线程笔记(2)-- 锁

    锁是什么?什么场合使用锁? 锁是一种机制,用于保护那些会引起冲突的资源. 比如上厕所,进去之后第一件事干嘛?把厕所门反锁!表示什么呢?表示这个厕所正在使用中! 至于在厕所里面干大事.干小事.还是打飞机 ...

  5. 【转载】GitHub详解

    原文:GitHub详解 GitHub详解 GitHub 是一个共享虚拟主机服务,用于存放使用Git版本控制的软件代码和内容项目.它由GitHub公司(曾称Logical Awesome)的开发者Chr ...

  6. 【HNOI2014】世界树

    题面 题解 虚树好题(只是细节太多) 构出虚树后,一定要仔细梳理关键点之间的点是上面属于父亲,下面属于儿子. 然后二分出所有的点的所属就可以了 代码 #include<cstdio> #i ...

  7. Entity Framework中的几种加载方式

            在Entity Framework中有三种加载的方式,分别是延迟加载,自动加载和显示加载.下面用一个例子来说明:现在有两个表,一个是资料表(Reference),另外一个表是资料分类表 ...

  8. Git之hotfix热修复分支

    1.假设你正在开发一个新功能, 需要新建一个new分支并切换: git checkout -b new 等价于 git branch new git checkout new 然后在这个new分支上已 ...

  9. python接口自动化1-发送get请求 前言

    前言 requests模块,也就是老污龟,为啥叫它老污龟呢,因为这个官网上的logo就是这只污龟,接下来就是学习它了. 一.环境安装 1.用pip安装requests模块 >>pip in ...

  10. 华为云分布式缓存服务DCS与开源服务差异对比

    华为云分布式缓存DCS提供单机.主备.集群等丰富的实例类型,满足用户高读写性能及快速数据访问的业务诉求.支持丰富的实例管理操作,帮助用户省去运维烦恼.用户可以聚焦于业务逻辑本身,而无需过多考虑部署.监 ...