2012-01-17 16 views
5

Ho già fatto qualche ricerca qui su SO, su this, this, this e altro, ma non ho idea, quindi dovrò chiederti ragazzi.Come verificare se un file è un foglio di calcolo Excel valido?

Sto tentando di aprire un file di Excel tramite Interop e ho installato Office 2007, quindi sto utilizzando Microsoft.Office.Interop.Excel versione 14.0.

Quando si tenta di aprire un file xls valido, tutto funziona correttamente.

Ma se provo ad aprire un file non valido (come una bitmap o un eseguibile) tramite Interop, Excel lo apre senza lamentarsi o avvertire.

Come posso rilevare che Excel ha caricato un file di cartella di lavoro non valido, senza bloccare un avviso?

Sto provando a scrivere un test unitario del mio lettore di oggetti Excel. Uno dei casi è provare ad aprire un file non valido.

del codice per aiutare: Creazione Applicazione:

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

apertura cartella di lavoro:

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

EDIT: solo per aggiungere 1 ulteriori informazioni: Excel carica il file non valido. Se DisplayAlerts è impostata su true, si lamenta (aprire una finestra di dialogo) informare la cartella di lavoro sembra essere danneggiato, ma se DisplayAlerts è impostato su false, si carica il file così come di seguito:

Excel Loads Invalid File

+0

un modo per controllare se il file valido ext .csv o xls sembra essere l'approccio più semplice ... – MethodMan

+0

Si può verificare se la proprietà _app.Ready diventa falsa quando si carica un file non valido. Solo un pensiero non l'ho provato. – Tod

+0

@DJ KRAZE, ho già controllato l'estensione prima di caricare il file. Ma cosa succede se qualcuno cambia l'estensione del file e prova a caricare invece un exe? – Machado

risposta

8

Ho appena finito con un altro approccio: le cartelle di lavoro di Excel hanno una proprietà chiamata FileFormat. Quando Excel apre un file non valido, si imposta il formato di file da uno dei valori di enumerazione di testo:

XlFileFormat.xlTextMac 
    XlFileFormat.xlTextMSDOS 
    XlFileFormat.xlTextPrinter 
    XlFileFormat.xlTextWindows 

E dentro questa enumerazione Excel ha le file validi (valido per il mio scopo):

XlFileFormat.xlExcel12 
    XlFileFormat.xlExcel7 
    XlFileFormat.xlExcel8 
    XlFileFormat.xlExcel9795 

così ho finito con un semplice "or" per filtrare il tipo di file da importare:

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

e ora mi funziona Grazie per il vostro aiuto ragazzi, mi avete impostato nella giusta direzione.

3

È possibile controllare la cartella di lavoro conta prima e dopo aver caricato il file. Se entrambi i conteggi sono uguali, il file non è stato caricato.

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

Bello! Ma conta le somme 1, perché TCHAN RAM! Excel carica il file non valido.Ma non sembra un foglio di calcolo, perché Excel carica in modo strano il contenuto del file. Guarda la modifica, per favore. – Machado

Problemi correlati