Question

Ok, voyons si cela peut avoir un sens.

J'ai un programme écrit qui analyse un fichier Excel et cela fonctionne très bien. J'utilise les éléments suivants pour entrer dans le fichier:

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

et cela fonctionne très bien. Mais lorsque je l’essaye sur le fichier réel (il m’a été fourni par un autre programme), j’obtiens cette erreur:

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)

MAIS, c’est là que réside le problème, selon moi. Si je prends ce fichier et que je l’enregistre avec mon Excel local, j’obtiens tout d’abord cette fenêtre contextuelle:

  

CP-ARFJN-FLAG.XLS peut contenir des fonctionnalités   qui ne sont pas compatibles avec Text (Tab   délimité). Voulez-vous garder le   classeur dans ce format?

     
      
  • Pour conserver ce format qui laisse   toutes les fonctionnalités incompatibles, cliquez sur   Oui.
  •   
  • Pour conserver les fonctionnalités, cliquez sur Non.   Dix enregistrer une copie dans le dernier Excel   format.
  •   
  • Pour voir ce qui pourrait être perdu, cliquez sur   Aide.
  •   

Si je clique sur Non, puis que je l'enregistre au format Excel actuel, le programme fonctionnera correctement.

Donc, je suppose que cela est sauvegardé dans un vieux format Excel fou?

Je suppose que mes questions seraient les suivantes:

  • Comment savoir quelle version d'Excel sauvé cela?
  • Comment puis-je l'analyser dans son courant état?
  • -ou- Puis-je enregistrer par programme la nouvelle version?

J'espère que c'est clair ... Merci.

Était-ce utile?

La solution

Il semble que le fichier XLS généré par votre application tierce ne soit peut-être pas réellement au format Excel. Il peut s'agir en fait d'un fichier texte délimité par des tabulations avec une extension .xls.

Essayez de l’ouvrir avec un éditeur de texte et voir.

S'il est délimité par des tabulations, vous pouvez abandonner l’adaptateur OleDB et l’ouvrir / l’analyser sous forme de fichier texte standard.

Autres conseils

Si le format du fichier généré est susceptible de changer à l'avenir (peut-être lors de la mise à niveau de l'application tierce), vous préférerez peut-être utiliser le Assemblages d'interopérabilité primaires Office . Ceux-ci chargeront n'importe quelle version ou format de fichier produit par Excel. L’inconvénient est qu’Office doit être installé sur le serveur.

j'ai résolu le problème. Le fichier Excel doit être généré par MS EXCEL 2003 et non à partir de MS EXCEL 2007 "save as 97-2003". vous devez donc télécharger un fichier depuis n’importe quelle source. Copiez ensuite les données manuellement sur la feuille. cela a fonctionné avec moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top