Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: MFC (Visual C++) ::  Word Automation - Drucken     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
AndyDD
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.07.2004
Beiträge: 933
Beitrag AndyDD Mitglied 10:54:31 01.02.2017   Titel:   Word Automation - Drucken            Zitieren

Hallo,

in einem vorherigen Post hatte ich schon mal bezüglich der Word Automation angefragt. Folgender Code war da rausgekommen:
C++:
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
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?
Schlangenmensch
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.11.2008
Beiträge: 215
Beitrag Schlangenmensch Mitglied 12:19:24 01.02.2017   Titel:              Zitieren

Wenn du im Hintergrund Sachen drucken möchtest würde ich
C++:
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.
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 15257
Beitrag Martin Richter Moderator 13:04:33 01.02.2017   Titel:              Zitieren

Schon mal daran gedacht einfach die Doku zu lesen?

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

_________________
Martin Richter (MVP für C++ von 2000 bis 2015) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
AndyDD
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.07.2004
Beiträge: 933
Beitrag AndyDD Mitglied 14:34:16 01.02.2017   Titel:              Zitieren

Martin Richter schrieb:
Schon mal daran gedacht einfach die Doku zu lesen?

https://msdn.microsoft.co ....... rary/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.


Zuletzt bearbeitet von AndyDD am 14:35:15 01.02.2017, insgesamt 1-mal bearbeitet
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 15257
Beitrag Martin Richter Moderator 16:55:53 01.02.2017   Titel:              Zitieren

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

_________________
Martin Richter (MVP für C++ von 2000 bis 2015) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
AndyDD
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.07.2004
Beiträge: 933
Beitrag AndyDD Mitglied 18:14:22 01.02.2017   Titel:              Zitieren

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.
C++ Forum :: MFC (Visual C++) ::  Word Automation - Drucken   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.