Word öffnen



  • hallo

    kann mir jemand sagen , wie ich das Word Dokument öffnen kann
    Im Moment läuft das nur im Hintergrund, also ich sehs nicht.
    Ich möchte dass das Word DOkument geöffnet wird , wenn ich auf "Bericht erstellen " klicke.
    Was muss ich denn da tun ?

    Danke schon mal

    CLSID clsidWordApplication;
    
      HRESULT hr = CLSIDFromProgID(L"Word.Application", &clsidWordApplication);
    
      // erfolgreichen Aufruf prüfen:
      _ASSERT(SUCCEEDED(hr));
    
      if (SUCCEEDED(hr))
      {
        IDispatchPtr spIWord = NULL;
    
        // Word - Application erzeugen:
        hr = CoCreateInstance(clsidWordApplication, NULL, CLSCTX_SERVER, 
                 IID_IDispatch, (void **) (IDispatch *) &spIWord);
    
        // erfolgreichen Aufruf prüfen:
        _ASSERT(SUCCEEDED(hr));
    
        if (SUCCEEDED(hr) && (spIWord != NULL))
        {
          CComDispatchDriver spDispWord(spIWord);
    
          // Jetzt haben wir Zugriff auf die Dispatch - 
          // Schnittstelle der Word - Application.
          // Damit können wir uns jetzt das "Documents" - Objekt beschaffen:
    
          VARIANT vResult;
    
          {
            DISPID dispidDocuments = 0;
            hr = spDispWord.GetIDOfName(L"Documents", &dispidDocuments);
            hr = spDispWord.GetProperty(dispidDocuments, &vResult);
          }
    
          CComDispatchDriver spDocuments(vResult.pdispVal);
    
          if (SUCCEEDED(hr) && (spDocuments != NULL))
          {
            // Jetzt haben wir auch Zugriff auf die Documents - Collection.
    
            if (false)
            {
              // Durch den Aufruf der Add - Methode, 
              // ohne Parameter, erzeugen wir ein neues Dokument:
              hr = spDocuments.Invoke0(L"Add", &vResult);
            }
            else
            {
              // Durch den Aufruf der Open - Methode 
              // wird ein bestehendes Dokument geöffnet.
              // Hier rufen wir nur mit einem einzigen Parameter auf, dem Dateinamen.
              VARIANT vFilename;
              vFilename.vt = VT_BSTR;
              vFilename.bstrVal = SysAllocString(L"C:\\Vorlage\\Test.DOT");  		
              hr = spDocuments.Invoke1(L"Open", &vFilename, &vResult);
    
              SysFreeString(vFilename.bstrVal);
    
            }
    
            // Das aktuelle Dokument - Objekt beschaffen:
            IDispatchPtr spDokument = NULL;
    
            {
              VARIANT vDocNummer;
              vDocNummer.vt = VT_I4;
              vDocNummer.lVal = 1;
    
              hr = spDocuments.Invoke1(L"Item", &vDocNummer, &vResult);
    
              spDokument = vResult.pdispVal;
            }
    
            CComDispatchDriver spDispDokument(spDokument);
    
    		  // "Speichern unter" mit dem aktuellen 
              // Dokument durchführen, Format = "Document"
              VARIANT vNeuerName, vSpeichernFormat;
              vNeuerName.vt = VT_BSTR;
              vNeuerName.bstrVal = SysAllocString(L"C:\\Vorlage\\Test.DOC");
              vSpeichernFormat.vt = VT_I4;
              vSpeichernFormat.lVal = 0; // wdFormatDocument = 0, 
                                         // wdFormatText = 2, ...
    
              hr = spDispDokument.Invoke2(L"SaveAs", 
                    &vNeuerName, &vSpeichernFormat, &vResult);
    
              SysFreeString(vNeuerName.bstrVal);
    
            // Word-Application wieder zumachen:
            hr = spDispWord.Invoke0(L"Quit", &vResult);
          }
    
          // Alle Interfaces wieder befreien:
          spIWord = NULL;
        }
      }
      else
        printf("Es ist kein Word installiert!\n");
    


  • muss ich das so machen
    ??? .SetVisible(TRUE);

    aber was muss anstatt den ??? hin



  • bin über jeden Tipp dankbar 😉



  • Such mal nach nem Beispiel mit FindWindow (du brauchst einen Zeiger auf Word).

    Den Rest könnte SetWindowPos oder SetFocus erledigen - musste mal suchen.



  • okay, mach ich

    mmh, in einem anderen Versuch hat das mit SetVisible funktioniert, aber auch nur weil die das so gemacht haben

    _Application objWord;
    .....
    objWord.SetVisible(TRUE); //This shows the application.

    also kann ich das jetzt nocht so machen, oder? Schade...



  • Wenn du das gefunden hast, hast du es auch mal probiert?

    Ich hab schon mal gesagt: Ich habe nur Vorschläge - keine Musterlösungen! 🙄



  • hallo

    okay, hab's gefunden. Ich muss da einfügen

    {
    		// WORD SICHTBAR MACHEN
    		DISPID dispidVisible = 0;
    		vParam.vt = VT_BOOL;
    		vParam.boolVal = VARIANT_TRUE;
    
            hr = spDispWord.GetIDOfName(L"Visible", &dispidVisible);
            hr = spDispWord.PutProperty(dispidVisible, &vParam);
          }
    

    aber jetzt bekomme ich, wenn ich in die folgende Zeile reinstepp eine Exception
    CComDispatchDriver spDocuments(vResult.pdispVal);

    dann komm ich da rein

    CComDispatchDriver(IDispatch* lp)
    	{
    		if ((p = lp) != NULL)
    			p->AddRef();
    	}
    

    und in der Zeile p->AddRef(); bekomm ich ein Exception

    An was liegt das denn, weiß das jemand ?

    danke euch



  • hat sich erledigt



  • hallo

    kann mir jemand nochmal weiterhelfen, komm einfach nicht weiter

    Und zwar wird hier die Word Datei mit Namen test.doc geöffnet

    Nun möcht ich aber ansatt dem string "C:\\test.doc");,
    diese funktion aufrufen
    m_pSteuerung->GetVorlagendatei() (die in einer anderen Klasse sich befindet)
    Aber wie macht man das

    Wenn ichs einfach einsetz, dann komen folgende Fehler, aber ist ja klar, dass es so nicht geht:
    SysAllocString' : cannot convert parameter 1 from 'class CString' to 'const unsigned short *'

    // Durch den Aufruf der Open - Methode 
              // wird ein bestehendes Dokument geöffnet.
              // Hier rufen wir nur mit einem einzigen Parameter auf, dem Dateinamen.
              VARIANT vFilename;
              vFilename.vt = VT_BSTR;
              vFilename.bstrVal = SysAllocString(L"C:\\test.doc");
    

    danke für eure Hilfe 🙂



  • hallo

    was muss ich hier machen, bekomme folgende Fehlermeldung:
    'L' : undeclared identifier
    Versteh das nicht so ganz..

    VARIANT vFilename;
              vFilename.vt = VT_BSTR; 
    		  vFilename.bstrVal = SysAllocString(L(m_pSteuerung->GetVorlagendatei())); 
    hr = spDocuments.Invoke1(L"Open", &vFilename, &vResult);
    SysFreeString(vFilename.bstrVal);
    

    danke



  • Hast du schon versucht, es einfach wegzulassen?

    vFilename.bstrVal = SysAllocString(m_pSteuerung->GetVorlagendatei());
    


  • yup da bin ich grad 😉
    weiß nur nicht wie man konvertiert

    Die Fehlermeldung lautet:
    cannot convert parameter 1 from 'class CString' to 'const unsigned short *'


Anmelden zum Antworten