如题winform中,导入一个Excel并把他保存为dataset时,出现“外部表不是预期的格式”
代码如下:
  string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + path + ";Extended Properties=\"Excel 8.0;IMEX=1\
            OleDbConnection cnnxls = new OleDbConnection(strCon);
            cnnxls.Open();
            DataTable dtSheetName = cnnxls.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
            string[] strTableNames = new string[dtSheetName.Rows.Count];
            for (int k = 0; k < dtSheetName.Rows.Count; k++)
            {
                strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
            }
            DataSet ds = new DataSet();
            OleDbConnection conn = new OleDbConnection(strCon);
            string sql = "select * from ["+strTableNames[0]+"]";
            OleDbDataAdapter myCommand = new OleDbDataAdapter(sql, strCon);
            myCommand.Fill(ds);-----当执行到这一步时,抛出“外部表不是预期的格式”

解决方案 »

  1.   

    奇怪的是,当我手动打开这个Excel,然后再跑这段程序,就可以读取到Excel中的数据
      

  2.   


      string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";"
                            + "Extended Properties='Excel 8.0'";
                    Excel.Application app = null;
                    string sheetName = string.Empty;
                    app = new ApplicationClass();
                    app.Workbooks.Open(fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                    //得到活动的工作目录
                    Sheets sheets = app.Worksheets;                if (sheets != null && sheets.Count > 0)
                    {
                        for (int i = 1; i <= sheets.Count; i++)
                        {
                            sheetName = ((Excel._Worksheet)sheets.get_Item(i)).Name;//得到活动工作簿名称
                            OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + sheetName + "$]", strCon);
                            oada.Fill(ds_Card);
    }
    }我在这里没有发现楼主说的问题!
      

  3.   

    这个功能导入Excel是不使用office组件的。2楼说Excel格式不符合?有没有好的处理办法