excel 导入到 Dataset,本地测试 没有问题,因朋友的机器有IIS 就测试了下,测试结果均为 无法找到表 0。朋友电脑有装excel。求解决方案! 百度没找到答案。

解决方案 »

  1.   

    DataSet里没有表,在使用DataSet[0]之前先判断表的个数是否大于0
      

  2.   

    那是你异常处理没做好,EXCEL有版本问题,看你的驱动和Exel版本是否相同
      

  3.   

    那就检查一下你的excel是不是excel2003的,而你朋友的那个上面是如excel2007的,或是其他情况,这个就看你的导入代码了。string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1'";类似这样的设置不能向上兼容造成的。
    还有这样的,是不是excel表名问题?? strExcel = string.Format("select * from [{0}$]", sheetName);
      

  4.   


          strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +                  "Data Source=" +  strFileName + ";" +                  "Extended Properties=Excel 8.0;";              OleDbDataAdapter ExcelDA = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);这是我的代码,还有我跟朋友的EXCEL版本是2003
      

  5.   

    格式化表名而已,你那个表名是什么?是Sheet1不是??
      

  6.   

    在读取dataset的地方
    前面加个语句
    if(ds!=null&&ds.Tables.Count<1)
    Response.Write("<script>alert('玛德,没获取到数据,挂了');</script>");
    你编译后再去试试。如果打出这句话,说明是获取数据问题了啊
      

  7.   


    if(ds==null || ds!=null&&ds.Tables.Count<1)
    Response.Write("<script>alert('玛德,没获取到数据,挂了');</script>");
      

  8.   

     // xlsx
     connStr = "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + newName +
      ";Extended Properties='Excel 12.0 Xml; HDR=YES; IMEX=1'";
              
     //xls 
     connStr = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + newName +
     ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";  
     //检查连接语句..可能是excel版本不一致//检查下 表格的名称 是否不是sheet  尽量不要写死 一下是动态获取的名称代码
    DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    var tableName = dt.Rows[0][2].ToString().Trim();
    var str1 = string.Format("Select * from [{0}]", tableName+"A:F");  
      

  9.   

      你朋友是什么操作系统?win2003和win2008是有差别的
      

  10.   

    看一下是不是你朋友的电脑的Excel版本和项目上的一样?
      

  11.   

    我遇到过报一样的错,但或许各数据源的解决方法并不一定一致吧,仅供参考。无法找到表0 的意思就是无法找到第 0 个表,也就是说 DataSet 中的表未始化,或者其中根本没有表。
    表0 不是说表名叫表0,此时 0 是一个索引值
    老以前,我们项目中有出错,是因为 Framework 或其他类中一些返回值不够规范导致的。试想,一个签名为返回 DataTable 类型的方法却返回了 null,就导致没有表。
      

  12.   

    贴一下你和你朋友机器配置,操作系统不同(特别是32位于64位),office不同都可能有影响
      

  13.   

    用老一些版本的office插件试试
      

  14.   

    个人感觉应该是sheet标签出问题了
      

  15.   

     protected void Button1_Click(object sender, EventArgs e)
        {
           
                 string strSheetName = "sheet1";
            string filePath = "";
            string getErrMsg = "";
            DataSet excelDs = new DataSet();
            //从Excel读取数据  
            filePath = FileUpload1.PostedFile.FileName;
            string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;IMEX=1'";
            OleDbConnection excelConn = new OleDbConnection(connString);
            excelConn.Open();
            OleDbDataAdapter ExcelDA = new OleDbDataAdapter("SELECT * FROM [888888$] ", excelConn);
            try
            {
                ExcelDA.Fill(excelDs, "[888888$]");
            }
            catch (Exception err)
            {
                Response.Write(err.Message);
            }
            finally
            {
                excelConn.Close();
                excelConn = null;
            }
            //将数据写入数据库  
            if (excelDs.Tables[0].Rows.Count != 0)
            {
                string connectionString = "server=.;uid=sa;password=123456;database=LiXi";
                string sql = "";
                SqlConnection sqlConn = new SqlConnection(connectionString);
                SqlCommand myCommand = new SqlCommand();
                sqlConn.Open();
                myCommand.Connection = sqlConn;
                myCommand.CommandType = CommandType.Text;
                SqlTransaction myTrans = sqlConn.BeginTransaction();
                myCommand.Transaction = myTrans;
                String dingshu = "";
                String fenjian = "";
                String chebuding = "";
                try
                {
                    for (int i = 0; i < excelDs.Tables[0].Rows.Count; i++)
                    {
                        
                        String BuMing = excelDs.Tables[0].Rows[i]["部门"].ToString();
                       
                       
                        String XingMing = excelDs.Tables[0].Rows[i]["姓名"].ToString();
                        int DJHaoMan = int.Parse(excelDs.Tables[0].Rows[i]["登记号码"].ToString());
                      
                        String time = excelDs.Tables[0].Rows[i]["日期时间"].ToString();
                        String ZhuangTai = excelDs.Tables[0].Rows[i]["记录状态"].ToString();                  
                        sql = "insert into JiLu(BuMen,XingMing,DJHaoMan,Time,ZhuangTai) values('" + BuMing + "','" + XingMing + "'," + DJHaoMan + ",'" + time + "','" + ZhuangTai + "')";
                        myCommand.CommandText = sql;
                        myCommand.ExecuteNonQuery();                }
                    myTrans.Commit();
                }
                catch (Exception ex)
                {
                    getErrMsg = ex.Message.ToString();
                    Response.Write(ex.Message.ToString());
                    myTrans.Rollback();
                }
                finally
                {
                    sqlConn.Close();
                    sqlConn = null;
                }        }
        }注:
    SELECT * FROM [888888$]   888888为excel表名。
    如:excelDs.Tables[0].Rows[i]["部门"].ToString();为excel表中的列名。
    这是excel2003版本的。
      

  16.   

    这个我碰到过,分全给我把,包你解决!
    原因是本地测试是本地有EXCEL文件,放到IIS上找不到EXCEL文件,所以要先把这个文件上传到服务器,在读取这个文件!再读取SHEET里的数据,OVER!
      

  17.   

    yes
    0报错你就换成1看哈子嘛,再者你调试调试呗
      

  18.   

    ntfs文件权限问题。
    右击web目录,选择属性-安全-编辑-添加everyone完全控制权限,覆盖子目录
      

  19.   

    代码健壮性不强错误原因是DataSet 中没有 DataTable应先判断 是否存在 DataTable 在做后续操作表名也不应该固定为[Sheet1$]应该先查询结构,然后再处理
      

  20.   

    1.服务器是否有要打开的EXCEL表。(如果没有,请COPY过去)
    2.服务器上的EXCEL表SHEET1是否存在 (如果不对请规范命名)

    3.程序中是否将EXCEL的路径写死 (如果有写死请纠正)

    4.IIS用户是否有打开服务器EXCEL文件的权限(请赋EXCEL权限)
    5.其它原因待补充