【问题标题】:Listing excel tables with OleDbConnection::GetOleDbSchemaTable()使用 OleDbConnection::GetOleDbSchemaTable() 列出 excel 表
【发布时间】:2013-12-23 17:08:32
【问题描述】:

以下 PowerShell sn-p 将通过OleDbConnection.GetOleDbSchemaTable() 列出 Excel 电子表格中的所有工作表和命名范围:

$file = "C:\Users\zippy\Documents\Foo.xlsx";
$cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`"$($file)`";Extended Properties=`"Excel 12.0 Xml;HDR=YES`";";


$cn = New-Object System.Data.OleDb.OleDbConnection $cnStr;
$cn.Open();

# to list the sheets
$worksheets = $cn.GetOleDbSchemaTable([System.Data.OleDb.OleDbSchemaGuid]::Tables,$null);
$cn.Close();
$cn.Dispose();
$worksheets | Format-List;

但是,这不会列出表(在 Excel 2003 中称为列表)或引用列表的命名范围。

如果我传递一个类型为过程或视图的OleDbSchemaGuid,我会得到一个带有Operation is not supported for this type of object. 消息的MethodInvocationException

是否可以通过调整连接字符串或限制参数来列出表?

【问题讨论】:

  • 我在 C# WinForms 应用程序中遇到了类似的问题。我知道这是不同的代码,但这仍然可能会有所帮助。调用 GetOleDbSchemaTable 并查看表时,您会注意到您获得的不仅仅是工作表 - 它还返回内部使用的表,如过滤表等。我看到“这种类型的对象不支持操作" 尝试使用 Excel 内部表格执行操作时的消息。看到这篇文章...stackoverflow.com/questions/10654433/…

标签: excel ado.net oledb


【解决方案1】:

试试这个简单的来源:

  using (var connection = (OleDbConnection)GetConnection())
        {
            connection.Open();

            var dt = connection.GetSchema("TABLES");
            var list=dt.Select().Where(w => w["TABLE_NAME"].ToString()).ToList();

            //TODO:
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-24
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多