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

API, COM et SDKs Delphi Discussion :

imprimer un fichier excel


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut imprimer un fichier excel

    bonjour,

    j'utilise printdialog pour imprimer un fichier excel. Tout se passe bien.

    Par contre lorsque je choisi une autre imprimante (toujours avec printdialog1), le fichier s'imprime toujours sur l'imprimante par défaut.

    Quelqu'un a t'il une idée pour resoudre ce probleme ?

    A+

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,

    Après avoir appelé PrintDialog, comment lancez-vous l'impression du fichier Excel ?

    --
    Philippe.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut
    Bonjour,

    je fais un print de mon classeur

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut
    Re Bonjour à tous,

    j'ai trouvé ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    uses {...}, Printers;
     var
     sUserPrinter: OleVariant;
     begin
     { ... }
     // PrintDialog changes your application's active printer to the
     // printer selected. If the user clicks OK on the dialog, then
     // get the active printer from the Printer object.
     if PrintDialog.Execute then
     sUserPrinter := Printer.Printers[Printer.PrinterIndex];
     { ... }
     // Using late binding, pass the printer name as a named parameter.
    XLWorkbook.PrintOut(ActivePrinter := sUserPrinter);
    {...}
    uis celui ci

    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
    //some print drivers change FPU control word to something that kills
     other activex stuff
     procedure SaveFPUctrl(var oldSave:word);
     var wsave:word;
     begin
     asm
     fstcw wsave;
     end;
     oldSave:=wsave;
     end;
     procedure RestoreFPUctrl(oldSave:word);
     begin
     asm
     fldcw oldsave;
     end;
     end;
     procedure TFormGeneralGraph.BitBtnPrintClick(Sender: TObject);
     var
     pd: tprintdialog;
     BCollate :integer;
     ADevice, ADriver, APort: array[0..255] of char;
     ADeviceMode: THandle;
     strPrinterName:widestring;
     oldSaveFPU:word;
     begin
     SaveFPUctrl( oldSaveFPU);
     try
     pd:=tprintdialog.create(self{nil});
     with pd do begin
     options:=[poWarning {poPrintToFile}];
     MinPage:=1;
     maxPage:=1;
     FromPage:=1;
     ToPage:=1;
     Copies:=1;
     Collate:=false;
     PrintRange:=prAllPages;
     PrintToFile:=false;
     end;
     if (pd.execute) then begin
     if pd.Collate
     then bcollate:=1
     else bcollate:=0;
     screen.cursor:=crhourglass;
     try
     //pickup any printer changes
     //Win 98 will list "devicexxx On Port xxx" we only want
     "devicexxxx"
     printer.GetPrinter(ADevice, ADriver, APort,ADeviceMode);{get
     only device name ??}
     strPrinterName:=widestring(ADevice);
     try
     {PrintOut(From: OleVariant; To_: OleVariant; Copies: OleVariant;
     Preview: OleVariant;
     ActivePrinter: OleVariant; PrintToFile:
     OleVariant; Collate: OleVariant;
     lcid: Integer);}
     ExcelChart1.Printout(pd.FromPage{1},//from
     pd.ToPage, //to
     pd.Copies, //copies
     0{preview},
     strPrinterName,//ActivePrinter
     emptyparam, //tofile
     Bcollate); //collate
     except
     MessageDlg('Error calling Printout', mtwarning,[mbok],0);
     end;
     finally
     screen.cursor:=crdefault;
     end;
     end;//if do print
     finally
     RestoreFPUctrl(oldSaveFPU);
     end;
     //ExcelChart1.Printout; //to default
     end;
    J'ai adapté ces deux codes et effectivement cela marche

    J'ai pas tout compris, mais l'essentiel est me semble t'il qu'il faut utiliser un contrôleur Automation.

    Aprés pas mal de reherche,j'ai trouvé ceci dans l'aide de DELPHI :
    Les étapes suivantes illustrent la manière de créer un contrôleur Automation imprimant un document avec Microsoft Word.
    Avant de commencer, créez un nouveau projet composé d'une fiche, d'un bouton et d'une boîte de dialogue Ouvrir (TOpenDialog). Ces contrôles constituent le contrôleur Automation.

    Etape 1 : création d'un objet Variant pour Word Basic

    Pour créer un objet Variant pour Word Basic,

    Dans le gestionnaire d'événement OnClick du bouton du contrôleur Automation, ajoutez le code suivant :

    uses ComObj;

    procedure TForm1.Button1Click(Sender:TObject);
    var
    V: OleVariant;
    begin
    V := CreateOleObject('Word.Basic'); (* Crée l'objet Automation *)
    V.Insert ('Delphi dit bonjour !'); (* Fait quelque chose *)
    end;

    Ce code affecte un objet Automation au variant V. Cet objet est un serveur Automation qui réside à l'intérieur de Word. La méthode Insert n'est ni une méthode ni une fonction Pascal Objet et elle ne fait pas non plus partie de l'API Windows. Insert est une méthode Word que vous pouvez appeler directement depuis l'application Delphi en utilisant l'Automation.
    Remarquez qu'un seul paramètre est passé à la méthode Insert, alors qu'elle a d'autres paramètres. C'est parce que Word supporte le passage de paramètres facultatifs comme indiqué dans Exécution en arrière-plan d'un serveur Automation.

    Etape 2 : utilisation de la méthode Variant pour imprimer le document

    Pour utiliser la méthode Variant::Exec pour imprimer le document :

    Dans le gestionnaire d'événements OnClick du bouton du contrôleur Automation, ajoutez le code suivant :

    if OpenDialog1.Execute then

    V.FilePrint(OpenDialog1.FileName);
    A+

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,

    Cela me parait bien compliqué comme solution.
    Je viens de faire un test et voila comment je sélectionne une imprimante et j'imprime un tableau Excel : Il me faut un composant TPrinterSetupDialog et voila le bout de code intéressant :
    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
    var
      ExcelApp : TExcelApplication;
      PrinterName: String;
    begin
      ExcelApp := TExcelApplication.Create(Application.MainForm);
      ExcelApp.Connect;
      // Nouveau tableau
      ExcelApp.Workbooks.Add(Null, 0);
      // Je rends Excel visible
      ExcelApp.Visible[0] := True;
      // Pour l'exemple, je trace un quadrillage
      ExcelApp.Range['A1', 'C5'].Borders.Value := 1;
      // Et je remplis des cellules
      ExcelApp.Range['D7', 'F9'].Cells.Value := 'Toto';
     
      // Sélection de l'imprimante, je récupère ou non le nom
      if PrinterSetupDialog1.Execute then
        // Imprimante sélectionnée
        PrinterName := Printer.Printers[Printer.PrinterIndex]
      else
        // Imprimante actuellement sélectionnée par l'application
        PrinterName := '';
      // J'imprime la feuille courante du tableau courant
      ExcelApp.ActiveWorkbook.PrintOut(Null, Null, 1, False, PrinterName, False, True, Null, 0);
      // Je ferme le tableau
      ExcelApp.ActiveWorkbook.Close(False, Null, Null, 0);
    end;
    --
    Philippe.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment imprimer un fichier Excel ?
    Par babylover919 dans le forum Documents
    Réponses: 12
    Dernier message: 12/01/2011, 17h01
  2. imprimer un fichier excel
    Par magictom42 dans le forum Access
    Réponses: 4
    Dernier message: 25/10/2006, 06h16
  3. [Excel] Imprimer un fichier excel avec php
    Par amarcil dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 08/06/2006, 20h30
  4. Imprimer un fichier Excel
    Par therouxy dans le forum Langage
    Réponses: 1
    Dernier message: 23/11/2005, 12h34
  5. Imprimer un fichier EXCEL
    Par bianconeri dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/03/2005, 11h15

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