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 :

écrire dans un fichier Excel via une dll sur serveur


Sujet :

C#

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut écrire dans un fichier Excel via une dll sur serveur
    Bonjour à tous,

    Voilà, j'ai un problème concernant l'automation Excel.

    Je voudrais bien pouvoir modifier un fichier Excel, mais cette modification est générée par une dll sur un serveur distant. J'ai donc une dll qui se trouve sur le serveur. J'appelle la méthode de cette dll depuis un poste client.
    Dans cette cll, j'ai la méthode qui effectue le code suivant :

    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
    Excel.Application xlApp ;
                Excel.Workbook xlWorkBook ;
                Excel.Worksheet xlWorkSheet ;
                object misValue = System.Reflection.Missing.Value;
     
                xlApp = new Excel.Application();
                xlApp.Visible = false;
                xlWorkBook = xlApp.Workbooks.Open("c:\\inetpub\\sitev4\\weborb30\\bin\\test.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
                xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
     
                xlWorkSheet.Cells[1, 1].value = "test";
     
                xlWorkBook.Close(true, "c:\\inetpub\\sitev4\\weborb30\\bin\\test2.xls");
     
     
     
                xlApp.Quit();
     
                releaseObject(xlWorkSheet);
                releaseObject(xlWorkBook);
                releaseObject(xlApp);
    Quand j'exécute ce code en local, ça marche parfaitement. Mais si j'appelle cette méthode qui s'exécute depuis le serveur, là j'obtient l'erreur suivante :

    System.Runtime.InteropServices.COMException (0x800A03EC): Fichier inaccessible. Essayez l'une des opérations suivantes :

    • Vérifiez que le dossier spécifié existe.
    • Vérifiez que le dossier dans lequel se trouve le fichier n'est pas en lecture seule.
    • Vérifiez que le nom du fichier ne comporte les caractères suivants: | < > ? [ ] : ni *
    • Vérifiez que le nom du fichier ou du chemin ne dépasse pas 218 caractères.
    J'ai essayer tous les moyens possibles( avec save(), saveas(), savecopyas(), sans save(), ...) Mais rien ne fonctionne
    Ce n'est pas un problème de dossier qui n'existerait pas ou quoi ...
    PAs non plus un problème d'accès (j'ai essayer de creer un simple fichier avec streamWriter, ça fonction), à moins que Office n'ait une authentification spéciale ? Mais j'ai pourtant mis les full droits pour 'everyone' ...

    Si quelqu'un pouvait m'aider ...

    Et si il faut plus de renseignement ou si quelque chose n'est pas clair, faites le moi savoir svp

    Merci.

  2. #2
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    Peut-être que ton code interprète que le fichier est sur le poste client...

    Crée le fichier suivant sur ton poste :
    c:\\inetpub\\sitev4\\weborb30\\bin\\test.xls

    Pour voir si tu es toujours en erreur

    Attention, tu ouvres le fichier test.xls et tu fermes le fichier test2.xls...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Salut,

    Merci d'avoir répondu, mais c'est impossible.
    J'appelle ma dll sur un serveur, c'est donc bien sur le serveru que le code est exécuté. D'ailleurs, quand j'ouvre le fichier, celui-ci se trouve bel et bien sur le serveur, pas sur le poste client.

    C'est à la ligne du "close" que l'exception est lancée ...


    P.S. : C'est normale que je referme en test2.xls, comme ça il enregistre un nouveau fichier. Sinon, il doit écraser celui existant, et j'avais peur que ça pose plus de problèmes ...

  4. #4
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2010
    Messages : 62
    Points : 111
    Points
    111
    Par défaut
    Bonjour,

    Avez-vous essayé d'ouvrir votre fichier sans les paramètres facultatifs pour voir si Excel se comporte de la même façon ?
    Si le problème est toujours présent, il est possible que cela vienne du compte utilisé pour lancer Excel (vu l'emplacement du fichier je suppose que c'est de l'ASP). Si vous créez un pool pour votre application avec un compte ayant un profil sur le serveur, le comportement est-il toujours le même ?
    Le compte ASP n'ayant peut être pas les droit nécessaire pour utiliser correctement Excel.

    A contrôler quand même :
    - Les paramètres d'ouverture: Type.Missing quand vous ne voulez pas le renseigner et si vous voulez atteindre une option facultative plus éloigné.
    - Les versions d'Excel entre le poste de développement et le serveur.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Ce n'est pas à l'ouverture que ça pose problème, mais à la fermeture (et donc à l'enregistrement).
    Quand je l'ouvre et que j'affiche les données présente dans le fichier, tout se passe bien.
    Concernant le compte ASP, c'est ce que je me disais, mais comme je l'ai dit j'ai mis les droits full pour 'everyone' ...

    Personne n'a jamais utilisé l'automation Excel sur un serveur distant ? Si quelqu'un l'a déjà fait, ce serait bien que je sache les étapes à faire ... J'ai peut-être oublié quelque chose

    Merci.

  6. #6
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2010
    Messages : 62
    Points : 111
    Points
    111
    Par défaut
    Concernant le compte ASP, c'est ce que je me disais, mais comme je l'ai dit j'ai mis les droits full pour 'everyone' ...
    Ce n'est pas la même chose que de tester sur un compte ayant un profil existant sur le serveur mais comme vous êtes certains que les pistes précédentes ne peuvent aider, je vous invite à lire l'article suivant qui, à ma connaissance, est toujours d'actualité :
    Considerations for server-side Automation of Office

    Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment.
    Sinon vous aurez peut-être plus de chance si vous faites déplacer le sujet sur la partie ASP.NET.

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    Bonjour,
    l'automaton excel est déconseillé sur un serveur distant, il y a un article de microsoft à ce sujet (je n'ai plus le lien) mais si tu veux quand même le faire je crois qu'il faut donner le droit a excel d'écrire sur ton serveur.
    (essayes de rechercher sur google "automaton excel sur serveur distant" peut être retrouveras-tu cet article).

    edit: grilled par BB-69

    j'ai utilisé des librairies tierce pour faire ce que tu cherches à faire, tu génères des fichiers pour quel version d'excel?

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Ce sont des xls (donc pas xlsx), mais je ne les génère pas, tout ce que je fais c'est les ouvrir et les modifier (supprimer des lignes, changer la mise en page, les marges, ...)

    Tu utilises quoi comme librairies ?

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    moi j'avais un fichier xls (excel 2003) que j'ouvrais et remplissais, il n'avait que les en-tête de colonne rempli et je rajoutais donc les données, pour cela j'ai utilisé NPOI qui permet de générer le fichier directement en mémoire et de la télécharger depuis la mémoire donc aucun besoin de l'écrire sur le serveur et une génération beaucoup plus rapide

Discussions similaires

  1. [OL-2007] Ouvrir fichier Excel via une macro dans Outlook
    Par pepsister dans le forum VBA Outlook
    Réponses: 5
    Dernier message: 30/07/2014, 16h41
  2. Réponses: 1
    Dernier message: 01/12/2012, 09h47
  3. Réponses: 45
    Dernier message: 14/02/2008, 15h41
  4. [Excel] Écrire dans un fichier Excel existant
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 01/05/2006, 16h06
  5. lire / écrire dans un fichier excel au format xml
    Par crisflo dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 28/01/2006, 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