Partage
  • Partager sur Facebook
  • Partager sur Twitter

Impossible d'ouvrir fichier Excel en Vb net

    10 septembre 2021 à 12:59:54

    Bonjour, j'ai conçu une petite application en Visual Basic et cette dernière à besoin d'ouvrir un fichier Excel pour fonctionner, en mode débug 0 soucis tout s'exécute comme je veux, sauf qu'après publication de cette application il m'est impossible de pouvoir ouvrir le fichier Excel, cette erreur me ressort :

    Comment puis-je faire ? Je sais que je devrais gérer l'erreur ( je le ferai après ) mais mon fichier Excel est tout de même censé être ouvert puisque 0 soucis en mode débug.

    Merci d'avance de votre réponse ! 

    • Partager sur Facebook
    • Partager sur Twitter
      10 septembre 2021 à 13:06:53

      Cliquer sur détails pour avoir un peu plus d'info, et passer en debug pour savoir où se produit l'erreur (nous ne sommes pas devin pour savoir quel code tu as utilisé).

      Le message indique qu'il voit que le fichier est en lecture seule ou chiffré: Est-ce que le fichier n'est pas déjà ouvert par quelqu'un (application, toi, un autre utilisateur, ...) ? 

      • Partager sur Facebook
      • Partager sur Twitter
        10 septembre 2021 à 15:35:31

        umfred a écrit:

        Cliquer sur détails pour avoir un peu plus d'info, et passer en debug pour savoir où se produit l'erreur (nous ne sommes pas devin pour savoir quel code tu as utilisé).

        Le message indique qu'il voit que le fichier est en lecture seule ou chiffré: Est-ce que le fichier n'est pas déjà ouvert par quelqu'un (application, toi, un autre utilisateur, ...) ? 


        Les détails n'indiquaient pas grand chose de plus, pour ça que je n'ai pas montré, mais je pense que le problème vient du fait que mon fichier est situé dans le dossier Resources de mon projet dans Visual Studio, une fois l'application publiée impossible d'y accéder, y'aurait t-il un moyen pour y arriver ?

        J'ai également essayé de stocker le fichier sur le sharepoint de l'entreprise pour laquelle je travaille, cela fonctionnait au 1er abord mais en réalité cela me téléchargeait le fichier en plusieurs parties sous des formats d'image ou html, vraiment bizarre. 

        -
        Edité par SkyeZ 10 septembre 2021 à 15:39:23

        • Partager sur Facebook
        • Partager sur Twitter
          10 septembre 2021 à 16:20:51

          Si il est inclus dans les ressources, le moyen d'accès est différent. Dans les resources du projet, ça devient un tableau de bytes.

          Tu peux alors le réécrire en tant que fichier excel via (par exemple) System.IO.File.WriteAllBytes("chemin", My.Resources.fichier), et y accéder ensuite comme prévu.

          Mais sauf erreur de ma part, un fichier en ressource n'est pas modifiable d'où le lecture seule (à chaque lancement, on repart avec celui d'origine).

          • Partager sur Facebook
          • Partager sur Twitter
            10 septembre 2021 à 16:26:52

            Le "dossier" Resources dans Visual Studio n'implique rien de bien précis.

            Vous mettez vraisemblablement votre fichier Excel en "ressource" (donc embarqué dans l'exécutable"), ce qui ne me semble pas très pertinent.

            Vous devriez en faire un simple fichier annexe (modification de la propriété "Action de génération" pour mettre "Aucun" et la propriété "Copier dans le répertoire de sortie" pour mettre "Copier si plus récent", les "propriétés" pour un fichier du projet s'affiche dans la fenêtre qui s'ouvre quand on appuie sur F4 après avoir sélectionné le fichier dans l'explorateur de solutions de VS).

            Pour les problématiques de déploiement d'un fichier annexe, regardez les outils de création de ces modules de déploiement, en fonction de votre méthode de déploiement. Mais je ne pense pas que mettre un fichier annexe dans un sous-répertoire "Resources" du répertoire d'installation soit très judicieux.

            Donc réfléchissez à votre déploiement/structure de fichier en amont, pour ne pas à modifier votre code juste pour faire ce genre d'adaptation.

            • Partager sur Facebook
            • Partager sur Twitter
            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
              14 septembre 2021 à 8:43:55

              J'ai décidé de changer d'approche du coup en intégrant ce fichier Excel dans un sharepoint, seulement je fais une vérification de ce fichier, je fais une boucle sur chaque nom de feuille, si elle existe déjà par rapport à la feuille que je veux créer alors je la supprime et je la crée de nouveau sinon je la crée directement, seulement une erreur systématique intervient : exception de hresult : 0x800A03EC.

              Voici mon code : 

                          For Each xs In XLBook.Sheets
                              If (xs.Name = MyValue) Then
                                  trouve = 1
                                  Exit For
                              Else
                                  trouve = 0
                              End If
                          Next
              
                          If trouve = 0 Then
                              XlBookTemplate.Worksheets(nomTemplate).Copy(After:=XLBook.Worksheets(XLBook.Worksheets.Count))
                              XLBook.Sheets(nomTemplate).Name = MyValue
                              XLBook.Sheets(MyValue).Tab.Color = Color.FromArgb(231, 230, 230)
                              XlBookTemplate.Close(SaveChanges:=False)
              
                          Else
                              XLBook.Sheets(MyValue).Delete()
                              XlBookTemplate.Worksheets(nomTemplate).Copy(After:=XLBook.Worksheets(XLBook.Worksheets.Count))
                              XLBook.Sheets(nomTemplate).Name = MyValue
                              XLBook.Sheets(MyValue).Tab.Color = Color.FromArgb(231, 230, 230)
                              XlBookTemplate.Close(SaveChanges:=False)
                          End If

              Edit : En réalité le fait de stocker ce fichier sur le sharepoint me pose énormément de soucis, lorsque j'étais en mode debug avec ce fichier en local ce bout de code fonctionnait très bien. Ce fichier ne contient absolument rien et pourtant lorsque je boucle sur chacune des feuilles il me trouve une feuille sortie de nul part alors c'est à ni rien comprendre.

              -
              Edité par SkyeZ 14 septembre 2021 à 9:12:02

              • Partager sur Facebook
              • Partager sur Twitter
                14 septembre 2021 à 10:27:23

                Sharepoint, c'est pas juste un partage réseau (versionning, gestion des droits, formatage, etc...).

                Vous utilisez quoi comme code pour rapatrier votre fichier ?

                Sauvez le fichier en local et ouvrez-le avec Excel pour être sûr que vous rapatriez le bon fichier et la bonne version du fichier.

                • Partager sur Facebook
                • Partager sur Twitter
                Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                  14 septembre 2021 à 11:02:22

                  bacelar a écrit:

                  Sharepoint, c'est pas juste un partage réseau (versionning, gestion des droits, formatage, etc...).

                  Vous utilisez quoi comme code pour rapatrier votre fichier ?

                  Sauvez le fichier en local et ouvrez-le avec Excel pour être sûr que vous rapatriez le bon fichier et la bonne version du fichier.


                  Du coup effectivement je crée désormais un fichier en local ce sera plus simple, seulement lorsque je crée ce fichier Excel à l'aide de FileStream mais le message suivant apparaît ensuite : 

                  Impossible d'ouvrir le fichier excel car son format ou son extension n'est pas valide. Vérifiez que le fichier n'est pas endommagé et que son extension correspond bien au format du fichier.

                  Je ne sais pas si il y a une subtilité pour créer des fichiers Excel, voici mon code : 

                  Dim testArray() As String = Split(My.Application.Info.DirectoryPath, "\")
                          For i As Integer = 0 To testArray.Length - 2
                              Debug.Print(testArray(i))
                              MyExcel += testArray(i) + "\"
                          Next
                          MyExcel += "valeurs.xlsx"
                  
                          If File.Exists(MyExcel) Then
                              File.Delete(MyExcel)
                              Dim fs As New FileStream(MyExcel, FileMode.Create)
                              fs.Close()
                              File.OpenRead(MyExcel)
                          Else
                              Dim fs As New FileStream(MyExcel, FileMode.Create)
                              fs.Close()
                              File.OpenRead(MyExcel)
                          End If


                  Edit : J'ai solutionné ce problème la, maintenant il ne me reste plus qu'à récupérer mon template stocké sur le sharepoint (lecture seule et protégée par mot de passe), en mode debug je n'avais aucun soucis à le récupérer mais actuellement impossible d'y arriver

                  -
                  Edité par SkyeZ 14 septembre 2021 à 11:37:17

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 septembre 2021 à 11:42:08

                    Mettre des fichiers "temporaires" dans le répertoire d'une application n'est vraiment pas très pertinent.

                    Il est plus que probable que, si vos administrateurs font correctement leur boulot, les répertoires contenant les applications soient en read-only (because virus tout ça tout ça). Donc, si vous voulez créer des fichiers temporaires, utilisez les répertoires dédiés à cette tâche.

                    Je reviens sur le fait que si vous avez un fichier "modèle" (un .dotx, par exemple) en fichier annexe, vous pouvez faire en sorte que ce fichier annexe soit lui dans la zone "sûr", au coté de l'exécutable, car c'est l'outil de déploiement qui se chargera de cette "copie", donc sans les restrictions de droits liées à une exécution du dit programme installé.

                    Ce que j'entrevoie avec votre code, c'est que votre fichier "valeurs.xlsx" est complètement vide (0 octets), or, un fichier complètement vide n'est pas un fichier Excel "valide".

                    Vous devez remplir le fichier avec les structures de données qu'Excel s'attendrait à voir.

                    Pour créer un fichier Excel ex-nihilo, vous devez utiliser des composants comme ceux offert par l'OOXML SDK, par exemple.

                    Je ne comprends toujours pas pourquoi vous vous emmerdez comme ça au lieu de simplement mettre un fichier annexe .docx ou .dotx à votre solution déployée.

                    EDIT :

                    Vous utilisez quoi comme code pour rapatrier votre fichier ? (BIS)

                    -
                    Edité par bacelar 14 septembre 2021 à 11:45:43

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                      14 septembre 2021 à 11:52:26

                      un truc que je ne comprends pas: si le fichier "ne contient absolument rien" pourquoi s'embêter à recopier un fichier et ne pas en créer un depuis zéro? 

                      Si tu veux créer un fichier à partir d'un template (ou fichier modèle) existant, il "suffit" de demander de créer un fichier à partir de celui-ci via l'utilisation de Microsoft.Interop.Excel et Workbooks.add(TemplatePath) (sans info de template, ça te créé un fichier excel vierge classique.
                      https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel.workbooks.add?view=excel-pia 

                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 septembre 2021 à 12:21:26

                        En gros je me suis décidé à créer un fichier sur le PC de l'utilisateur pour pouvoir y stocker les données, ma boucle dans mon message précédent, j'ai réussi à trouver un autre moyen qui fonctionne parfaitement.

                        Ce fichier sera tout d'abord rempli à l'aide d'un template sur le sharepoint de l'entreprise (point bloquant actuellement), puis il sera rempli à l'aide de diverses valeurs récupérées, puis à la toute fin je veux enregistrer cette feuille Excel dans la base de données spécifique sur le sharepoint. Actuellement les valeurs récupérées et l'enregistrement sur le sharepoint fonctionnent parfaitement mais la copie du template est impossible actuellement, cela fonctionnait parfaitement en debug mais plus maintenant. 

                        Ce fichier template est verrouillé en lecture seule et avec un mot de passe mais j'avoue que j'arrivais à le copier sans soucis même sans mot de passe auparavant.

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Impossible d'ouvrir fichier Excel en Vb net

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        • Editeur
                        • Markdown