Im Menü <Search, Replace> anwählen oder Ctrl+h und dann die Option "Replace in Selection" anwählen.
Beiträge von qwert23
-
-
Offensichtlich verwendest Du das OutlookUDF (nicht OutlookEX-UDF), stimmts?
Dein Beispiel scheint aus Outlook.au3 zu sein. Diese stellt zunächst ersteinmal die Verbindung zu Outlook her.
[autoit]
Hier der Auszug aus der Outlook.au3 dazu:
[/autoit]
;===============================================================================
;
; Function Name: _OutlookOpen()
; Description: Open a connection to Microsoft Outlook.
; Syntax.........: _OutlookOpen()
; Parameter(s): None
; Requirement(s): AutoIt3 with COM support (post 3.1.1)
; Return Value(s): On Success - Returns new object identifier
; On Failure - Returns 0 and sets @ERROR > 0
; @ERROR = 1 - Unable to Create Outlook Object.
; Author(s): Wooltown
; Created: 2009-02-09
; Modified: -
;
;===============================================================================
Func _OutlookOpen()
Local $oOutlook = ObjCreate("Outlook.Application")
If @error Or Not IsObj($oOutlook) Then
Return SetError(1, 0, 0)
EndIf
Return $oOutlook
EndFunc
;===============================================================================
;
; Function Name: _OutlookSendMail()
; Description: Send an email using Microsoft Outlook.
; Syntax.........: _OutlookSendMail($oOutlook, $sTo = "", $sCc = "", $sBCc = "", $sSubject = "", $sBody = "", $sAttachments = "", $iBodyFormat = $olFormatUnspecified, $iImportance = $olImportanceNormal, $sWarningClick = "")
; Parameter(s): $oOutlook - Outlook object opened by a preceding call to _OutlookOpen()
; $sTo - Optional: The recipiant(s), separated by ;
; $sCc - Optional: The CC recipiant(s) of the mail, separated by ;
; $sBCc - Optional: The BCC recipiant(s) of the mail, separated by ;
; $sSubject - Optional: The Subject of the mail
; $sBody - Optional: The Body of the mail
; $sAttachments - Optional: Attachments, separated by ;
; $iBodyFormat - Optional: The Bodyformat of the mail, default = $olFormatUnspecified
; $iImportance - Optional: The Importance of the mail, default = $olImportanceNormal
; $sWarningClick - Optional: The Entire SearchString to 'OutlookWarning1.exe', Default = None
; Requirement(s): AutoIt3 with COM support (post 3.1.1)
; Return Value(s): On Success - Returns 1
; On Failure - Returns 0 and sets @ERROR > 0
; @ERROR = 1 - No To, Cc or BCc specified.
; @ERROR = 2 - OutlookWarning1.exe not found.
; @ERROR = 9 - ObjEvent error.
; Author(s): Wooltown
; Created: 2009-02-09
; Modified: 2009-02-24 - Several attachments didn't work
;
;===============================================================================
Func _OutlookSendMail($oOutlook, $sTo = "", $sCc = "", $sBcc = "", $sSubject = "", $sBody = "", $sAttachments = "", $iBodyFormat = $olFormatPlain, $iImportance = $olImportanceNormal, $sWarningClick = "")
Local $iRc = 0, $asAttachments
If $sTo = "" And $sCc = "" And $sBCc = "" Then
Return SetError(1, 0, 0)
EndIf
If $sWarningClick <> "" And FileExists($sWarningClick) = 0 Then
Return SetError(2, 0, 0)
Else
Run($sWarningClick)
EndIf
Local $oOuError = ObjEvent("AutoIt.Error", "_OutlookError")
Local $oMessage = $oOutlook.CreateItem($olMailItem)
With $oMessage
.To = $sTo
.Cc = $sCc
.Bcc = $sBCc
.Subject = $sSubject
.Body = $sBody
.BodyFormat = $iBodyFormat
.Importance = $iImportance
If $sAttachments <> "" Then
$asAttachments = StringSplit($sAttachments,";")
For $iNumOfAttachments = 1 to $asAttachments[0]
.Attachments.Add($asAttachments[$iNumOfAttachments])
Next
EndIf
.Send
$iRc = @ERROR
EndWith
If $iRc = 0 Then
Return 1
Else
Return SetError(9, 0, 0)
EndIf
EndFunc
;===============================================================================Was soll denn dann passieren?
Am Beispiel einer E-Mail könnte das exemplarisch so aussehen (hier mit HTML-Body):
[autoit]
[/autoit]
#include <Outlook.au3>
$oOutlook = _OutlookOpen()
_OutlookSendMail($oOutlook, empfä[email='nger@mail.com'][/email], [email='ccEMail@mail.de'][/email] ,"", "Hier steht der Betreff","Anhangxyz.txt",$olFormatHTML,"","")Es gab dazu einige sehr gute .au3 Hilfedateien mit Beispielen, die Du mit Sicherheit vorliegen hast. Die einzelnen Optionen sind selbsterklärend.
In Deinem Verzeichnis müssen auch die OutlookWarning...Dateien vorhanden sein.Das Outlook UDF funktioniert perfekt. Mit dem neuen OutlookEX UDF stehen noch mehr Möglichkeiten zur Verfügung.
-
Da hat bobekos absolut recht....
Hier ein Lösungsbeispiel:
_IconDock_IconAddFile($hIconDock, $aIcon[1], 0, "_EventFunction", $IconDock_LBUTTONUP) ; neuer Aufruf zur Msgbox
und dann noch die Funktion Func _EventFunction($hID, $iIconIndex, $iEventMsg) einfügen.Kommt das Deinen Vorstellungen nahe?
[autoit]#include "IconDock.au3"
[/autoit][autoit][/autoit][autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>Global $iWidth = 800
[/autoit][autoit][/autoit][autoit]
Global $iHeight = 200
Global $iIconSizeMin = 64
Global $iIconSizeMax = 128Global $aIcon[8] = [7]
[/autoit][autoit][/autoit][autoit]
$aIcon[1] = @WindowsDir & "\explorer.exe"
$aIcon[2] = @SystemDir & "\taskmgr.exe"
$aIcon[3] = @SystemDir & "\write.exe"
$aIcon[4] = @SystemDir & "\notepad.exe"
$aIcon[5] = @SystemDir & "\osk.exe"
$aIcon[6] = @SystemDir & "\charmap.exe"
$aIcon[7] = @SystemDir & "\mspaint.exe"Opt("GUIOnEventMode", 1)
[/autoit][autoit][/autoit][autoit]Global $hGui = GUICreate("Resize window", $iWidth, $iHeight, Default, Default, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_SIZEBOX))
[/autoit][autoit][/autoit][autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")Global $hIconDock = _IconDock_Create(0, 0, $iWidth, $iHeight, _
[/autoit][autoit][/autoit][autoit]
BitOR($IconDock_Align_Horizontal, $IconDock_Center), $IconDock_Up, $iIconSizeMin, $iIconSizeMax, True, $hGui)_IconDock_SetOffset($hIconDock, 10)
[/autoit][autoit][/autoit][autoit]GUISetState()
[/autoit][autoit][/autoit][autoit]_IconDock_BeginUpdate($hIconDock)
[/autoit][autoit][/autoit][autoit]
;~ For $i = 1 To $aIcon[0]
;$TEst = _IconDock_IconAddFile($hIconDock, $aIcon[1])
;GUIctrlSetOnEvent($TEst, "_Test")
_IconDock_IconAddFile($hIconDock, $aIcon[1], 0, "_EventFunction", $IconDock_LBUTTONUP) ; neuer Aufruf zur Msgbox
;~ Next
_IconDock_EndUpdate($hIconDock)
ConsoleWrite(@CRLF & "> Resize window" & @CRLF)GUIRegisterMsg($WM_SIZE, "WM_SIZE")
[/autoit][autoit][/autoit][autoit]
GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO")While 1
[/autoit][autoit][/autoit][autoit]
Sleep(50)
WEndFunc _EventFunction($hID, $iIconIndex, $iEventMsg) ; funktion zur Abfrage des Icon
[/autoit][autoit][/autoit][autoit]
Switch $hID
Case $hIconDock
Switch $iIconIndex
Case 1
MsgBox(0,"Icon gewählt","...hier bin ich ")EndSwitch
[/autoit][autoit][/autoit][autoit]
EndSwitch
EndFunc ;==>_EventFunctionFunc _Test()
[/autoit][autoit][/autoit][autoit]
MsgBox(0,"eins","zwei, drei")
EndFuncFunc WM_SIZE($hWnd, $Msg, $wParam, $lParam)
[/autoit][autoit][/autoit][autoit]
Switch $hWnd
Case $hGui
Local $tRect = _WinAPI_GetClientRect($hWnd)Local $iX = DllStructGetData($tRect, 1)
[/autoit][autoit][/autoit][autoit]
Local $iY = DllStructGetData($tRect, 2)
Local $iW = DllStructGetData($tRect, 3)
Local $iH = DllStructGetData($tRect, 4)_IconDock_SetPos($hIconDock, $iX, $iY, $iW, $iH)
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SIZEFunc WM_GETMINMAXINFO($hWnd, $Msg, $wParam, $lParam)
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
Local $MinMax = DllStructCreate("int ptReserved[2]; int ptMaxSize[2]; int ptMaxPosition[2]; int ptMinTrackSize[2]; int ptMaxTrackSize[2];", $lParam)
DllStructSetData($MinMax, 4, $iIconSizeMin*3, 1)
DllStructSetData($MinMax, 4, $iIconSizeMax+$iIconSizeMin, 2)
DllStructSetData($MinMax, 5, 1000, 1)
DllStructSetData($MinMax, 5, 800, 2)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_GETMINMAXINFOFunc _Exit()
[/autoit]
_IconDock_Destroy($hIconDock)
Exit
EndFunc ;==>_Exit -
-
Hallo gss,
ohne die Datei selbst öffnen zu müssen, ist die Funktion "_ReplaceStringInFile..." zu empfehlen.siehe: http://www.autoitscript.com/autoit3/docs/l…tringInFile.htm
Damit ist Deine Aufgabe auch leicht lösbar.
-
mit dem Word UDF werde ich nun die Problematik so lösen, dass das .docx File im Hintergrund als .xml gespeichert wird. Mit _ReplaceStringInFile erfolgt dann der Suchen/Ersetzen-Prozess.
Textfelder, Überschriften etc. werden damit ersetzt.
Anschließend starten der xml und ggf. als .docx direkt wieder abspeichern.
Danke für die Unterstützung!
-
Wenn die Zeile
$oWord = ObjGet($sPath, "Word.Application") in $oWord = ObjGet("", "Word.Application") geändert wird, dann scheint es zu funktionieren.Hast Du noch eine Idee, wie Textfelder (in Word = Einfügen Textfeld) ansprechbar sind? Auch geht es um Suchen/Ersetzen von Texten.
Danke und Gruß
-
Hallo BugFix,
vielen Dank für Deine schnelle Antwort.
Mit Word2010 bekomme ich "nur" Fehlermeldungen. Ist Dein Beispiel für Office 2010 vorgesehen? -
Hallo,
ich verwende das WordEx UDF von water.
Die Funktion "_Word_DocFindReplace" sucht und ersetzt ausschließlich im Text einer .doc / .docx Datei.
Meine Frage dazu:
Mit welcher Einstellung ist es möglich, dass _Word_DocFindReplace auch in eingefügten Textfeldern, sowie in den Kopf- und Fußzeilen auswirkungen hat?
Muster aus dem Beispielscript.
[autoit]Func Example1($oDoc)
[/autoit]
_Word_DocFindReplace($oDoc, "test document", "test document with replaced text")
If @error <> 0 Then Return MsgBox(16, "Word UDF: _Word_DocFindReplace Example 1", "Error replacing text in the document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
MsgBox(64, "Word UDF: _Word_DocFindReplace Example 1", "Text successfully replaced.")
EndFunc ;==>Example1Versuche mit _Word_DocRangeSet weiterzukommen blieben erfolglos (vermutlich wg. mir selbst).
Weiss jemand die Lösung?
Danke und Gruß
-
Hallo Water,
das ist ja fantastisch!
Ich freue mich sehr, dass das Ziel erreicht ist.Dir danke ich für Deine unermüdliche Unterstützung und Arbeit. Danke!
Viele Grüße und nochmals Danke!
-
Hallo Water,
ich habe die Testumgebung gelöscht.
Nun ist der Erfolg auch eingetreten.
$oItem 0-1
$oDoc 0-1-4
alles weitere ist 0
Super gut und klasse. Vielen Dank.
Nun weiß ich noch nicht, wie ein formatierter Text als rtf dort angezeigt werden kann. Eine .docx Datei einfach als rtf speichern.
Magst Du Dich diesem letzten Schritt noch annehmen? -
Hallo Water,
vielen Dank.In der Console wird diese Meldung ausgegeben:
COM Error Encountered in test_inspector_3.au3
OutlookEx UDF version = 0.9.0
@AutoItVersion = 3.3.8.1
@AutoItX64 = 0
@Compiled = 0
@OSArch = X64
@OSVersion = WIN_7
Scriptline = 1211
NumberHex = 80020009
Number = -2147352567
WinDescription =
Description = Der versuchte Vorgang konnte nicht ausgeführt werden. Ein Objekt wurde nicht gefunden.
Source = Microsoft Outlook
HelpFile =
HelpContext = 0
LastDllError = 0Zu den @error - Meldungen folgende:
$oItem: 0-1
$oDoc: -2147352567-0
$oRange: 169-0
Collapse: 169
InsertBefore: 169
Display: -2147352567Der Termin ist dann angelegt, erscheint als Erinnerung - nur ist der Body leer.
-
Das volle OfficePaket.
Ich arbeite auch viel mit dem Word UDF. E-Mailtexte erzeuge ich aus .docx Dateien, die vorher automatisch als .htm gespeichert wurden.
-
Hallo Water,
nun hast Du so viel Zeit und Arbeit investiert - Vielen vielen Dank dafür.
Ich arbeite mit einem Dell XPS Ultrabook und ich wüßte nicht, was Auswirkungen haben könnte.Die erste Fehlermeldung verweist darauf, dass eine Deklaration (Not an Object Type) nicht korrekt ist, oder?
Diese Meldung bezog sich auf diese Zeile:
Global $oRange = $oDoc.Range
Was könnte hierzu anders deklariert werden? -
Hallo Water,
es ist exakt Dein Script mit der Ergänzung zur Fehlerüberwachung _OL_ErrorNotify(2).
[autoit]#AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
[/autoit]
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y
#include <OutlookEX.au3>
; *****************************************************************************
; Create test environment
; *****************************************************************************
Global $oItem
Global $oOutlook = _OL_Open()
_OL_ErrorNotify(2)
If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF", "Error creating a connection to Outlook. @error = " & @error & ", @extended = " & @extended)
Global $Result = _OL_TestEnvironmentCreate($oOutlook)
If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF - Manage Test Environment", "Error creating the test environment. @error = " & @error & ", @extended = " & @extended)
; *****************************************************************************
; Example 1
; Create an appointment with subject, start- and enddate.
; Attendee is the current user
; *****************************************************************************
Global Const $wdCollapseStart = 1 ; Collapse the range to the starting point
$oItem = _OL_ItemCreate($oOutlook, $olAppointmentItem, "*\Outlook-UDF-Test\TargetFolder\Calendar", "", "Subject=TestSubject", "Start=" & _NowCalc(), "End=" & _DateAdd("h", 3, _NowCalc()), _
"Location=Building A, Room 10", "RequiredAttendees=" & $oOutlook.GetNameSpace("MAPI" ).CurrentUser.Name)
Global $oDoc = $oItem.GetInspector().WordEditor
Global $oRange = $oDoc.Range
$oRange.Collapse($wdCollapseStart)
$oRange.InsertBefore("Inserted text at the start! ")
$oItem.Display()
_OL_Close($oOutlook)Falls es nun gar nicht funktionieren sollte, dann lebe ich auch mit dem Plaintext.
-
Hier noch die Bilder dazu:
-
Ja, es erscheint unmittelbar und die Erinnerungsfunktion ist auch aktiv.
-
Hallo Water,
hier die Meldungen.
Es tut mir leid, dass ich Dir hier nicht helfen kann....
-
Das habe ich nun jeweils mit dieser Anweisung getan:
msgbox(0,"Errormeldung",@error)Global $oDoc = $oItem.GetInspector().WordEditor = 0
Global $oRange = $oDoc.Range = 2
$oRange.Collapse($wdCollapseStart) = 169
$oRange.InsertBefore("Inserted text at the start! ") = 169
$oItem.Display() = -2147352567 -
Hallo Water,
schon mal vielen Dank für Deine Unterstützung.
In meiner Office2010 Umgebung erscheint kein Text im Body. Es erfolgen keine Fehlermeldungen.Siehst Du noch eine Chance für eine globale Lösung?