RTF Text in Word Dokument einfügen / Faxen aus Word

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

RTF Text in Word Dokument einfügen / Faxen aus Word

Beitrag von Rudolf »

Hallo,
ich würde gerne über ActiveX einen RTF Text in ein Word Dokument einfügen. Ich verwende DCRTF von eXpress++ zum Erstellen des Textes, funktioniert sehr gut. Wenn ich jedoch in ein bestehendes Word Dokument den RTF Text mit ActiveX einfügen, werden alle Formatierungen etc. als normaler Text dargestellt. Wie kann ich Word beibringen, dass es RTF ist und kein nomaler Text ?
Und noch eine Frage zu Word und ActiveX: habe bei den Methoden eine gefunden die sendfax() heisst. Wie kann man die anwenden ? Sieht so aus, als ob man bei installiertem Fax (welches auch immer) sofort aus Word an eine angegebene Adresse faxen kann. Das selbe gibt es für Email. Anbei ein Auszug aus JACE mit diesem Teil.

Grüsse
Rudolf





******************************************************************
//////////////////////////////////////////////////////////////////////
// Searches for a bookmark cBM by name in a given bookmark
// collection oBM, and assigns a new value cValue.
//////////////////////////////////////////////////////////////////////
FUNCTION ReplaceBookmark(oBM,cBM,cValue)
LOCAL lRet := oBM:Exists(cBM)
LOCAL oF
IF(lRet)
set_msg("Replace " + cBM + " with " + var2char(cValue))
oF := oBM:Item(cBM)
oF:Range:Text := cValue
oF:Destroy()
ENDIF
RETURN(lRet)



// HRESULT SendFax() (Word_Application:SendFax)
// HRESULT SendFax([in] BSTR Address, [in opt] *VARIANT Subject) (Word_Document:SendFax)

METHOD WordDocument:SendFax(Address,hOptionalParameters)
JAXPPCALLACTIVEXMETHODEX(::m_pUnk,256,1,0,@::ExceptionCodeBlock,hOptionalParameters,Address,8,2)
RETURN self
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Beitrag von UliTs »

Hallo Rudolf,

hast Du mal versucht, daß WORD-Dokument im RTF-Format zu speichern und anschließend den RTF-Text einzufügen?

Desweiteren habe ich mit dem Rtf-Editor vom Alaskabeispiel einen Rtf-Text erzeugt, diesen in die Zwischenablage getan und anschließend in WORD eingefügt. Dies hat bei mir funktioniert.
Vielleicht kannst Du auf diesem Weg den Rtf-Text einfügen.

Uli
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo Uli,
vielen dank für den Tip, habe gesehen, dass es im RTF Format sowieso viel leichter ist etwas einzufügen. Die Tag's sind relativ einfach zu finden im Text und dann kann ich den anderen RTF Text leicht einfügen. Werde für das ganze eine eigene Funktion schreiben, dann kann ich auch ohne ActiveX das Formular ausfüllen.
Grüsse
Rudolf
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

habs geschafft bis auf ein Problem, es gehen mir die Grafiken aus dem Originaldokument verloren. Ich vermute es liegt daran, dass XBase++ beim memoread() bzw. memowrit() irgendwas zerstört.
Grüsse
Rudolf


function rtfrepl(cForm,aData,cDest)
******************************************************************
local x,cBase1,cBase2,cRepl
// {\*\bkmkstart TEXT}[TEXT]{\*\bkmkend TEXT}
// {\*\bkmkstart SALUTATION}[SALUTATION]{\*\bkmkend SALUTATION}
local cM := memoread(cForm)
for x := 1 to len(aData)
cBase1 := "{\*\bkmkstart " + aData[x,1] + "}[" + aData[x,1] + "]"
cBase2 := "{\*\bkmkend " + aData[x,1] + "}"
cRepl := aData[x,2]
cM := strtran(cM,cBase1,cRepl)
cM := strtran(cM,cBase2,"")

next x
memowrit(cDest,cM)
WinAPIOpen(cDest)
return .t
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Rudolf,
sicherlich!
Ändere Deine RTF-Dokumente dahingehend, dass die Grafiken nicht eingebunden, sondern eingelinkt sind! Aber Achtung: Wann immer jemand die RTF-Datei versendet oder kopiert, muss er auch die eingebundenen Grafiken mitsenden!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo Martin,
danke für den Tip, aber ich glaube da gibts noch mehr Probleme. Die Textfelder werden auch nicht übernommen. In der RTF Vorlage sind sie aber noch drinnen. Ich sehe die Grafik auch als Binärdaten im RTF, aber sie werden nicht angezeigt. Werde mal weiter experimentieren, was bei der Bearbeitung verschwindet.
Grüsse
Rudolf
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Beitrag von Sören »

