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

ASP.NET Discussion :

iPhone, Generation d'un Word et ASP.NET


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut iPhone, Generation d'un Word et ASP.NET
    Bonjour à tous !!!

    Le cas que je vais vous exposer est assez atypique. Je galère depuis ce matin sur ça alors que je sais que je suis très proche de la fin de mon application.
    Je développe sur iPhone une application native qui récupère des informations et des photos via l'interface que j'ai créé. Sur la dernière "vue" de mon interface j'envois ces données.
    Jusque là tout va bien. Mes données sont bien envoyées et reçues par mon serveur asp.net.
    Là où ça se corse c'est lors de la génération du document word.
    J'ai tout d'abord testé en local (cad sur le serveur même). Et mon word est bien généré avec mes images.
    Là où ça coince c'est quand j'essais de générer ce word directement de l'iPhone.
    D'un point de vue fonctionnel, lorsque je clique sur le bouton d'envois, l'iPhone envoi des données (images et texte) sur mon serveur via la méthode POST.
    Je peux donc aisément récupérer ces informations de l'autre côté. Mais apparement je ne peux pas correctement utiliser le "msWord" qui est sur le serveur.

    Voici la fonction que j'appelle lorsque je génère mon word (et qui fonctionne très bien en local):

    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
    public void generateDocument()
            {
                // Connexion à Word
                string pathTemplates = Server.MapPath("./templates/");
                string pathDocuments = Server.MapPath("./Documents/");
                string pathImgBefore = Server.MapPath("./Upload/imageBefore.jpg");
                Object myFalse = false ;
                Object myTrue = true ;
     
                Microsoft.Office.Interop.Word.Application msWord = new Microsoft.Office.Interop.Word.Application();
                msWord.Visible = true; // mettez cette variable à true si vous souhaitez visualiser les opérations.
                object missing = System.Reflection.Missing.Value;
     
     
                // Attribuer le nom
                object fileName = pathDocuments + "rapport.doc";
     
                Microsoft.Office.Interop.Word.Document nvDoc;
     
                // Tester s'il s'agit d'un nouveau document ou d'un document existant.
                if (System.IO.File.Exists((string)fileName))
                {
                    // ouvrir le document existant
                    nvDoc = msWord.Documents.Open(ref fileName, ref missing, ref missing,
                                ref missing, ref missing, ref missing,
                                ref missing, ref missing, ref missing,
                                ref missing, ref missing, ref missing,
                                ref missing, ref missing, ref missing,
                                ref missing);
                }
                else
                {
                    // Choisir le template
                    object templateName = pathTemplates + "template.dot";
                    // Créer le document
                    nvDoc = msWord.Documents.Add(ref templateName, ref missing, ref missing, ref missing);
                }
     
     
                // Les champs de formulaire définis dans le modèle se nomment "choix1" et "choix2".
                object field = "choix1";
     
                nvDoc.FormFields.get_Item(ref field).Result = choix1;
                field = "choix2";
                nvDoc.FormFields.get_Item(ref field).Result = choix2;
                field = "imgBefore";
                Object imgRange = nvDoc.FormFields.get_Item(ref field).Range;
     
                nvDoc.InlineShapes.AddPicture(pathImgBefore, ref myFalse, ref myTrue, ref imgRange);
     
                // Sauver le document
                nvDoc.SaveAs(ref fileName, ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing, ref missing, ref missing,
                            ref missing);
     
                // Fermer le document
                nvDoc.Close(ref missing, ref missing, ref missing);
     
                // Fermeture de word
                msWord.Quit(ref missing, ref missing, ref missing);
            }
    La première fois que j'ai testé ceci à partir de l'iPhone j'ai reçu cette erreur :

    La récupération de la fabrique de classe COM pour le composant avec le CLSID {000209FF-0000-0000-C000-000000000046} a échoué en raison de l'erreur suivante : 80070005.
    à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Microsoft.Office.Interop.Word.Application msWord = new Microsoft.Office.Interop.Word.Application();
    J'ai donc pu en conclure qu'il y avait une histoire de permission dans tout ça. Je suis donc directement intervenu dans les services de composants afin de donner les droits au composant "Microsoft Word Application". Ce composant étant absent j'ai directement donné les droits (comme un sauvage) à toute l'entité (Mon serveur) pour qu'on puise accéder à ces composant depuis l'extérieur.

    Depuis cela, je n'ai plus l'erreur ci dessus. Par contre, j'en ai une nouvelle :-) :
    La référence d'objet n'est pas définie à une instance d'un objet.
    Cette erreur se produit à cette ligne là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nvDoc.FormFields.get_Item(ref field).Result = choix1;
    J'en conclu(après certains tests) que nvDoc est nul. Et c'est là où je coince ... je ne sais pas pouruoi nvDoc est nul alors que la variable msWord elle ne l'est pas ...

    Est ce que quelqu'un aurait une idée ?? Je suis sur que c'est encore une histoire de permission ou quelque chose comme ça parce qu'en "local" ce script marche très bien et me génère un beau document word tout frais !!!

    Merci d'avance pour vos idées ou toute autre aide !!!

    MoKeS

  2. #2
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    pourquoi n'utilises tu pas le debugger pour en savoir plus?

    Dans visual studio , Debug, attach to process et la tu choisis ton instance de serveur web. Ainsi lorsque tu feras ta demande avec ton iphone tu passeras directement en debug avec VS et la situation sera plus claire certainement avec les infos de VS...

    Bon courage à toi,

  3. #3
    Membre éclairé
    Homme Profil pro
    DBA - Développeur BI
    Inscrit en
    Avril 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : DBA - Développeur BI
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2003
    Messages : 442
    Par défaut
    Je suis curieux de savoir comment tu communique avec ton iphone. Cette interface dont tu parles elle est développée en quel langage. Je dois faire une appli pour iphone alors je suis interressé par ta technique.

  4. #4
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Citation Envoyé par Herlece Voir le message
    Je suis curieux de savoir comment tu communique avec ton iphone. Cette interface dont tu parles elle est développée en quel langage. Je dois faire une appli pour iphone alors je suis interressé par ta technique.
    Si tu souhaites développer un application pour iphone, tu dois passer par Objective C, tu auras plus d'infos sur le site officiel iPhone Dev Center.

    Ici, MoKeS parle d'une application Web ASP.NET optimisée pour iPhone.

Discussions similaires

  1. Publipostage Word en asp.net
    Par Hendy dans le forum ASP.NET
    Réponses: 0
    Dernier message: 22/10/2014, 16h04
  2. Créer un document Word avec ASP.Net
    Par Coroebus dans le forum ASP.NET
    Réponses: 1
    Dernier message: 02/03/2013, 13h44
  3. Réponses: 1
    Dernier message: 01/10/2008, 11h33
  4. document word ASP.NET C#
    Par neo_2000_2006 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 08/08/2008, 16h13
  5. lire un doc word via vb.net ou asp.net
    Par ado.net dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 10/04/2008, 13h12

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