Frage

Ok, mal sehen, ob ich das Sinn machen kann.

Ich habe ein Programm geschrieben, das eine Excel-Datei analysiert und es funktioniert gut. Ich verwende den folgenden in die Datei zu erhalten:

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

und das funktioniert ganz gut. Aber wenn ich versuche, es auf der tatsächlichen Datei (es wird von einem anderen Programm zu mir geliefert) bekomme ich diesen Fehler:

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)

Aber, das ist, wo ich das Problem liegt denken. Wenn ich diese Datei nehmen und es mit meinem lokalen Excel speichern, zuerst bekomme ich diese: Pop-up

  

CP-ARFJN-FLAG.XLS kann Merkmale enthalten   die sind nicht kompatibel mit Text (Tab   begrenzt). Wollen Sie das halten   Arbeitsmappe in diesem Format?

     
      
  • Sie dieses Format zu halten, was Blätter   aus irgendwelchen inkompatiblen Features, klicken Sie auf   Ja.
  •   
  • , um die Eigenschaften zu erhalten, klicken Sie auf Nein.   Zehn speichern eine Kopie in der aktuellen Excel   Format.
  •   
  • Um zu sehen, was verloren gehen könnten, klicken Sie auf   Hilfe.
  •   

Wenn ich Nein klicken und es dann als aktuelle Excel-Format speichern, wird das Programm dann gut funktionieren.

So gehe davon aus ich dies in einigen verrückten alten Excel-Format gespeichert wird?

Ich nehme an, meine Fragen seien:

  • Wie kann ich sagen, was Excel Version speichern diese?
  • Wie kann ich es in seinem aktuellen analysieren Zustand?
  • -oder Kann ich speichern Sie es programmatisch als eine neuere Version?

Ich hoffe, das ist klar ... Danke.

War es hilfreich?

Lösung

Es klingt wie die XLS-Datei von Ihrer Drittanbieter-App erzeugt wird, kann wirklich nicht im Excel-Format sein - es könnte in der Tat eine Tab-getrennte Textdatei mit einer Erweiterung von .xls sein

.

Versuchen Sie es mit einem Texteditor öffnen und sehen.

Wenn es Tab begrenzt ist, können Sie den OleDB Adapter und offenen Graben / parsen es als Standard-Textdatei.

Andere Tipps

Wenn das Format der erzeugten Datei wird wahrscheinlich in Zukunft ändern (vielleicht, wenn Sie die Drittanbieter-App-Upgrade), können Sie es vorziehen, die Amt für Primary Interop Assemblies . Diese lädt eine beliebige Version oder das Format-Datei von Excel erzeugt. Der Nachteil ist, dass Sie Office auf dem Server installiert sein.

i das Problem gelöst. Die Excel-Datei sollte von MS Excel 2003 nicht von MS Excel 2007 „speichern unter 97-2003“ erzeugt werden. so müssen Sie eine Datei von einer beliebigen Quelle herunterladen. Kopieren Sie dann die Daten manuell auf das Blatt. es funktionierte bei mir.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top