Pregunta

Bien, veamos si puedo hacer que esto tenga sentido.

Tengo un programa escrito que analiza un archivo de Excel y funciona bien. Uso lo siguiente para entrar en el archivo:

string FileToConvert = Server.MapPath(".") + "\\App_Data\\CP-ARFJN-FLAG.XLS";
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileToConvert + ";Extended Properties=Excel 8.0;";
OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();
//this next line assumes that the file is in default Excel format with Sheet1 as the first sheet name, adjust accordingly
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [CP-ARFJN-FLAG$]", connection);

y esto funciona bien. Pero cuando lo pruebo en el archivo real (me lo proporciona otro programa) recibo este error:

System.Data.OleDb.OleDbException: External table is not in the expected format. at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.OleDb.OleDbConnection.Open() at wetglobe.Page_Load(Object sender, EventArgs e)

PERO, aquí es donde creo que reside el problema. Si tomo ese archivo y lo guardo con mi Excel local, primero obtengo esta ventana emergente:

  

CP-ARFJN-FLAG.XLS puede contener características   que no son compatibles con el texto (Tab   delimitado). Quieres mantener el   libro de trabajo en este formato?

     
      
  • Para mantener este formato, que deja   fuera de cualquier característica incompatible, haga clic en   Sí.
  •   
  • Para conservar las funciones, haga clic en No.   Diez guarda una copia en el último Excel.   formato.
  •   
  • Para ver lo que podría perderse, haga clic en   Ayuda.
  •   

Si hago clic en No y luego lo guardo como el formato actual de Excel, el programa funcionará bien.

¿Supongo que esto se guarda en algún formato de Excel antiguo y loco?

Supongo que mis preguntas serían:

  • ¿Cómo puedo saber qué versión de Excel? guardado esto?
  • ¿Cómo puedo analizarlo en su actual estado?
  • -o bien- ¿Puedo guardarlo como una versión más reciente?

Espero que esté claro ... Gracias.

¿Fue útil?

Solución

Parece que el archivo XLS generado por la aplicación de terceros puede no estar realmente en formato Excel, en realidad puede ser un archivo de texto delimitado por tabulaciones con una extensión .xls.

Intente abrirlo con un editor de texto y vea.

Si está delimitado por tabulaciones, puede deshacerse del adaptador OleDB y abrirlo / analizarlo como un archivo de texto estándar.

Otros consejos

Si es probable que el formato del archivo generado cambie en el futuro (quizás al actualizar la aplicación de terceros), es posible que prefiera usar Asambleas de interoperabilidad primaria de Office . Estos cargarán cualquier versión o formato de archivo producido por Excel. El inconveniente es que necesitará Office instalado en el servidor.

Resolví el problema. El archivo Excel debe ser generado por MS EXCEL 2003, no desde MS EXCEL 2007 " guardar como 97-2003 " así que tienes que descargar un archivo de cualquier fuente. Luego copie los datos manualmente a la hoja. funcionó conmigo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top