IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème lors de l'ouverture d'un fichier excel corrompu en C#


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Points : 12
    Points
    12
    Par défaut Problème lors de l'ouverture d'un fichier excel corrompu en C#
    Bonjour a tous,

    J'ai déjà passé pas mal de temps à chercher sur divers forums la solution à ce problème et je n'ai rien trouvé qui puisse m'aider.

    Pour faire simple, j'écris un petit programme en C# qui lors de son exécution ouvre un FolderBrowserDialog pour que l'utilisateur vienne sélectionner un dossier. Une fois le dossier sélectionné tous les fichiers de la forme "forme*.xls" présents dans le dossier sont stockées dans un tableau, puis une boucle foreach va venir ouvrir, effectuer les modifications désirées, sauvegarder et fermer le fichier. Rien de très compliqué en somme.

    Le soucis vient du fait que les fichiers ont un problème à l'ouverture:
    "Excel a trouvé du contenu illisible dans 'monFichier.xls'. Voulez-vous récupérer le contenu de ce classeur?"
    J'aimerai contourner le problème pour pouvoir avoir accès au données du fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     private void Traitement(object sender, EventArgs e, string folderPath)
            {
                FileInfo[] foundFiles = searchFiles(folderPath);
     
                foreach (FileInfo files in foundFiles)
                {
                    object missing = System.Reflection.Missing.Value;
                    string currentFilePath = files.FullName;
     
                    //Ouverture du fichier
                    Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
                    excelApp.Visible = true; //false;
                    excelApp.DisplayAlerts = true;
     
     
     
     
                   Workbook tableurExc = excelApp.Workbooks.Open(currentFilePath,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);
     
                    //Ici, opérations sur les données
     
                   tableurExc.Save();
                   tableurExc.Close();
                }
    Ma première piste de recherche a été tous les paramètres en entrée de la méthode Open , sans succès...

    Quelqu'un a une idée?

  2. #2
    Membre confirmé Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Points : 527
    Points
    527
    Par défaut
    Bonjour,

    Peut-être qu'en passant par un streamreader / streamwriter tu éviterais ce problème.
    Cela induis que tu lise le fichier en texte brut, du coup le traitement sera un peu plus complexe que par les interop.

    http://msdn.microsoft.com/fr-fr/libr...eamreader.aspx
    http://msdn.microsoft.com/fr-fr/libr...eamwriter.aspx
    Je fais ce que je dis et je dis ce que je veux .

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    Bonjour Jacky,

    Merci pour ta réponse!
    Passer par un streamreader est effectivement plus "complexe" pour récupérer les données du fichier...
    En réalité je ne vois pas comment accéder aux données qui m'intéressent. Le fichier contient un tableau simple:
    Janvier Février Mars
    Type1 1 23 12
    Type2 11 8 90
    Type3 2
    1 70

    Avec sur certaines lignes des décalages de données.
    J'aimerai ouvrir les fichiers les remettre "d'aplomb" puis les ré-enregistrer (ce qui supprime au passage la corruption du ficiher)

  4. #4
    Membre confirmé Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Points : 527
    Points
    527
    Par défaut
    Personnellement je le ferais avec les stream

    ça peut paraitre plus complexe mais en fait, pas tellement.
    Le fichiers excel sont formatés avec des séparateurs, espaces, virgules, point-virgules, etc...
    Il faut donc déterminer le ou lesquelles sont à gérer, ensuite tu gère avec un tableau de string et string.split qui donne l'impression d'être inventé pour ça .
    (en faite tu aura une représentation du genre string[,] tab)

    En suite tu modifies et tu sauvegardes.

    Voila, après si les stream t’intéressent vraiment pas, ba j'ai pas d'autres idée dans l'immédiat.
    Je fais ce que je dis et je dis ce que je veux .

  5. #5
    Membre à l'essai
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    Au final j'ai trouvé comment faire ce que je voulais.
    Ma première intuition était la bonne il faut "jouer" avec les paramètres de la méthode Open
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Workbook Open(
    	[In] string Filename, 
    	[In, Optional] object UpdateLinks, 
    	[In, Optional] object ReadOnly, 
    	[In, Optional] object Format, 
    	[In, Optional] object Password, 
    	[In, Optional] object WriteResPassword, 
    	[In, Optional] object IgnoreReadOnlyRecommended, 
    	[In, Optional] object Origin, 
    	[In, Optional] object Delimiter, 
    	[In, Optional] object Editable, 
    	[In, Optional] object Notify, 
    	[In, Optional] object Converter, 
    	[In, Optional] object AddToMru, 
    	[In, Optional] object Local, 
    	[In, Optional] object CorruptLoad
    );
    Il faut se servir du dernier paramètre "CorruptLoad" qui est égal à une des trois constantes suivantes: xlNormalLoad, xlRepairFile, et xlExtractData.(http://msdn.microsoft.com/fr-fr/libr...ffice.11).aspx
    Mais comme les autres paramètres il faut passer un entier dans le paramètre:

    xlNormalLoad (value is 0)
    xlRepairFile (value is 1)
    xlExtractData (value is 2)


    Voila voila, le problème est résolu!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème lors de l'ouverture d'un fichier Excel
    Par l_informaticien dans le forum Excel
    Réponses: 6
    Dernier message: 16/06/2013, 19h31
  2. [WD-2000] Problème lors de l'ouverture d'un fichier par VBA word
    Par juju05 dans le forum VBA Word
    Réponses: 2
    Dernier message: 03/12/2010, 09h11
  3. Réponses: 3
    Dernier message: 12/09/2008, 18h07
  4. Problème lors de l'ouverture d'un modèle Excel
    Par ploxien dans le forum Excel
    Réponses: 2
    Dernier message: 10/01/2008, 08h52
  5. Problème lors de l'import d'un fichier excel
    Par mattyeux dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/11/2007, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo