• Offizieller Beitrag

    Hi,
    ist erst ein Anfang und wahrlich nicht so umfangreich, wie die ArrayMore.au3. ;)
    Ich werde hier erweiterte Funktionen zur Excel-UDF posten.

    Inhalt aktuell:

    _ExcelSheetOrderByName()
    sortiert Excel-Tabellenblätter nach deren Namen auf-/absteigend
    (erfordert #Include <Array.au3>)

    _ExcelBookGetWidth()
    gibt die letzte beschriebene Zeile und/oder Spalte zurück (durchgängig belegt)

    __ExcelBookNew()
    modifizierte Version der _ExcelBookNew
    Neben dem Standardparameter $fVisible ist hier der Parameter $iSheetsStartup enthalten, über den festgelegt wird, wieviel Sheets das neue Dokument enthält.

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name: _ExcelSheetOrderByName($oExcel, $iDesc=0)
    ; Description:: Order ExcelBook-Sheets by name ascending (default) or descending
    ; Parameter(s): $oExcel - Excel object opened by a preceding call to _ExcelBookOpen() or _ExcelBookNew()
    ; $iDesc - order descending on=1/off=0 (default)
    ; Requirement(s): #Include <Array.au3>
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0 and sets @error=1 - Specified object does not exist
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _ExcelSheetOrderByName($oExcel, $iDesc=0)
    If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
    If $iDesc <> 1 Then $iDesc = 0
    Local $aList = _ExcelSheetList($oExcel)
    _ArraySort($aList, $iDesc)
    Local $pos = 1
    For $i = 0 To UBound($aList) -1
    If $i = 0 Then
    _ExcelSheetMove($oExcel, $aList[$i], $pos, True)
    Else
    _ExcelSheetMove($oExcel, $aList[$i], $pos, False)
    $pos += 1
    EndIf
    Next
    Return 1
    EndFunc ;==>_ExcelSheetOrderByName

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Function: _ExcelBookGetWidth($oExcel [, $iTyp=1 [, $iHeader=1 [, $sCol='A']]])
    ; Description: Gibt die letzte belegte Zeile und/oder Spalte einer Tabelle zurück
    ; Syntax: _ExcelBookGetWidth($oExcel, $iTyp=1, $iHeader=1, $sCol='A')
    ; Parameter(s): $oExcel - Referenz eines geöffneten Excel Objekts
    ; $iTyp - 1=letzte Spalte (Standard); 2=letzte Zeile; 3=Spalte|Zeile
    ; $iHeader - Nummer der Zeile, in der die letzte Spalte gesucht wird
    ; $sCol - Buchstabe der Spalte, in der die letzte Zeile gesucht wird
    ; Return Value(s): Erfolg - letzte Spalte und/oder Zeile
    ; Ist die Zeile oder Spalte leer, wird '0' zurückgegeben
    ; Fehler - 0 und setzt @error:
    ; @error=1 - Objekt existiert nicht
    ; @error=2 - $iTyp oder $iHeader außerhalb des Wertebereichs (1 - 65536)
    ; @error=3 - $sCol außerhalb des Wertebereichs (A - IV)
    ; Requirement(s): $iHeader bzw. $sCol sind durchgängig bis zum letzten Zeilen-/Spaltenelement belegt
    ; Author(s): BugFix ( [email='bugfix@autoit.de'][/email] )
    ;==================================================================================================
    Func _ExcelBookGetWidth($oExcel, $iTyp=1, $iHeader=1, $sCol='A')
    If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
    If $iTyp < 1 Or $iHeader < 1 Or $iTyp > 65536 Or $iHeader > 65536 Then Return SetError(2, 0, 0)
    $sCol = StringUpper($sCol)
    If StringLen($sCol) = 2 Then
    Local $str = StringSplit($sCol, '')
    If Asc($str[1]) < 65 Or Asc($str[1]) > 73 Then Return SetError(3, 0, 0)
    If Asc($str[2]) < 65 Or Asc($str[2]) > 90 Or _
    (Asc($str[1]) = 73 And Asc($str[2]) > 86) Then Return SetError(3, 0, 0)
    ElseIf StringLen($sCol) > 2 Then
    Return SetError(3, 0, 0)
    EndIf
    If Asc($sCol) < 65 Or Asc($sCol) > 90 Then Return SetError(3, 0, 0)
    Local $sColOut, $iRowOut
    Select
    Case $iTyp = 1 Or $iTyp = 3
    For $i = 65 To 90
    If $oExcel.Activesheet.Range(Chr($i) & $iHeader).Value = '' Then
    If $i = 65 Then
    $sColOut = 0
    Else
    $sColOut = Chr($i-1)
    EndIf
    ExitLoop
    EndIf
    If $i = 90 Then
    For $j = 65 To 73
    For $k = 65 To 90
    If $j = 73 And $k = 87 Then
    $sColOut = Chr($j) & Chr($k-1)
    ExitLoop
    EndIf
    If $oExcel.Activesheet.Range(Chr($j) & Chr($k)).Value = '' Then
    If $k = 65 Then
    $sColOut = Chr($j)
    Else
    $sColOut = Chr($j) & Chr($k-1)
    EndIf
    ExitLoop
    EndIf
    Next
    Next
    EndIf
    Next
    ContinueCase
    Case $iTyp = 2
    For $i = 1 To 65536
    If $oExcel.Activesheet.Range($sCol & $i).Value = '' Then
    $iRowOut = $i -1
    ExitLoop
    EndIf
    Next
    EndSelect
    Switch $iTyp
    Case 1
    Return $sColOut
    Case 2
    Return $iRowOut
    Case 3
    Return $sColOut & '|' & $iRowOut
    EndSwitch
    EndFunc ;==>_ExcelBookGetWidth

    [/autoit] [autoit][/autoit] [autoit]

    Func __ExcelBookNew($fVisible = 1, $iSheetsStartup = 1)
    ; modified by BugFix
    Local $oExcel = ObjCreate("Excel.Application")
    If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
    If Not IsNumber($fVisible) Then Return SetError(2, 0, 0)
    If $fVisible > 1 Then $fVisible = 1
    If $fVisible < 0 Then $fVisible = 0
    If $iSheetsStartup < 1 Then $iSheetsStartup = 1
    With $oExcel
    .SheetsInNewWorkbook = $iSheetsStartup
    .Visible = $fVisible
    .WorkBooks.Add
    .ActiveWorkbook.Sheets(1).Select ()
    EndWith
    Return $oExcel
    EndFunc

    [/autoit]

    DL bisher: 8