2017-12-12 16 views
0

私はVisual Studio 2013 C#、EPPLus.dllを使用しています。 Excelにワークシートが含まれているかどうかを確認する機能があります。私が使用したコードは以下の通りです。この場合、ワークシートをチェックする前にEPPlusがExcelファイルのすべての内容をメモリにロードしています。EPPlus OfficeOpenXmlチェックワークシートがファイル全体をメモリにロードせずに存在する

他の方法でこれを減らすことはできますか?私は多くのシートを持つ大規模なExcelファイルをたくさん読んでいます。私は指定されたシート名でファイルを取得する必要があります。

internal static bool SheetExist(string fullFilePath, string sheetName) 
    { 
     using (var package = new ExcelPackage(new FileInfo(fullFilePath))) 
     { 
      return package.Workbook.Worksheets.Any(sheet => sheet.Name == sheetName); 
     } 
    } 
+0

excelパッケージにファイルを読み込まない限り、excelパッケージからシートのリストを取得することはできません。 ExcelPackageクラスのコンストラクタを見てください。ファイルを直接ロードすることも、ファイルをストリームとしてロードすることもできます。 –

答えて

0

OleDbConnectionを使用して代替案が見つかりました。これを使用すると、すべてのデータをロードせずにシート情報を取得できます。

internal static bool SheetExist(string fullFilePath, string sheetName) 
    { 
     var connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=NO'",fullFilePath) 
     var excelSheetName = "'" + sheetName + "$'"; 
     using (OleDbConnection excelCon = new OleDbConnection(connString)) 
     { 
      excelCon.Open(); 
      try 
      { 
       var dtSheets = excelCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
       if (dtSheets == null) return false; 
       var sheetList = dtSheets.Select().ToList(); 
       return sheetList.Any(sheet => sheet["TABLE_NAME"].ToString() == excelSheetName); 
      } 
      finally 
      { 
       excelCon.Close(); 
      } 
     } 
    }