Hallo Rudolf,

ich verwende ebenfalls RTF-Formulare, die ich via Programm mit Daten fülle und in Word anzeigen lasse. In den Formularen sind auch Grafiken enthalten. Mit diesen Grafiken hatte ich anfangs auch Probleme, bis ich die folgende Funktion zum Speichern der RTF-Datei verwendete:

Code: Alles auswählen

FUNCTION MemoWrite( cFile, cText )

  LOCAL lWritten := .F.
  LOCAL nHandle, nBytes, lClose

  nHandle := FCreate( cFile )  // Datei erzeugen

  if nHandle != -1  // kein Fehler beim Anlegen der Datei

    nBytes := FWrite( nHandle, cText )  // String in Datei schreiben
    lClose := FClose( nHandle )  // Datei schliessen

    // alle Bytes geschrieben und Datei geschlossen
    if nBytes >= len( cText ) .and. lClose
      lWritten := .T.
    endif

  endif

RETURN lWritten
Zum Ausfüllen verwende ich vollkommen simple Platzhalter:

<%artnr%>
<%lieferant%>

... die ich (oder der Anwender selbst) direkt in Word einfüge.

Dann im Programm:

Code: Alles auswählen

cRTF := MemoRead( "Test.RTF" )

cRTF := StrTran( cRTF, "<%artnr%>", artikel->artnr )

MemoWrite( "Test1.RTF", cRTF )
Ich denke, so ähnlich machen es Alle, die mit RTF-Formularen arbeiten.

Tschüs,
Sören
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

ich habe mit RTF zwar noch nicht gearbeitet, aber wenn die Dokumente nach dem Speichern mit memowrit() Probleme haben, die mit der eigenen Funktion memowrite() nicht vorkommen, dann muss es wohl daran liegen, dass memowrit() nicht nur den Text speichert, sondern auch noch ein chr(26) (Dateiende) anhängt.

Deshalb verwende ich auch meine eigene Funktion.
Gruß
Hubert
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo,
hab das ganze jetzt nochmal probiert, wenn man eine Grafik einbindet, hängt sich das ganze beim Speichern total auf. Kann man nur mehr mit dem Taskmanager abbrechen. Ohne Grafik funktioniert es. Wie kann ich eigentlich eine Grafik einbinden, ohne dass sie direkt im Dokument ist ?
Grüsse
Rudolf
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Rudolf.

RTF bettet Grafiken immer ein. Der Trick bei solchen Dokumentenformaten besteht ja darin, nur ein Dokument zu erzeugen. RTF beherrscht allerdings auch Hyperlinks, aber das ist ein anderes Thema.

MemoWrit() hängt Chr(26) an, was aber - ich habe es gerade ausprobiert - nicht wirklich ein Problem sein sollte. Ich speichere Daten mit StrFile() aus den Xbase-Tools, und das ging bisher immer problemlos, auch bei Dateigrößen > 20 MB.
Herzlich,
Tom
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo Tom,
habe ein Beispiel zusammengestellt mit einem RTF Dokument und Logo drin. Da sieht man wie sich die Funktion memowrite() aufhängt. Ich habe das Beispiel auf www.c-tec.at/download/test.zip liegen, vielleicht hat jemand Zeit und Lust sich das mal anzusehen. Wäre super wenn das Problem gelöst werden könnte.
Grüsse
Rudolf
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Rudolf.

Kompiliert, gelinkt, laufenlassen, FAX2.RTF mit Logo und ersetzten Platzhaltern entsteht. Nix aufhängen. :?
Herzlich,
Tom
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo Tom,
danke fürs Teste, muss das ganze wohl auf einem anderen Rechner probieren. Bei meinen Kunden hat sich das ganze auch total aufgehängt, eigenartig. Aber ich bin schon mal beruhigt, dass es bei Dir funktioniert.
Grüsse
Rudolf
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Beitrag von Sören »

Hallo Rudof,

bin jetzt erst dazu gekommen, Dein Bsp. zu testen.

Bei mir dasselbe Ergebnis wie bei Tom: Nichts hängt sich auf, alles Ok!!!

Du sagst, das Programm hängt sich in MemoWrite() auf!? An welcher Stelle denn genau (welche Programmzeile)? Kannst Du das nachvollziehen?

Tschüs,
Sören
Antworten