我做了一个功能,用Microsoft.Jet.Oledb.4.0访问excel,将Excel文件中的内容展示到DataGrid中,但是展示在DataGrid中后,出现如下的情况:单位代码   单位名称
           单位A 
           单位B 
2040130034 单位C 
2040134034 单位D 
2040138132 单位E
           单位F  
2040140324 单位G
2040140325 单位H
2040140329 单位M单位A B F 的单位代码显示不出来,观察后发现单位A B F的单位代码中含有字母,分别为:204011C074
、204011D074、204012F034。 估计可能是由于含有字母的缘故。有没有哪位能帮忙解决一下?

解决方案 »

  1.   

    讓excel中的單元格格式為字符串.然後讀.
      

  2.   

    讓excel中的單元格格式為字符串.然後讀.
    --------------------------------------
    正解!不知道什么原因就是读取不了int型。
      

  3.   

    嗯,是有这个问题,
    要是EXCEL数字里是('1234345)即字符型才行
      

  4.   

    讓excel中的單元格格式為字符串.然後讀.
    --------------------------------------
    是在Excel文件里面选中单元格后右键,选择单元格格式么?好象不行啊求助~~~
      

  5.   

    应该和excel单元格的格式没有关系,你能把代码粘出来么,可能是代码或者datagrid格式不符合要求。
      

  6.   

    private DataSet CreateDataSource(string ls_Sheet_name,string s1,string s2)
    {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
    "Data Source='"+filePath+"';"+
    "Extended Properties=Excel 8.0;";
    OleDbConnection conn = new OleDbConnection(strConn);
            //设定读取文件,选定起始位置
    OleDbDataAdapter myAdapter = new OleDbDataAdapter("SELECT * FROM ["+ls_Sheet_name+"$A"+s1+":D"+s2+"]", strConn);
    DataSet myDataSet = new DataSet();
    myAdapter.Fill(myDataSet);
    myAdapter.Dispose();
    conn.Close();
    conn.Dispose();
    return myDataSet;
    }
    这就是取数的过程,传递3个参数进来:Sheet的值ls_Sheet_name、起始的行号s1、终止的行号s2
    然后获取DataSet,回传。
      

  7.   

    选中excel的整列,然后设置成字符串格式。
      

  8.   

    1.修改EXCEL文件,设成字符格式
    2.使用Interop Com打开EXCEL,就是有点麻烦.
      

  9.   

    设成字符格式? 如何设置?选中Excel某列或者是某个单元格右键,选择单元格格式么?好象没用
      

  10.   

    连接字符串写成这样就可以了:
    string excelConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"";
    HDR=Yes是说Excel中的第一行是不是表头
    IMEX=1是说将Excel中的所有内容当作文本读取
    IMEX是很重要的,因为在用OLE读取Excel中的数据时需要有类型的转换。
    如果不设置IMEX读Excel时,如果在Excel中的某列中的数据中几个单元格是数字,而其他的是字符,则会根据该列中哪中格式比较多决定该列的数据类型,所以该列的一些单元格会被忽略,所以出现空白,
    也不知道说清楚了没有
    呵呵
    这也不是什么理论,是我在大量的实验中发现的规律
    lz可以参考一下
      

  11.   

    我写的把Excel中的数据读到DataTable的方法
    我们一般都只用Excel中的第一个Sheet,所以我只读第一个
    可以根据需要修改#region ReadExcelData 读Excel中的数据到DataTable
            string excelConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"";
            string excelSqlStr = "select * from [{0}]";        /// <summary>
            /// 读Excel中的数据到DataTable
            /// </summary>
            /// <param name="filePath"></param>
            /// <param name="fielName"></param>
            /// <returns></returns>        
            public DataTable ReadExcelData(string fileFullName)
            {
                OleDbConnection oleCn =new OleDbConnection();
                try
                {
                    string currConnStr = string.Format(excelConnStr, fileFullName);//连接字符串
                    oleCn.ConnectionString = currConnStr;                    
                    DataTable dt = new DataTable();
                    oleCn.Open();
                    string excelBookName = oleCn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null).Rows[0][2].ToString();
                    if(excelBookName!=string.Empty && excelBookName.Trim()!="")
                    {
                        string currSqlStr = string.Format(excelSqlStr, excelBookName);//sql字符串
                        OleDbCommand oleCmd = new OleDbCommand(currSqlStr, oleCn);
                        OleDbDataAdapter oleDda = new OleDbDataAdapter(oleCmd);
                        oleDda.Fill(dt); 
                       
                    }
                    oleCn.Close();                
                    return dt;
                }
                catch
                {
                    string errorMsg="Excel文件格式不对,请尝试用excel打开该文件检查内容并另存一下,确保成为正确的excel文件,再重新上传";
                    System.Web.HttpContext.Current.Response.Write("<script>alert('"+ errorMsg  +"')</script>");
                    //  HttpContext.Current.Response.End();
                    oleCn.Close(); 
                    return null;
                    
                    //throw;
                }
            }        /// <summary>
            /// 取Excel中第一个Sheet名
            /// </summary>
            /// <param name="currConnStr"></param>
            /// <returns></returns>
            private string GetExcelBookNames(string currConnStr)
            {
                OleDbConnection conn = new OleDbConnection(currConnStr);
                DataTable dt = new DataTable();
                conn.Open();
                dt = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
                conn.Close();            return dt.Rows[0][2].ToString();
            }
            #endregion