读取Excel文件的时候,如果我有"编号"这一列,要求是数字类型的数据,但是可能有误操作将某一行中数据写成了文本类型,那么在读取Excel文件的时候,我已经用了rs.getString(col);的方法,为什么原来文本类型数据的地方读出来是null。
比如说,我"编号"这一列的数据如下:
编号
1
2
3a
4
...
此时,我用rs.getString(col);方法读取并显示的时候,他会显示原本该3a的地方为null。
那么,我想原样读取这些数据,也就是说,我希望读出来的数据仍然是1 2 3a 4要怎么办呢?望高手指点。
比如说,我"编号"这一列的数据如下:
编号
1
2
3a
4
...
此时,我用rs.getString(col);方法读取并显示的时候,他会显示原本该3a的地方为null。
那么,我想原样读取这些数据,也就是说,我希望读出来的数据仍然是1 2 3a 4要怎么办呢?望高手指点。
楼主【txqiu256】截止到2008-06-25 11:50:56的历史汇总数据(不包括此帖):
发帖数:0 发帖分:0
结贴数:0 结贴分:0
未结数:0 未结分:0
结贴率:-------------------结分率:-------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
不对吧
給些 自己 写的代码 希望能帮助你package com.suypower.djbxt.electrician.system.servlet;import java.io.FileInputStream;import java.io.IOException;
import java.sql.Connection;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.suypower.djbxt.sysmanger.DBconnect;public class ExcelToDbServlet extends HttpServlet{ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String filepath=new String(request.getParameter("okf").getBytes("iso8859-1"),"GBK");
if(filepath.equals(null))
{
System.out.println("地址不正确");
}else{
System.out.println(filepath);
}
this.ExcelToJava(filepath);
}
private String ExcelToJava(String xlsfile)
{
String bodyid=null;
String theorygrade=null;
String theorytotalgrade=null;
String sql=null;
Connection con=null;
HSSFWorkbook work=null;
try{
FileInputStream fIn=new FileInputStream(xlsfile);
work=new HSSFWorkbook(fIn);
}catch(Exception e)
{
e.printStackTrace();
}
HSSFSheet sheet=work.getSheetAt(0);
HSSFRow row=null;//行对像;
HSSFCell cell=null;//列对像;
int rowNum,cellNum;
rowNum=sheet.getLastRowNum();//得到总行数
System.out.println("总行数为"+rowNum);
try{
con=new DBconnect().getConection(); for(int i=1;i<=rowNum;i++)
{
System.out.println("第"+i+"行");
row=sheet.getRow(i);//
//得到身份证号
cell=row.getCell((short)3);
String bodyida=this.chickCell(cell);
bodyid=bodyida.substring(1);
System.out.println(bodyid);
//理论成绩
cell=row.getCell((short)8);
theorygrade=this.chickCell(cell);
System.out.println(theorygrade);
//////
//实操成绩
cell=row.getCell((short)7);
theorytotalgrade=this.chickCell(cell);
System.out.println(theorytotalgrade);
sql="update tb_train set state='待受理',theorygrade="+theorygrade+",theorytotalgrade="+theorytotalgrade+" where bodyid='"+bodyid+"' and licencetypes='高压' and trainyear='"+2007+"' and trainsheduledtime='"+4+"' and city='连云港'";
System.out.println("sql:"+sql);
this.JavaToDB(con, sql);
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(con!=null){
try{
con.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}
return null;
}
private void JavaToDB(Connection con,String sql)
{
try
{
Statement state=con.createStatement();
state.executeUpdate(sql);
}catch(Exception e)
{
System.out.print("JavaToDB数据导入出现错误");
e.printStackTrace();
}finally{
}
}
private String chickCell(HSSFCell cell)
{
// 判断是否为String型
String all="";
if(cell.getCellType()==cell.CELL_TYPE_STRING){
all=cell.getStringCellValue();
//all=all.replaceAll(",","").trim();
all.trim();
}else{
//判断是否为数值型
if(cell.getCellType()==cell.CELL_TYPE_NUMERIC){
//判断是否为日期型
if(HSSFDateUtil.isCellDateFormatted(cell))
{
Date date=cell.getDateCellValue();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
all=formatter.format(date);
}else{//一般数值型
double d=cell.getNumericCellValue();
all=Double.toString(d);
}
}
}
return all;
}
}
还有2楼3楼的朋友,我用Excel打开后,将"编号"那一列的值设置为"文本"类型的,可是读取的时候,发现读出来的结果还是1.0,2.0,null,4.0。原来以为是驱动的问题,后来发现还是不能解决。
望看到此贴的高手指点。