Partage
  • Partager sur Facebook
  • Partager sur Twitter

C# et fichier excel

    14 août 2018 à 9:16:03

    Bonjour,

    J'aimerai récuperer des infos dans des fichiers qui sont dans des dossiers specifique, j'arrive pour le moment a récuperer et affichier toutes les infos en console..

    Mon souçis et que j'aimerai que toutes ses infos se mettent dans un nouveau fichier excel.

    voici mon code.

    public class Read_From_Excel
        {
            public void GetExcelFile(string FileName)
            {
                //Creer les objets COM. 1 objet COM pour chaque choses qui est referencées.
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(FileName);
                Microsoft.Office.Interop.Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
                Microsoft.Office.Interop.Excel.Range xlRange = xlWorksheet.UsedRange;
    
                int rowCount = xlRange.Rows.Count;
                int colCount = xlRange.Columns.Count;
    
                //on avance de ligne en ligne et de colonne en colonne
                //Excel commence a  1 pas 0!!
                for (int i = 1; i <= rowCount; i++)
                {
                    for (int j = 1; j <= colCount; j++)
                    {
                        //on creer la nouvelle ligne
                        if (j == 1)
                            Console.Write("\r\n");
    
                        //On stock les valeurs et on ecrit dans un nouveau fichier
                        if (xlRange.Cells[i, j] != null && xlRange.Cells[i, j].Value2 != null)
                            Console.Write(xlRange.Cells[i, j].Value2.ToString() + "\t");
                    }
                }
    
                //La RAM....
                GC.Collect();
                GC.WaitForPendingFinalizers();
    
                //Les objets COM tjr avec un ., [blabla].[blabla].[blabla] c'est pas bien.
    
                //On libere les objets COM pour kill tous les process en background
                Marshal.ReleaseComObject(xlRange);
                Marshal.ReleaseComObject(xlWorksheet);
    
                //ensuite on close
                xlWorkbook.Close();
                Marshal.ReleaseComObject(xlWorkbook);
    
                //Puis on quitte
                xlApp.Quit();
                Marshal.ReleaseComObject(xlApp);
            }


    En gros j'aimerai appeller une methode a la place de cette ligne: Console.Write(xlRange.Cells[i, j].Value2.ToString() + "\t");

    -
    Edité par CorentinLepetit 14 août 2018 à 9:22:21

    • Partager sur Facebook
    • Partager sur Twitter
      16 août 2018 à 10:50:16

      L'interOp, c'est caca.

      Pourquoi le format CSV ne vous convient pas ?

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        16 août 2018 à 14:13:41

        Alors j'ai reussit a faire ce que je voulais depuis le temps, mais maintenant que t'es la peut etre que tu peux m'aider..

        J'utilise cette focntion pour creer mes fichiers : 

         public bool WriteFile<T>(string _path, List<T> _MyList) where T : class
                {
                    try
                    {
                        using (TextWriter tr = new StreamWriter(_path, true, Encoding.GetEncoding("iso-8859-1")))
                        {
                            var csv = new CsvWriter(tr, CsvConf);
                            csv.WriteRecords(_MyList);
                        }
                        return false;
                    }
                    catch (Exception)
                    {
                        return true;
                    }
                }

        Et avec le StreamWriter, si le fichier existe deja il en creer un nouveau pour le remplacer, j'aimrerai que si le fichier existe deja le programme continue sans rien faire et je ne sais pas comment faire

        • Partager sur Facebook
        • Partager sur Twitter
          16 août 2018 à 14:23:54

          Je ne suis pas sûr de bien comprendre votre problème.

          Vous ne voulez pas faire d'ajout à un fichier existant ?

          Pourquoi ne pas tester l'existence du fichier avant ?

          https://msdn.microsoft.com/fr-fr/library/system.io.file.exists(v=vs.110).aspx

          ET VIREZ MOI CE TRY/CATCH !!!!

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            16 août 2018 à 14:35:32

            En faite pour etre clair, j'ai un dossier avec des ous dossier, dans chaque sous dissoer je vais recuperer un fichier excel, puis ecrire les donées a l'interieur dans un csv, puis reformater ce csv, voila le truc de base.

            Tous fonctionnent le seul soucis c'est que quand j'ajoute un sous dossier dans mon dossier principale, mon programme ma refaire tous les autres sous dossiers car le StreamWriter remplace ou ajoute dans le fichier existant... et ca prendun temps fou.. et je ne sais pas comment faire pour que ca ne se produise pas..

            Quel est le soucis avec le try catch?? :(

            • Partager sur Facebook
            • Partager sur Twitter
              16 août 2018 à 15:32:20

              Pourquoi ne pas vérifier que la conversion a déjà été faite en regardant le résultat de la conversion ?

              Si le résultat existe déjà, on fait pas.

              Donc, c'est toujours une simple vérification de l'existence du fichier CVS produit.

              Normalement, c'est pas la "navigation" dans le système de fichier qui prend du temps.

              Le souci avec try/catch, c'est qu'il ne faut jamais catcher une exception que vous ne traitez pas, et là, vous traitez que-dalle.

              Et c'est sans le comique de renvoyer un booléen (à la C d'il y a plus de 40 ans) qui dit "true" quand c'est parti en cacahouète et false quand tout s'est bien passé.

              Donc pas de try/catch à la con et vous ne renvoyez rien ( void ).

              Si vous avez une merde avec le système de fichier comme des droits d'accès ou des quotas disques mais que vous avez une solution de repli (comme une nouvelle partition), vous faites comment pour l'implémenter quand ce type de problème est planqué dans des "return true" avec les autres exceptions, comme un outOfMemory ou un ThreadAbort ?

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                16 août 2018 à 15:35:06

                Pour la verification de l'existence du fichier j'ai reussis, et merci de tes conseils avisés je vais enlever ce try catch merci de ton aide ;)
                • Partager sur Facebook
                • Partager sur Twitter

                C# et fichier excel

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown