读取Excel文件的时候,如果我有"编号"这一列,要求是数字类型的数据,但是可能有误操作将某一行中数据写成了文本类型,那么在读取Excel文件的时候,我已经用了rs.getString(col);的方法,为什么原来文本类型数据的地方读出来是null。
比如说,我"编号"这一列的数据如下:
编号
1
2
3a
4
...
此时,我用rs.getString(col);方法读取并显示的时候,他会显示原本该3a的地方为null。
那么,我想原样读取这些数据,也就是说,我希望读出来的数据仍然是1 2 3a 4要怎么办呢?望高手指点。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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
      

  2.   

    平时读Excel表时没有碰到过这样的问题,excel中都是以字符串的形式存在的。
      

  3.   

    excel 读取数据 是 rs.getString("");嘛
    不对吧
    給些 自己 写的代码 希望能帮助你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;
    }
    }
      

  4.   

    谢谢楼上的,之前我也用poi读过的,不过发现poi对空值的处理不是很好,所以想用最原始的方法来读的。
    还有2楼3楼的朋友,我用Excel打开后,将"编号"那一列的值设置为"文本"类型的,可是读取的时候,发现读出来的结果还是1.0,2.0,null,4.0。原来以为是驱动的问题,后来发现还是不能解决。
    望看到此贴的高手指点。