2012-01-17 18 views
5

私は既にここでSOを検索しました。thisthisthis以上ですが、手がかりがないので、皆さんにお尋ねしてください。ファイルが有効なExcelスプレッドシートかどうかを確認するにはどうすればよいですか?

Interop経由でExcelファイルを開こうとしていますが、Office 2007がインストールされているため、Microsoft.Office.Interop.Excelバージョン14.0を使用しています。

有効なxlsファイルを開こうとすると、すべて正常に動作します。

しかし、Interopで無効なファイル(ビットマップや実行可能ファイルなど)を開こうとすると、エクセルは警告や警告なしでファイルを開きます。

Excelで無効なブックファイルが読み込まれ、アラートをブロックせずに検出できますか?

私はExcelオブジェクトリーダーの単体テストを作成しようとしています。ケースの1つは、無効なファイルを開こうとすることです。

助けるためにいくつかのコード: アプリケーションの作成:

_app = new Application() 
     { 
      Visible = false, 
      DisplayAlerts = false,  // <-- I don't want to remove this. 
      AskToUpdateLinks = false, 
     }; 

ワークブックの開口部:

_workbooks.Open(filename); 
    _workbook = _workbooks.get_Item(1); // 1-based. 
    _worksheets = _workbook.Sheets; 

EDIT: わずか1より多くの情報を追加する:Excelは、無効なファイルをロードします。

Excel Loads Invalid File

+0

正当なファイルext .csvまたはxlsを確認するのが簡単です。 – MethodMan

+0

無効なファイルを読み込むときに_app.Readyプロパティがfalseになることがあります。ちょうど私はそれを試していないと思った。 – Tod

+0

@DJ KRAZE、ファイルをロードする前に拡張子をチェックしています。しかし、誰かがファイル拡張子を変更し、代わりに.exeをロードしようとするとどうなりますか? – Machado

答えて

8

私は別のアプローチを使用して終了:ExcelブックはFileFormatと呼ばれる性質を持っています。 Excelは、無効なファイルを開くと、テキストの列挙値のいずれかにファイル形式を設定します。

XlFileFormat.xlExcel12 
    XlFileFormat.xlExcel7 
    XlFileFormat.xlExcel8 
    XlFileFormat.xlExcel9795 
XlFileFormat.xlTextMac 
    XlFileFormat.xlTextMSDOS 
    XlFileFormat.xlTextPrinter 
    XlFileFormat.xlTextWindows 

そして、この列挙の内側にExcelが(私の目的のために有効な)有効ファイルを持っている

だから、私は、インポートしたいファイルの種類をフィルタするために、単純な「or」を使用して終了:

bool validFile = (f == XlFileFormat.xlExcel12 ) 
        || (f == XlFileFormat.xlExcel7 ) 
        || (f == XlFileFormat.xlExcel8 ) 
        || (f == XlFileFormat.xlExcel9795); 

、今うまくいく。あなたの助けをいただきありがとうございます、あなたは正しい方向に私を設定します。

3

あなたがチェックできます。DisplayAlertsがtrueに設定されている場合、それが破損しているように見えるが、DisplayAlertsがfalseに設定されている場合は、それだけで以下のようにファイルをロードするワークブックを通知する(ダイアログを開きます)不平を言いますファイルのロード前後のワークブックがカウントされます。両方のカウントが同じ場合、ファイルの読み込みに失敗しました。

int countBefore = _workbooks.get_Count(); 
_workbooks.Open(filename); 
int countAfter = _workbooks.get_Count(); 
if (countBefore == countAfter) { 
    // The file failed to load. 
} 
+0

ニース!しかし、カウントの合計1、TCHAN RAM! Excelが無効なファイルを読み込みます。Excelはファイルの内容を奇妙に読み込むため、スプレッドシートのようには見えません。編集を見てください。 – Machado

関連する問題