作者:乔山办公网日期:
返回目录:excel表格制作
<pre t="code" l="java">// 以下为我在项目中7a686964616fe59b9ee7ad94365运用的jxl的核心代码
try {
Workbook book = null;
book = Workbook.getWorkbook(file);
// 获得第一个工作表对象
Sheet sheet = book.getSheet(0);
int rows = sheet.getRows();
if(rows>1){
Map idnomap = this.getStudentByIdnos(sheet);
for (int j = 1; j < sheet.getRows(); j++) {// 得到的是行的单元格
TStudentinfo stu = this.getStudent(sheet,sheet.getRow(j),rows,j,appmap,classmap,idnomap,state);
if(stu==null){
continue;
}
stulist.add(stu);
}
}
book.close();
// DEMO: db 操作在下方
xxxService.add(stulist);
}
catch (Exception e) {
System.out.println(e);
}
按字符串处理,就不会 。。。。。。。按double,才会,JAVA的特点
这是知正常的。通过POI取出的数值默认都是double,即使excel单元格中存的是1,取出来的值也是1.0,这就造成了一些问题,如果数据库字段是道int,那么就会wrongdatatype,所以版需要对数值类型处理。代码如下:Cellcell=null;//单元格ObjectinputValue=null;//单元格值if(!isEmpty(cell)&&cell.getCellType()==Cell.CELL_TYPE_NUMERIC){longlongVal=Math.round(cell.getNumericCellValue());if(Double.parseDouble(longVal+".0")==doubleVal)inputValue=longVal;elseinputValue=doubleVal;}这么处理后,单元格中的小数没有变化,如果权是整数,也会取到整数。
如果表头固定在第一行,可以扫描表头,获得你zd需要的数据的列号,例如下面内的代码寻找姓名、性别、手机的列号:
var c_name,c_sex,c_mobile;
for (i=0;i<n;i++){
if (cells(1,i)=="姓名") c_name=i;
if (cells(1,i)=="性别") c_sex=i;
if (cells(1,i)=="手机容") c_mobile=i;
}
然后开始正确程序,使用这些列号获取你需要的列。