Word Automation - Drucken



  • Hallo,

    in einem vorherigen Post hatte ich schon mal bezüglich der Word Automation angefragt. Folgender Code war da rausgekommen:

    void CAutoProjectDlg::OnBnClickedRun()
    {
    
        // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
        CApplication app;  // app is the Word _Application object
    
        // Start Word and get Application object.
    
        if(!app.CreateDispatch(_T("Word.Application")))
        {
            AfxMessageBox(_T("Cannot start Word and get Application object."));
            return;
        }
        // Make the application visible and give the user control of
        // Microsoft Word.
        app.put_Visible(TRUE);
    
        // get the document list
        CDocuments docs(app.get_Documents());
        COleVariant varOPt(DISP_E_PARAMNOTFOUND, VT_ERROR);  // unused param
    
        // Open a Word doc
        CComVariant Filename = _T("D:\\Doc1.docx");
    
        // Open the file
        CDocument0 doc = docs.Open(&Filename, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt);
    
        // Get the formfield list
        CFormFields formfields(doc.get_FormFields());
    
        // Choose a formfield
        CComVariant Index=_T("Tag_Test");
        CFormField formfield = formfields.Item(&Index);
    
        // Change the result
        formfield.put_Result(_T("Test"));
    
        // Save Document
        //doc.Save();
    
        // Print the Document
        doc.PrintOut(varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt, varOPt,varOPt,varOPt,varOPt, varOPt,varOPt,varOPt);
    
        // Close Document
        doc.Close(varOPt, varOPt, varOPt);
    
        // Exit Word
        app.Quit(varOPt, varOPt, varOPt);
    }
    

    Jetzt habe ich folgendes Problem: es kann vorkommen, dass man einige Seiten zu drucken hat. Einige unserer Kopierer benötigen erst einige Zeit um aus ihrem Sleep-Modus in die Betriebsbereitschaft zu wechseln. Dementsprechend dauert es etwas, bis der Druckauftrag in der Queue gelandet ist. Nun springt der Code oben nach dem Abarbeiten von doc.PrintOut sofort auf doc.Close und dann auf app.quit. Beim Office kommt dann immer eine Meldung, dass noch offenen Druckaufträge vorliegen und ob man trotzdem schließen möchte. Wie bekomme ich das abgestellt? Rückgabewerte gibts keine die man prüfen könnte. Hat da jemand eine Idee?



  • Wenn du im Hintergrund Sachen drucken möchtest würde ich

    app.put_Visible(FALSE)
    

    setzen. Denn du willst doch nicht das sich Word dauernd im Vordergrund öffnet, oder?

    Ansonsten würde ich dann prinzipiell davon ausgehen, dass das gesamte Dokument gedruckt wird, bevor das Programm beendet wird.


  • Mod

    Schon mal daran gedacht einfach die Doku zu lesen?

    https://msdn.microsoft.com/de-de/library/office/ff837331.aspx
    1. Parameter Backgrounbd... würde ich mal auf VARIANT_FALSE setzen und dann durfte das auch kein Problem sein.



  • Martin Richter schrieb:

    Schon mal daran gedacht einfach die Doku zu lesen?

    https://msdn.microsoft.com/de-de/library/office/ff837331.aspx
    1. Parameter Backgrounbd... würde ich mal auf VARIANT_FALSE setzen und dann durfte das auch kein Problem sein.

    Ja klar, da schaue ich immer zuerst. Die Seite hab ich nicht gefunden. Ich bin nur auf das hier gestoßen: https://msdn.microsoft.com/de-de/library/24b803x9(v=vs.140).aspx

    Ich habs probiert, es scheint zu funktionieren. Vielen Dank.

    @Schlangenmensch: Das ist mir schon klar. Hier blendet man ja nur das Anwendungsfenster vom Office ein oder aus. Für das Drucken hat das keine Relevanz. Die Meldung kommt dort egal ob man das Fenster sieht oder nicht.


  • Mod

    Google liefert auf die Suche "winword printout" direkt den ersten Link!
    Nach was suchst Du denn bitte?



  • Martin Richter schrieb:

    Google liefert auf die Suche "winword printout" direkt den ersten Link!
    Nach was suchst Du denn bitte?

    Ich hab nach CDocument1::PrintOut gesucht. Da kam der andere Link. Aktuell klemmts aber grad wieder. Jetzt kommt ab und zu die Meldung: An den Stub wurde ein Nullzeiger übergeben.


Log in to reply