Das wurde gerade heute hier diskutiert. Ob's ne Lösung gibt kann ich aber leider nicht sagen.
Beiträge von water
-
-
Ich werde mal schauen, wie ich dem neuen Word UDF auch suchen/ersetzen in den Kopf- und Fußzeilen beibringen kann.
-
(Hoffe, dass mein Schulenglisch reicht.)
Sonst gibt es ja immer noch das deutsche Forum - Hier werden Sie geholfen!
Dir ebenfalls ein schönes Weihnachtsfest und ein gutes Neues Jahr!
Ich bin ab 30.12. bis zum 15.1. im Urlaub und komme daher nur sehr sporadisch ins Forum.
-
Ich bin gerade dabei die Excel UDF (als jene Version die mit AutoIt ausgeliefert wird) komplett neu zu schreiben. Diese neue Version soll neue Dateiformate (.xlsx etc.) unterstützen und Designprobleme der aktuellen Version beheben.
Die von Dir angeführten Probleme sollten dann auch behoben sein.
Eine erste Alpha Version gibt es bereits hier . -
Einen kleinen Fehler habe ich schon mal gesehen. Zeile 20 sollte unbedingt direkt nach Zeile 12 folgen.
-
Als ich würde folgende Funktion verwenden um zu prüfen ob Excel läuft bzw. das angegebene Workbook offen ist. Abhängig vom Rückgabewert würde ich dann weiterarbeiten. Das Skript funktioniert nur bei AutoIt >= 3.3.9.2.
[autoit]
Darunter muss noch ein COM error handler eingefügt werden der den Fehler abfängt dass Excel nicht gestartet ist.$sExcelFile = @ScriptDir & "\test.xls"
[/autoit][autoit][/autoit][autoit]
$iResult = _ExcelTest($sExcelFile)
; 1: Excel is not running
; 2: Excel is running and specified workbook is opened
; 3: Excel is runnung but specified workbook is not opened
MsgBox(16, "Excel Test", "Ergebnis des Tests: " & $iResult)
ExitFunc _Exceltest($sFile)
[/autoit]
$oExcel = ObjGet("", "Excel.Application")
If @error Then Return 1
For $oWorkbook In $oExcel.Workbooks
If $oWorkbook.FullName = $sFile Then Return 2
Next
Return 3
EndFunc -
Ein COM error handler um die genaue Fehlermeldung anzuzeigen wäre auch ganz hilfreich. Siehe Funktion ObjEvent in der Hilfe.
-
Du musst die Funktion vorher aber noch anpassen, so wie sie dasteht crasht die sicher.
-
Da gibt es derzeit leider keine Funktion.
[autoit]
Hier ist die entsprechende Funktion aus dem "alten" adfunctions UDF. Wenn Bedarf besteht, schreibe ich sie um und füge sie in die AD UDF ein.; _ADRecursiveGetGroupMembers
[/autoit][autoit][/autoit][autoit]
; Takes a Full DN of a group and returns a recursively searched list of members of that group (and groups that are members of the group)
; The return values are full DNs. For groups that are inherited, the return is the DN of the group, and the DN of the first group
; it was inherited from, seperated by '|'.
Func _ADRecursiveGetGroupMembers(ByRef $members, $fqdn, $depth = 10)
Local $oUsr, $objCommand, $groups, $i, $j, $arr_data$data = "distinguishedName,objectCategory"
[/autoit][autoit][/autoit][autoit]$objCommand = ObjCreate("ADODB.Command")
[/autoit][autoit][/autoit][autoit]
$objCommand.ActiveConnection = $objConnection
$objCommand.Properties("Page Size") = 1000
$objCommand.Properties("Searchscope") = 2$strCmdText = "<LDAP://" & $strHostServer & "/" & $strDNSDomain & ">;(memberof=" & $fqdn & ");" & $data & ";subtree"
[/autoit][autoit][/autoit][autoit]$objCommand.CommandText = $strCmdText
[/autoit][autoit][/autoit][autoit]
$objRecordSet = $objCommand.ExecuteDim $members[$objRecordSet.RecordCount + 1]
[/autoit][autoit][/autoit][autoit]
If UBound($members) = 1 Then
$members[0] = 0
Return
EndIf$objRecordSet.MoveFirst
[/autoit][autoit][/autoit][autoit]
$i = 1
Do
$members[$i] = $objRecordSet.Fields("distinguishedName" ).Value
If StringInStr($objRecordSet.Fields("objectCategory" ).Value, "group") Then
Dim $temp_members
_ADRecursiveGetGroupMembers($temp_members, $members[$i], $depth - 1)
For $j = 1 To $temp_members[0]
$temp_members[$j] &= "|" & $members[$i]
Next
_ArrayDelete($temp_members, 0)
_ArrayConcatenate($members, $temp_members)
EndIf
$i += 1
$objRecordSet.MoveNext
Until $objRecordSet.EOF$objRecordSet.Close
[/autoit][autoit][/autoit][autoit]$objCommand = 0
[/autoit][autoit][/autoit][autoit]
$objRecordSet = 0$members[0] = UBound($members) - 1
[/autoit][autoit][/autoit][autoit]Return 1
[/autoit]
EndFunc ;==>_ADRecursiveGetGroupMembers -
Was verstehst Du unter "auslesen"?
Mails direkt vom Provider downloaden? Über den Mailclient auf Deine Mails zugreifen?
Welchen Mailclient setzt Du ein? -
So kann das auch nicht funktionieren!
Dein Skript ist eine wilde Mischung aus meiner AD UDF und eigenem ADO code.
Ohne Aufruf von _AD_Open funktioniert keine andere _AD_* Funktion.
Mein Vorschlag: Wirf Dein ADO Zeug raus und verwende für alle AD Funktionen mein UDF. Dafür gibt es dann auch support -
Du musst den Benutzernamen und nicht die ID des Controls übergeben. Also:
[autoit]$PWChange = _AD_SetPassword($sUser, $sPassword)
[/autoit] -
Gerne - habe schließlich auch was dabei gelernt!
Ich werde mal sehen, ob ich ein solches Skript in die Beispiele einbaue.Solltest Du direkt mit Word arbeiten müssen d.h. den Text nicht aus einer Datei importieren sondern mit dem Skript selbst erstellen/formatieren, dann empfehle ich Dir mein Word UDF .
-
Um den Inhalt einer Word Datei einzufügen gehst Du wie folgt vor. "C:\temp\test.docx" musst Du natürlich noch durch Deine Datei ersetzen.
[autoit]#AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
[/autoit][autoit][/autoit][autoit]
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y
#include <OutlookEX.au3>; *****************************************************************************
[/autoit][autoit][/autoit][autoit]
; Create test environment
; *****************************************************************************
Global $oItem
Global $oOutlook = _OL_Open()
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); *****************************************************************************
[/autoit]
; Example 1
; Create an appointment with subject, start- and enddate.
; Attendee is the current user
; *****************************************************************************
_OL_ErrorNotify(2)
$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.InsertFile("C:\temp\test.docx", Default, False, False, False)
$oItem.Display()
_OL_Close($oOutlook) -
Bist Du sicher, dass Du "#include <AD.au3>" in Deinem Skript drin hast?
-
Die erste Fehlermeldung deutet auf Probleme mit dem Folder "*\Outlook-UDF-Test\TargetFolder\Calendar" hin.
Kannst Du bitte den kompletten Outlook-UDF-Test Folder nehmen und per Maus in den "Gelöschte Objekte" Ordner verschieben? Sollte der Ordner danach noch immer bestehen, bitte den "Gelöschte Ordner" vorher leeren. -
Keine Idee warum das bei Dir nicht läuft:
[autoit]
Hier nochmals eine Version mit etwas mehr Debugging code:#AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
[/autoit][autoit][/autoit][autoit]
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y
#include <OutlookEX.au3>; *****************************************************************************
[/autoit][autoit][/autoit][autoit]
; Create test environment
; *****************************************************************************
Global $oItem
Global $oOutlook = _OL_Open()
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); *****************************************************************************
[/autoit]
; Example 1
; Create an appointment with subject, start- and enddate.
; Attendee is the current user
; *****************************************************************************
_OL_ErrorNotify(2)
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)
MsgBox(0, "", "$oItem: " & @error & "-" & IsObj($oItem))
Global $oDoc = $oItem.GetInspector.WordEditor
MsgBox(0, "", "$oDoc: " & @error & "-" & IsObj($oDoc) & "-" & $oItem.GetInspector.EditorType)
Global $oRange = $oDoc.Range
MsgBox(0, "", "$oRange: " & @error & "-" & IsObj($oRange))
$oRange.Collapse($wdCollapseStart)
MsgBox(0, "", "Collapse: " & @error)
$oRange.InsertBefore("Inserted text at the start! ")
MsgBox(0, "", "InsertBefore: " & @error)
$oItem.Display()
MsgBox(0, "", "Display: " & @error)
_OL_Close($oOutlook) -
Die Meldung bezieht sich darauf, dass $oDoc kein Objekt ist.
Ist auf Deinem Ultrabook Microsoft Word installiert? -
Der Gag ist ja: Bei mir funktioniert es!
Windows 7 64 bit, Outlook und Word 2010 32 bit.
Ich kann mir nur vorstellen, dass es von einer unterschiedlichen Konfiguration abhängt. Wie unterscheidet sich Dein Rechner? -
Sehr, sehr seltsam. Kannst Du bitte zur Sicherheit das Skript posten mit dem Du diese Ergebnisse erzielst?