- 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
;===============================================================================
; 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
;==================================================================================================
; 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
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
DL bisher: 8