Problem parsing en XLS fil med C #

stemmer
3

Ok, la oss se om jeg kan gjøre dette fornuftig.

Jeg har et program skrevet som analyserer en Excel-fil og det fungerer helt fint. Jeg bruker følgende for å komme inn i filen:

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

og dette fungerer helt fint. Men når jeg prøver det på selve filen (det er levert til meg av et annet program) Jeg får denne feilmeldingen:

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)

MEN, dette er hvor jeg tror problemet ligger. Hvis jeg tar denne filen, og lagre det med min lokale Excel, først får jeg denne popup:

CP-ARFJN-FLAG.XLS kan inneholde funksjoner som ikke er kompatible med tekst (Tabulatordelt). Ønsker du å holde arbeidsboken i dette formatet?

  • For å holde dette formatet, som etterlater seg noen inkompatible funksjoner, klikker du Ja.
  • For å bevare funksjonene, klikker du på Nei Ten lagre en kopi i den siste Excel-format.
  • For å se hva som kan gå tapt, klikker du på Hjelp.

Hvis jeg klikker Nei og deretter lagre den som gjeldende Excel-format, vil programmet da fungere fint.

Så jeg antar at dette er lagret i noen sprø gammel Excel-format?

Jeg antar at mine spørsmål ville være:

  • Hvordan kan jeg vite hva som Excel-versjon lagret dette?
  • Hvordan kan jeg analysere den i sin nåværende tilstand?
  • -eller- Kan jeg auto lagre det som en nyere versjon?

Jeg håper det er klart ... Takk.

Publisert på 14/10/2008 klokken 10:04
kilden bruker
På andre språk...                            


3 svar

stemmer
8

Det høres ut som XLS fil generert av tredjeparts app kan egentlig ikke være i Excel-format - det kan faktisk være en tabulatordelt tekstfil med en XLS forlengelse.

Prøv å åpne den med en tekst editor og se.

Hvis det er tabulatordelt, kan du droppe OLEDB adapter og åpne / analysere det som en standard tekstfil.

Svarte 14/10/2008 kl. 10:31
kilden bruker

stemmer
0

Hvis formatet på den genererte filen vil trolig endre seg i fremtiden (kanskje når du oppgraderer tredjeparts app), kan du foretrekker å bruke Office-Primary Interop Assemblies . Disse vil laste hvilken som helst versjon eller formatet på filen produsert av Excel. Ulempen er at du trenger Office installert på serveren.

Svarte 14/10/2008 kl. 12:35
kilden bruker

stemmer
0

I løst problemet. Excel-filen skal genereres av MS Excel 2003, ikke fra MS Excel 2007 "lagre som 97-2003". så du må laste ned en fil fra en annen kilde. Deretter kopiere dataene manuelt til arket. det jobbet med meg.

Svarte 01/07/2009 kl. 06:47
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more