Word öffnen



  • Ja, den Pfad zur *.doc Datei musst du schon angeben :

    ShellExecute(NULL, "open", "C:\\Test.doc", NULL, NULL, SW_SHOWNORMAL);
    

    Und du sagst trotz des Pfades geht es nicht ???

    Gruß
    :: NoName ::



  • mmh jetzt geht's, wenn ich die Datei gleich ins C Verzeichnis kopier ohne Ordner klappts, ( vielleicht hab ich mich wo verschrieben)
    cool, besten dank



  • Huhu Stgt!

    Hast du an die Doppel-\ gedacht?

    Ich hab das hier grade ausprobiert, funktioniert einwandfrei. 😃

    ShellExecute(NULL, "open", "C:\\Programme\\Office\\Vorlagen\\Briefe & Faxe\\Eleganter Brief.dot", NULL, NULL, SW_SHOWNORMAL);
    


  • das war der Fehler mit den \

    okay, danke euch 🙂



  • Hallo Stgt,

    get es jetzt??

    MFG TaccoGo



  • yup,merci



  • hallo

    nun habe ich eine Combobox und wähle einen Eintrag aus. Wenn ich nun auf " Bericht erstellen" klicke ( in meinem Menü) soll eine Word Dokument geöffnet werden.
    Das Problem ist jetzt, dass ich immer in den Explorer wo meine sourcen drin stehen, gelange, (selbst wenn ich gleich auf "Bericht erstellen" klicke )

    Woran liegt das denn?

    In meiner OnSelchange Funktion steh unter anderem dies

    void Dilog::OnSelchangeCOMBOPruefverfahren() 
    {
    
    	try 
        {
    		...
                      ...		
    		m_strVorlagendatei = ("C:\\Vorlagen\\%s.DOT", bericht);
    

    und das in meiner

    void CMainFrame::OnBerichtBerichterstellen() 
    {
    	// Word Datei öffnen
    	ShellExecute(NULL, "open", m_strVorlagendatei, NULL, NULL, SW_SHOWNORMAL); 
    
    }
    


  • Hast Du bei Dir die Dateiendung .DOT mit Word verknüpft ?



  • yup, hab ich



  • hallo

    ich möchte den Wert einer Variablen in einer Klasse in einer anderen Klasse benutzen. Was muss ich da machen?



  • hat sich erledigt....



  • 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 🙂


Anmelden zum Antworten