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 :

mettre à jour un document Excel openXml


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut mettre à jour un document Excel openXml
    Bonjour,

    J'ai un problème pour mettre à jour une feuille de mon document Excel openxml. Tous les fichiers présents dans le package sont supprimés alors que je voudrait seulement écraser la feuille que je met à jour.
    Voici le code que j'utilise pour sauvegarder le package :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                Package pkgOutputDoc = Package.Open(fileName, FileMode.Create, FileAccess.ReadWrite);
                Uri uri = new Uri(string.Format("/xl/worksheets/sheet{0}.xml", sheetNumber), UriKind.Relative);
                PackagePart partSheetXml = pkgOutputDoc.CreatePart(uri, "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml");
                StreamWriter streamStartPart = new StreamWriter(partSheetXml.GetStream(FileMode.Create, FileAccess.Write));
                xmlStartPart.Save(streamStartPart);
                streamStartPart.Close();
                pkgOutputDoc.Flush();
                pkgOutputDoc.CreateRelationship(uri, TargetMode.Internal,
                                                "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
                                                "rId1");
                pkgOutputDoc.Flush();
                pkgOutputDoc.Close();
    Avez-vous une idée du problème ?

    merci d'avance.

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Tu veux écraser la feuille avec quoi ? Pourquoi ne pas simplement modifier la feuille existante.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  3. #3
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    Avec une nouvelle feuille dont le xml est écrit avec Xlinq. Mais je ne sais pas pourquoi le code ci dessus ne se contente pas d'écraser seulement la feuille concerné...

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Tu récupères la feuille à modifier, tu remplaces son xml par celui que t'as créé et tu sauves le tout. Pas besoin d'écraser la feuille ni de refaire les relations.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    Ok, j'ai écrit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Package pkg = Package.Open(fileName, FileMode.Open, FileAccess.ReadWrite);
    Uri uri = new Uri(relativeFilePath, UriKind.Relative);
    if(pkg.PartExists(uri)!=null)
        pkg.DeletePart(uri);
    PackagePart part = pkg.CreatePart(uri, "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml");
    StreamWriter stream = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write));
    doc.Save(stream);
    stream.Close();
    pkg.Flush();
    Ca marche (je veux dire ça n'écrase plus mes autre fichiers), mais ça modifie le fichier [Content_Types].xml ce qui rend le fichier illisible par Excel.
    Sais-tu pourquoi ?

    merci.

  6. #6
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Dans un package Excel, une feuille est eclatée en 2 fichiers xml: sheet1.xml qui se trouve dans le dossier worksheets, et sharedStrings.xml (dans le dossier xl) qui regroupe l'ensemble du contenu des différentes feuilles.

    Pour modifier une feuille il faut donc toucher à ces deux fichiers. Le xml que tu génères contient quoi ?
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

Discussions similaires

  1. Mettre à jour un fichier excel
    Par andrea0 dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 15/09/2013, 16h24
  2. Réponses: 5
    Dernier message: 31/08/2013, 08h36
  3. Importer et mettre à jour un fichier Excel dans d’autres
    Par Tho69 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 28/07/2013, 18h55
  4. [XL-2007] Mettre à jour un tableau Excel en fonction d'un autre
    Par m@tix dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 07/03/2012, 01h12
  5. Mettre à jour un tableau excel
    Par plonglet dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/11/2009, 13h37

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