2012-05-05 8 views
2

次のPowerShellスニペットはOleDbConnection.GetOleDbSchemaTable()を経由してExcelスプレッドシート内のすべてのワークシートや名前付き範囲を一覧表示されます:リストは、OleDbConnectionオブジェクトとテーブルをエクセル:: GetOleDbSchemaTableメソッド()

$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を取得するには、接続文字列や制約のパラメータで微調整することにより、テーブルを一覧表示するには、このことは可能ですか?

+0

を私はC#のWinFormsのアプリケーションで同様の問題がありました。私はそれが異なるコードであることを知っていますが、それでも助けになるかもしれません。 GetOleDbSchemaTableを呼び出してテーブルを見ると、Worksheetsだけでなく、フィルタテーブルなどの内部的に使用されるテーブルも返されることに気付くでしょう。「このタイプのオブジェクトでは、操作はサポートされていません"Excelの内部テーブルを使用して操作しようとすると、メッセージが表示されます。この記事を見る... http://stackoverflow.com/questions/10654433/how-to-get-list-of-only-excel-worksheet-names-in-excel-using-oledb-filter-out-n – Jim

答えて

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: 
     } 
関連する問題