Domanda

Ok, vediamo se riesco a dare un senso a questo.

Ho un programma scritto che analizza un file Excel e funziona perfettamente. Uso il seguente per accedere al file:

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);

e questo funziona bene. Ma quando lo provo sul file effettivo (mi viene fornito da un altro programma) ottengo questo errore:

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)

MA, è qui che penso che il problema risieda. Se prendo quel file e lo salvo con il mio Excel locale, per prima cosa ottengo questo popup:

  

CP-ARFJN-FLAG.XLS può contenere funzioni   che non sono compatibili con il testo (Tab   delimitato). Vuoi mantenere il   cartella di lavoro in questo formato?

     
      
  • Per mantenere questo formato, che lascia   tutte le funzionalità incompatibili, fare clic su   Sì.
  •   
  • Per preservare le funzionalità, fare clic su No.   Dieci salva una copia nell'ultimo Excel   formato.
  •   
  • Per vedere cosa potrebbe andare perso, fai clic su   Aiuto.
  •   

Se faccio clic su No e quindi lo salvo come formato Excel corrente, il programma funzionerà correttamente.

Quindi suppongo che questo sia salvato in un pazzo vecchio formato Excel?

Suppongo che le mie domande sarebbero:

  • Come posso sapere quale versione di Excel salvato questo?
  • Come posso analizzarlo nella sua corrente Stato?
  • -oppure- Posso salvarlo programmaticamente come versione più recente?

Spero sia chiaro ... Grazie.

È stato utile?

Soluzione

Sembra che il file XLS generato dalla tua app di terze parti potrebbe non essere davvero in formato Excel - potrebbe in realtà essere un file di testo delimitato da tabulazioni con estensione .xls.

Prova ad aprirlo con un editor di testo e guarda.

Se è delimitato da tabulazioni, è possibile abbandonare l'adattatore OleDB e aprirlo / analizzarlo come file di testo standard.

Altri suggerimenti

Se è probabile che il formato del file generato cambi in futuro (forse quando si aggiorna l'app di terze parti), è possibile che si preferisca utilizzare Assiemi di interoperabilità primaria di Office . Questi caricheranno qualsiasi versione o formato del file prodotto da Excel. L'aspetto negativo è che avrai bisogno di Office installato sul server.

ho risolto il problema. Il file Excel dovrebbe essere generato da MS EXCEL 2003, non da MS EXCEL 2007 "salva come 97-2003". quindi devi scaricare un file da qualsiasi fonte. Quindi copiare i dati manualmente sul foglio. ha funzionato con me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top