使用OleDbConnection列出excel表:: GetOleDbSchemaTable()

时间:2012-05-05 17:42:37

标签: excel ado.net oledb

以下PowerShell代码段将通过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类型的过程或视图,我会收到MethodInvocationException消息为Operation is not supported for this type of object.

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

1 个答案:

答案 0 :(得分:0)

试试这个简单的来源:

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

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

            //TODO:
        }