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 :

C# récuperer les liens dans un classeur excel


Sujet :

C#

  1. #1
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut C# récuperer les liens dans un classeur excel
    Bonjour à tous,

    Tout d'abord, Un bonne et heureuse année.
    Je vous explique mon probleme.
    Je dois lister dans un répertoire donné, tout les fichiers contenant des liens vers d'autres classeur.
    Rien ce bien compliqué, si ce n'est que cela ne fonctionne pas comme je le voudrais.
    Une chose d'abord, pourrait-on avoir accès à cet information sans devoir ouvrir le fichier. Devoir ouvrir les classeurs est embetant car dans le cas d'execution de code à l'ouverture du classeurs cela entraine lenteur et désagrément voir pop-up, etc...
    Il n'y a qu'a désactiver les evenements me direz-vous.. oui c'est vrai mais cela ne fonctionne pas ( allez savoir pq!!!!??? )
    en tout cas pas avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents=false
    Peut-on tout désactiver dans un classeur à l'ouverture?

    Quelqu'un aurais-t-il donc une solution?

    Merci de votre aide

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    normalement, tu peux lire les fichiers excels sans les ouvrir. Perso j'utilise Aspose Excel mais il est payant. Il doit neanmoins etre possible d'ouvrir ces fichiers excel sans executer les macros.

    de toute facon, tu ne peux pas faire cela sans ouvrir les fichiers à un moment ou un autre (ou alors tu lis bit par bit et tu sais trouver des liens dans ces bits)

  3. #3
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    normalement, tu peux lire les fichiers excels sans les ouvrir
    En dehors de la lecture bit à bit comme tu dis ce n'est pas possible.
    Il existe peut être une version light d'excel pour permettre son pilotage sans avoir l'application excel, et en chargeant moins de chose, mais le fichier est quand même ouvert.

    Ensuite tu peux ouvrir le fichier et donc l'application en background sans affichage (je crois que c'est le comportement par défaut).
    Et tu dois bien avoir la possibilité de désactivé tout ce qui se lance automatiquement.

    Je ne sais pas si tu es maitre du format des fichiers excel que tu va ouvrir, mais si oui alors créer plutot des fichier XML.
    Ce sera moins lourd à parser, et excel peut les ouvrir (selon la définition de leur structure) s'il est necessaire qu'ils puissent être édité manuellement.

  4. #4
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    En théorie, je dois pouvoir désactiver les événements à l'ouverture, Il se fait juste que cela ne fonctionne pas. J'ai fouillé MSDN sans succès.
    Le problemes est que je dois faire un scan d'environ 5000 classeurs et que si il y a un evenement à l'ouverture qui demande action, tout le processus se retrouve bloqué.
    pour répondre au question, non je suis suis pas le maitre des clé euh du fichier pardon! ;o)
    ce sont des fichiers utilisateurs et je ne sais pas tjs le contenu ni la taille.
    donc je serais bref...

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    poste ton code, des personnes ici verrons peut être uen erreur en ce qui concerne la désactivation des événements.

  6. #6
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    alors postons le code
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;
     
    namespace ChercherXlLiens
    {
        class Program
        {
            public static Excel.Workbook wb;
            public static Excel.Application xl;
            public static string nLine;
            public static string preport;
            public static string preport2;
            public static Scripting.TextStream report;
            public static Scripting.TextStream report2;
            public static Scripting.FileSystemObject FSO;
     
            static void Main(string[] args)
            {
                FSO = new Scripting.FileSystemObject();
                xl = new Excel.Application();
                xl.EnableEvents = false;
                Console.Out.WriteLine("GO !");
                preport = "H:/DATA/DataProject/Report.csv";
                preport2 = "H:/DATA/DataProject/Report2.csv";
                report = FSO.OpenTextFile(preport, Scripting.IOMode.ForAppending, false, Scripting.Tristate.TristateFalse);
                report2 = FSO.OpenTextFile(preport2, Scripting.IOMode.ForWriting, false, Scripting.Tristate.TristateFalse);
                LookDirect("H:/DATA");
                Console.Out.WriteLine("c'est fini!");
                Console.In.ReadLine();
                report.Close();
                report2.Close();
                xl.Application.EnableEvents = true;
                xl.Quit();
                NAR(xl);
            }
            static void LookDirect(string MD)
            {
                double fsize;
     
                foreach (Scripting.Folder Fold in FSO.GetFolder(MD).SubFolders)
                {
                    LookDirect(Fold.Path);
                }
                foreach (Scripting.File Fi in FSO.GetFolder(MD).Files)
                {
                    try
                    {
                        if (Fi.Path.Substring(Fi.Path.Length - 3, 3) == "xls")
                        {
                            report2.WriteLine(Fi.Path + ";" + Fi.Size.ToString());
                            fsize = Convert.ToDouble(Fi.Size.ToString());
                            if (fsize < 35000)
                            {
                                if (Haslink(Fi.Path))
                                {
                                    Console.Out.WriteLine(nLine);
                                    report.WriteLine(nLine);
                                }
                            }
                        }
                    }
                    catch
                    {
                        Console.Out.WriteLine(Fi.Path + " : a donné une erreur");
                    }
                    finally
                    {
                        Console.Out.Write("1");
                    }
                }
            }
            static Boolean Haslink(string Fi)
            {
                Boolean rt = false;
     
                try
                {
                    nLine = Fi;
                    wb = xl.Workbooks.Open(Fi, false, true, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                    object src = (object)wb.LinkSources(Excel.XlLinkType.xlLinkTypeExcelLinks);
                    System.Array LnkSrc = (Array)src;
                    if (LnkSrc != null)
                    {
                        for (int i = 1; i <= LnkSrc.Length; i++)
                        {
                            nLine.Insert(nLine.Length, LnkSrc.GetValue(i).ToString());
                            nLine = nLine + ";" + i.ToString() + ";" + LnkSrc.GetValue(i).ToString();
                        }
                        wb.Close(false, "", false);
                        NAR(wb);
                        if (LnkSrc.Length != 0)
                        {
                            rt = true;
                        }
                    }
                }
                catch
                {
                    wb.Close(false, Missing.Value, Missing.Value);
                    NAR(wb);
                    xl.Quit();
                    NAR(xl);
                    xl = new Excel.Application();
                    xl.Application.EnableEvents = false;
                }
                return rt;
            }
            static void NAR(object o)
            {
                try
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
                }
                catch { }
                finally
                {
                    o = null;
                }
            }
        }
    }
    voili voualou

    a vot' bon coeur!

  7. #7
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    En dehors de la lecture bit à bit comme tu dis ce n'est pas possible.
    je voulais dire ouvrir dans le sens lecture avec un composant Aspose. les macros de demarrage ne se declenchent pas forcement et ca ne s'ouvre en tout cas pas en plein ecran

Discussions similaires

  1. [XL-2013] Impossible de figer les volets dans un classeur excel
    Par mikagi dans le forum Excel
    Réponses: 2
    Dernier message: 02/04/2015, 18h43
  2. Mettre à jour les liens des graphiques d'Excel dans Powerpoint
    Par illight dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/06/2007, 15h17
  3. Réponses: 7
    Dernier message: 14/09/2005, 10h50

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