首页 新闻 搜索 专区 学院

c# oledb 读取excel失败

0
悬赏园豆:20 [已解决问题] 解决于 2016-11-25 14:53

 string connStr = "";
            string fileType = System.IO.Path.GetExtension(fileName);
            if (fileType == ".xls")
            {
                connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
            }
            else
            {
                //connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
                connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
            }
            string sql_F = "Select * FROM [{0}]";
            OleDbConnection conn = null;
            OleDbDataAdapter da = null;
            DataTable dtSheetName = null;
            DataSet ds = new DataSet();
                conn = new OleDbConnection(connStr);
                conn.Open();
                string sheetName = "";
           dtSheetName= conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
           da = new OleDbDataAdapter();
                for (int i = 0; i < dtSheetName.Rows.Count; i++)
            {
                  sheetName = (string)dtSheetName.Rows[i]["TABLE_NAME"];
                    if (sheetName .Contains("$") && !sheetName .Replace("'", "").EndsWith("$"))
                    {
                        continue;
                    }
                    da.SelectCommand=new OleDbCommand(string.Format(sql_F,sheetName),conn);
                    da.Fill(ds, string.Format("ds{0}", i));
                   //  DataSet dsItem = new DataSet();
                   // da.Fill(dsItem);
                   
                   //ds.Tables.Add(dsItem.Tables[0].Copy());

读取Excel的时候,报错,提示是:外部表不是预期的格式,但是我如果打开了该excel文档后,又能正常读取了,这个是什么原因?该怎么解决?

 


           

时光cc的主页 时光cc | 初学一级 | 园豆:50
提问于:2015-11-16 17:28
< >
分享
最佳答案
0

估计还是excel格式的问题,调试的时候注意查看下后缀

收获园豆:20
Sky_Fly | 菜鸟二级 |园豆:280 | 2015-11-17 09:00

excel格式没有问题啊,我先打开excel ,然后这个程序就能正常运行

时光cc | 园豆:50 (初学一级) | 2015-11-17 09:44

@时光cc: 打开了excel,文件已经被独占了,你程序还能打开这个文件?

xmj112288 | 园豆:126 (初学一级) | 2015-11-18 13:25

@2727551894: 对的,奇怪的地方就是这里,我不打开excel文件,程序跑到  conn.Open();那里就提示外部表不是预期的格式,打开该文件就没有这个提示。

时光cc | 园豆:50 (初学一级) | 2015-11-18 13:53
其他回答(2)
0

是标准的Excel不?建议新建一个新的xls文件试试

jello chen | 园豆:7096 (大侠五级) | 2015-11-16 19:18
0

可以考虑用npoi操作excel   一个很不错的第三方dll

BetterCoder | 园豆:45 (初学一级) | 2015-11-19 09:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册