2016-08-22 10 views
1

OleDbConnectionを使用して、.xlsxブックからデータを取得しています。ワークシートのリストを取得するときに、それらのどれかが隠されているかどうかはわかりません。これは、 "Sheet1 $ _"のように、アンダースコアを使って名前を終えることで使用されていました。これが今隠されているかどうかを知る方法を知っていますか?.xlsxのOleDbConnection.GetOleDbSchemaTableは、非表示のワークシートを識別しません。

   using (var connection = 
       new OleDbConnection(string.Concat("Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Data Source=", 
        fileName, 
        ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""))) 
      using (var command = new OleDbCommand("", connection)) 
      { 
       connection.Open(); 
       var listedSheets = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
        new object[] {null, null, null, "Table"}); 

       if (listedSheets != null) 
       { 
        var sheetNames = new List<string>(listedSheets.Rows.Count); 

        foreach (DataRow row in listedSheets.Rows) 
        { 
         sheetNames.Add(row[2].ToString()); 
        } 

        return sheetNames; 
       } 

       return new List<string>(); 
      } 
+0

私はあなたが非表示のシートを得るか、混乱していますが、あなたは隠されたとしてフラグ彼らにあなたのコードをしたい、またはあなたがすべてでそれらを得ることはありませんか? – Gouda

+0

すべてのシートは、どのシートが隠されているかを知らさずに返されます。 –

答えて

-1

私はそれは関係なく、エクセル、アクセス、または何か他のものであるかもしれないデータソースをDataTableオブジェクトを返すのでGetOleDbSchemaTableがここ

最良の選択肢ではないと思います。だから、それはあなたが

手順を提出あなたのエクセル上で完全な制御を持つようにExcelのCOMコンポーネントを使用することができ、

むしろExcelシートのプロパティのいずれかを認識していない

  1. Microsoft ExcelのCOM参照を追加します。プロジェクトに
  2. は、Excel = Microsoft.Office.Interop.Excelを使用して、アプリケーション

    に以下の行を追加します。お使いのVisual Studioに依存してもよい正しいCOM参照を選択

  3. は、ロードされたシート

サンプルコード

private static Excel.Workbook MyBook = null; 
private static Excel.Application MyApp = null; 
private static Excel.Worksheet MySheet = null; 
static void ReadExcel() 
{ 
    MyApp = new Excel.Application(); 
    MyApp.Visible = false; 
    MyBook = MyApp.Workbooks.Open("C:\\test.xlsx"); 
    MySheet = (Excel.Worksheet)MyBook.Sheets[1]; 

    if (MySheet.Visible == Excel.XlSheetVisibility.xlSheetHidden) 
    { 
     //handle hidden sheet here 
    } 
} 

ノートのVisible性質を読みますバージョン また

Check this SO questionThis article is a good reference

+0

あなたが投票を辞退すると、回答を改善するためのコメントを正当化する必要があります – Gouda

関連する問題