2012-01-17 11 views
5

Ya hice una búsqueda aquí en SO, en this, this, this y más, pero no tengo ni idea, así que tendré que preguntarles chicos.¿Cómo verificar si un archivo es una hoja de cálculo Excel válida?

Estoy tratando de abrir un archivo de Excel a través de Interop, y tengo Office 2007 instalado, entonces estoy usando Microsoft.Office.Interop.Excel versión 14.0.

Cuando intento abrir un archivo válido xls, todo funciona bien.

Pero si intento abrir un archivo no válido (como un mapa de bits o un ejecutable) a través de Interop, Excel lo abre sin quejarse ni advertir.

¿Cómo puedo detectar que Excel tiene cargado un archivo de libro no válido, sin bloquear con una alerta?

Estoy tratando de escribir una prueba unitaria de mi lector de objetos de Excel. Uno de los casos es tratar de abrir un archivo no válido.

algo de código para ayudar: aplicación de creación:

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

libro de apertura:

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

EDIT: sólo para añadir 1 más información: Excel carga el archivo no válido. Si DisplayAlerts se establece en true, se queja (abrir un cuadro de diálogo) informar el libro parece estar dañado, pero si DisplayAlerts se establece en false, se carga el archivo tal y como a continuación:

Excel Loads Invalid File

+0

verificación de un sentido válido para archivos ext .csv o xls parece ser el enfoque más simple ... – MethodMan

+0

Puede ver si la propiedad _app.Ready pasa a ser falso al cargar un archivo no válido. Solo un pensamiento, no lo he probado. – Tod

+0

@DJ KRAZE, ya compruebo la extensión antes de cargar el archivo. Pero, ¿qué pasa si alguien cambia la extensión del archivo e intenta cargar un .exe en su lugar? – Machado

Respuesta

8

que acaba de terminar utilizando otro enfoque: los libros de Excel tienen una propiedad denominada FileFormat. Cuando Excel abre un archivo no válido, se establece el formato de archivo a uno de los valores de enumerador de texto:

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

Y dentro de esta enumeración Excel tiene los archivos válidos (válido para mi propósito):

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

así que terminé usando un simple "or" para filtrar el tipo de archivo que me gustaría importar:

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

Y ahora yo t funciona Gracias por su ayuda chicos, me pusieron en la dirección correcta.

3

Puede comprobar el conteo del libro de trabajo antes y después de cargar el archivo. Si ambos recuentos son iguales, el archivo no se pudo cargar.

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

¡Agradable! ¡Pero cuente las sumas 1, porque TCHAN RAM! Excel carga el archivo no válido.Pero no se ve como una hoja de cálculo, porque Excel carga el contenido del archivo de manera extraña. Mira la edición, por favor. – Machado

Cuestiones relacionadas