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

Windows Forms Discussion :

imprimer document word


Sujet :

Windows Forms

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut imprimer document word
    Bonjour, je genere un document word et je souhaiterai pouvoir lancer l'impression a partir de ma form.
    Merci de votre aide

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Lancer la commande suivante:
    "C:\Program Files\Microsoft Office\Office10\winword.exe" "C:\My Documents\doc1.doc" /mFilePrintDefault

    Un code simple pour lancer un programme avec des arguments:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Exemple avec notepad :
    Process pgm = new Process();
    pgm.StartInfo.FileName   = "notepad.exe";
    pgm.StartInfo.Arguments = "MonFichier.txt";
    pgm.Start();
    Pour fermer automatiquement Word, essayer (sans garantie) :

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    merci, je vais tester.
    Petite question, sachant que je genere le document en mettant word a 'non visible' puis ferme word. est ce que cette commande suffirait?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C:\My Documents\doc1.doc" /mFilePrintDefault
    Merci
    j'ai testé ta commande complete ca marche bien, mais est ce qu'il y aurait pas un moyen de lancer l'impression en fond en passant en parametre le nom du document.
    Le probleme avec ta commande, c'est que tu dois deja connaitre le path de l'exe winword, puis ensuite lancer word.

    Merci de ton aide

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Pour retrouver le path d'Access : GetOfficeAppPath("Access.Application", "msaccess.exe");
    Je suppose que c'est transposable pour word.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    oui j'avais vu ca dans un de tes anciens post.
    mais j'ai la contrainte que mon document a imprimer de doit pas etre"visible"..
    une idée?

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    En faisant un Process.start avec startinfo, exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
    startInfo.WindowStyle = ProcessWindowStyle.Minimized;
    // or = ProcessWindowStyle.Hidden; 
    Process.Start(startInfo);
    startInfo.Arguments = "www.northwindtraders.com";
    Process.Start(startInfo);

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    ok merci je vais tester ca et dire si c'est ok.

    j'ai testé en mettant ceci sur un event click mais visiblement ca ne marche (je n'ai pas su le faire marcher)
    as tu une idée?
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     private void button1_Click(object sender, EventArgs e)
            {
                CreateDoc(0, false); //genere mon doc word avec //le chemin stocké dans sPath
                ProcessStartInfo startInfo = new ProcessStartInfo("winword.exe");
                startInfo.WindowStyle = ProcessWindowStyle.Minimized;
                // or = ProcessWindowStyle.Hidden; 
                Process.Start(startInfo);
                startInfo.FileName = sPath;
                startInfo.Arguments = "/mFilePrintDefault";
                Process.Start(startInfo);
            }

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    ProcessStartInfo("winword.exe");
    Il faudrait le path complet.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    non pas besoin d'avoir le path complet.
    avec le code suivant j'ai juste ke splascscreen de word.sinon tout le reste est invisible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     private void button1_Click(object sender, EventArgs e)
            {
                CreateDoc(0, false);
                ProcessStartInfo startInfo = new ProcessStartInfo("winword.exe");
                startInfo.CreateNoWindow = false;
                startInfo.WindowStyle = ProcessWindowStyle.Hidden;
                // or = ProcessWindowStyle.Hidden; 
                //Process.Start(startInfo);
                startInfo.Arguments = sPath;
                startInfo.Arguments = "/q";
                startInfo.Arguments = "/mFilePrintDefault";
                Process.Start(startInfo);
            }

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    startInfo.Arguments += " " + "/q";
    startInfo.Arguments += " " + "/mFilePrintDefault";

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    ok, merci je teste.

  12. #12
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut
    ça ne fonctionnerait pas plus facilement avec les interop sur une instance de word invisible et la commande qui va bien pour imprimer ?

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    peux tu me donner plus d'explication ca m'interesse.
    ou un exemple si tu en as un.
    merci

  14. #14
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903

  15. #15
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut
    Il faut créer l'interop pour word en ajoutant une référence COM sur la biblitohèque Office Word (dépend de la version installée sur le pc mais en général, la version d'office 97 reste compatible avec les suivantes).

    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
    private void button2_Click(object sender, EventArgs e)
    {
     
        object missing = Missing.Value;
     
        // Création d'une instance de Word
        Microsoft.Office.Interop.Word._Application aWord;
        aWord = new Microsoft.Office.Interop.Word.Application();
        aWord.Visible = false; // ne pas faire apparaître Word
     
        // Ouverture du fichier
        object file = "D:\\Test.doc";
        Microsoft.Office.Interop.Word._Document aDoc = 
            aWord.Documents.Open(ref file, 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);
     
        // On l'imprime sur l'imprimante par défaut
        aDoc.PrintOut(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, ref missing, ref missing, ref missing);
     
        // On ferme word
        aWord.Quit(ref missing, ref missing, ref missing);
    }

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    c(est exactement ce que je veux mais ca ne marche pas. rien n'est envoyé a l'imprimante .....
    voici le code que j'execute. Aucune erreur est catché lorsque je l'execute

    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
    124
    125
    126
            public void CreateDoc(int NumRelance, bool IsVisible) 
     
            {
                string sPathSaveFacture = string.Empty;
                if ((tBoxFacture.Text.Length > 0) && (tBoxRaisonSocialeClient.Text.Length > 0))
                {
                    Microsoft.Office.Interop.Word.Application msWord = new Microsoft.Office.Interop.Word.Application();
                    if (IsVisible == true)
                        msWord.Visible = true;
                    else
                        msWord.Visible = false;
     
                    object missing = System.Reflection.Missing.Value;
                    string sDateFile = dateFacture.Text.Replace("/", "_");
                    // Attribuer le nom
                    object fileName = string.Empty;
                    sPathSaveFacture = Environment.CurrentDirectory + "\\Content\\" + DateTime.Now.Year.ToString();
                    object pwd = "XXX";
     
     
     
                    if (Directory.Exists(sPathSaveFacture) == false)
                        Directory.CreateDirectory(sPathSaveFacture);
     
                    switch (NumRelance)
                    {
                        case 0: fileName = @sPathSaveFacture + "\\" + "Facture_" + tBoxFacture.Text + "_" + tBoxRaisonSocialeClient.Text + "_" + sDateFile + ".doc"; break;
                        case 1: fileName = @sPathSaveFacture + "\\" + "Relance1_" + tBoxFacture.Text + "_" + tBoxRaisonSocialeClient.Text + "_" + sDateFile + ".doc"; break;
                        case 2: fileName = @sPathSaveFacture + "\\" + "Relance2_" + tBoxFacture.Text + "_" + tBoxRaisonSocialeClient.Text + "_" + sDateFile + ".doc"; break;
                        case 3: fileName = @sPathSaveFacture + "\\" + "Relance3_" + tBoxFacture.Text + "_" + tBoxRaisonSocialeClient.Text + "_" + sDateFile + ".doc"; break;
     
                        default: fileName = @"Facture_" + tBoxFacture.Text + "_" + tBoxRaisonSocialeClient.Text + "_" + sDateFile + ".doc"; break;
                    }
     
     
                    Microsoft.Office.Interop.Word.Document nvDoc;
     
                    // Tester s'il s'agit d'un nouveau document ou d'un document existant.
                    if (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);
     
                        try
                        {
                            nvDoc.Unprotect(ref pwd);
                        }
                        catch {}
                    }
                    else
                    {
     
                        // Choisir le template
                        object templateName = "";
     
                        switch (NumRelance)
                        {
                            case 0: templateName = Environment.CurrentDirectory + "\\Content\\FactureEMV3.dot"; break;
                            case 1: templateName = Environment.CurrentDirectory + "\\Content\\Relance1.dot"; break;
                            case 2: templateName = Environment.CurrentDirectory + "\\Content\\Relance2.dot"; break;
                            case 3: templateName = Environment.CurrentDirectory + "\\Content\\Relance3.dot"; break;
     
                            default: templateName = Environment.CurrentDirectory + "\\Content\\FactureEMV3.dot"; break;
                        }
     
                        // Créer le document
                        nvDoc = msWord.Documents.Add(ref templateName, ref missing, ref missing, ref missing);
                    }
     
                    object field = "NumFacture";
                    nvDoc.FormFields.get_Item(ref field).Result = tBoxFacture.Text;
     
                    field = "Raison_Social";
                    nvDoc.FormFields.get_Item(ref field).Result = tBoxRaisonSocialeClient.Text;
     
                    field = "Adresse";
                    nvDoc.FormFields.get_Item(ref field).Result = tBoxAdresseClient.Text;
     
                    field = "CP";
                    nvDoc.FormFields.get_Item(ref field).Result = tBoxCPClient.Text;
     
                    field = "Ville";
                    nvDoc.FormFields.get_Item(ref field).Result = tBoxVille.Text;
     
     
                     pwd = "XXX";
                    object noReset = true;
                    object useIRM = true;
                    object enforce = true;
     
                    nvDoc.Protect2002(Microsoft.Office.Interop.Word.WdProtectionType.wdAllowOnlyReading,
                    ref noReset, ref pwd);
     
                    // 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);
     
                    //sPath est utilisé pour l'attachement au mail
                    sPath = fileName.ToString();
     
                   // nvDoc.PrintPreview();
                    if (IsVisible == false)
                    {
                        nvDoc.PrintOut2000(ref missing, ref missing, ref missing,
                           ref missing, ref missing, ref missing, ref fileName, 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);
                    }
                }
                else
                { MessageBox.Show("Impossible d'éditer le document, \n\rveuillez saisir/selectionné un client.", 
                    "Erreur edition facture", MessageBoxButtons.OK, MessageBoxIcon.Error); }
            }

  17. #17
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut version du code
    ca ne marche pas. rien n'est envoyé a l'imprimante .....
    euh ... le code que tu écris ici n'est pas sensé imprimer quelque chose. Soit ton copier-coller était raté, soit je suis très mal réveillé ce matin


    J'ai oublié de préciser que le code que j'ai écris ici pour l'impression est basé sur Word 2007, pas forcément compatible avec ta version d'office. Il faut adapter pour ton cas.

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    Desolé j'ai oublié de DEcommenter l'instruction qui envoi le doc en impression (chose faite j'ai edité mon post precedent).
    Je suis sur office 2003, quelles sont les modifications a apportés, la fonction PrintOut a changer??
    Merci

  19. #19
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut
    les paramètres peuvent avoir changé. Je n'ai pas de version 2003 ici pour comparer. Regarde bien les noms des paramètres demandés dans le corps de la fonction.

    Est-ce que ton code passe bien sur la ligne ? As-tu vérifié en posant un piont d'arrèt sur la ligne ? PArce que je vois que tu testes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (IsVisible == false)
    Ensuite, tu utilises PrintOut2000 et moi la fonction PrintOut. As-tu essayé cette dernière ?

  20. #20
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    oui, j'ai mis un point d'arret et on arrive bien sur l'instruction printOut, et j'ai bien essayé les deux fonctions PrintOut et PrintOut200 les deux ne fonctionnent pas.
    PS: j'ai verifié dans MSDN et les paramètres sont les memes pour 2003 que pour 2007
    http://msdn.microsoft.com/en-us/libr....printout.aspx

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Imprimer un document word
    Par bremer dans le forum Langage
    Réponses: 1
    Dernier message: 24/09/2008, 11h38
  2. Réponses: 2
    Dernier message: 14/09/2008, 19h41
  3. Comment Imprimer un document Word depuis Delphi ?
    Par jwff_22 dans le forum Delphi
    Réponses: 1
    Dernier message: 28/03/2007, 20h24
  4. [VBA-E] Imprimer la page souhaitée d'un document word
    Par Geoffray dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 10/06/2006, 19h04
  5. Réponses: 6
    Dernier message: 06/04/2006, 10h43

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