Mr_ALong 2022-07-30 22:21 采纳率: 77.8%
浏览 44
已结题

C#使用Oledb读取Excel数据的时候,总是读取不到数据

使用Oledb读取Excel数据的时候,总是读取不到数据 !而打开源文件另存一下就可以读取到,这是什么问题?Excel是xlsx文件
public static DataTable DBExcelToDataTable(string pathName, string sheetName = "")
    {
        System.Data.DataTable dt = new System.Data.DataTable();
        string ConnectionString = string.Empty;
        FileInfo file = new FileInfo(pathName);
        if (!file.Exists) { throw new Exception("文件不存在"); }
        string extension = file.Extension;
        switch (extension)                          // 连接字符串
        {
            case ".xls":
                ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=no;IMEX=1;'";
                break;
            case ".xlsx":
                ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathName + ";Extended Properties='Excel 12.0;HDR=no;IMEX=1;'";
                break;
            default:
                ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=no;IMEX=1;'";
                break;
        }
        System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(ConnectionString);
        try
        {
            con.Open();
            if (sheetName != "") //若指定了工作表名
            {
                System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("select * from [" + sheetName + "$] ", con);
                System.Data.OleDb.OleDbDataAdapter apt = new System.Data.OleDb.OleDbDataAdapter(cmd);
                try
                {
                    apt.Fill(dt);
                }
                catch (Exception ex) { throw new Exception("该Excel文件中未找到指定工作表名," + ex.Message); }
                dt.TableName = sheetName;
            }
            else
            {
                //默认读取第一个有数据的工作表
                var tables = con.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { });
                if (tables.Rows.Count == 0)
                { throw new Exception("Excel必须包含一个表"); }
                foreach (System.Data.DataRow row in tables.Rows)
                {
                    string strSheetTableName = row["TABLE_NAME"].ToString();
                    //过滤无效SheetName   
                    if (strSheetTableName.Contains("$") && strSheetTableName.Replace("'", "").EndsWith("$"))
                    {
                        System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("select * from [" + strSheetTableName + "]", con);
                        System.Data.OleDb.OleDbDataAdapter apt = new System.Data.OleDb.OleDbDataAdapter(cmd);
                        apt.Fill(dt);
                        dt.TableName = strSheetTableName.Replace("$", "").Replace("'", "");
                        break;
                    }
                }
            }
            return dt;
        }
        catch (Exception ee)
        { throw ee; }
        finally
        { con.Close(); }
    }

img

img

这是Excel中的文件和DataTable获取的数据

我打开Excel文件只需要保存一下,就可以读取到数据!

img

Excel文件是通过 HttpPostedFile 中的SaveAs上传上的,我不知道是否跟这个有关系

求解答!
  • 写回答

2条回答 默认 最新

  • IT技术分享社区 数据库领域优质创作者 2022-07-30 23:13
    关注

    首先文件要下载到本地,然后才可以进行读取

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月8日
  • 已采纳回答 7月31日
  • 创建了问题 7月30日

悬赏问题

  • ¥15 海洋可控源和大地电磁一维联合反演
  • ¥15 MFC多文档程序获取视图指针问题
  • ¥20 解体如何编写程序还有运行结果截图
  • ¥15 如何把matlabR2023遗传算法工具箱里面的各类选项对应的代码调出来呢?
  • ¥30 MDIGetActive() 获取活动view
  • ¥15 有数据,如何安装使用CLIP模型检索图片
  • ¥15 lingo代码报错无法运行,如何解决,如果能解决请提供能够运行的lingo代码
  • ¥100 读取 IMU BNO080 数据
  • ¥15 基于RTKLIB框架写的精密单点定位-AR
  • ¥15 PFENet的预训练权重