【问题标题】:GetOleDbSchemaTable(OleDbSchemaGuid.Columns, null) errors outGetOleDbSchemaTable(OleDbSchemaGuid.Columns, null) 出错
【发布时间】:2013-10-25 15:43:10
【问题描述】:

使用以下代码在 C# 中读取特定 Excel 工作簿的列时出现错误:

        DataTable dtCols = new DataTable();
        try
        {
            dtCols = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, null);
        }

System.Data.OleDb.OleDbException (0x80004005):Microsoft Jet 数据库引擎找不到对象“Sheet1$_”。确保对象存在并且正确拼写其名称和路径名。

我的工作表名称是名称“Sheet1”,但显然系统正在尝试读取架构中隐藏表之一的列 - 请注意该工作表名称末尾有一个下划线。

如何防止该行代码出错?有没有办法利用限制参数来解决这个问题?

谢谢。

【问题讨论】:

    标签: c# .net excel import oledb


    【解决方案1】:

    您需要在方法调用中指定工作表,否则它不知道要加载哪些列。它正在加载 Sheet1$ 作为默认值,这在您的电子表格中不存在。

    试试,

        var list = new List<string>();
        DataTable dtColumns = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new string[] { null, null, workSheetName, null });
        foreach (DataRow dr in dtColumns.Rows)
            list.Add(dr[3].ToString());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      相关资源
      最近更新 更多