- Offizieller Beitrag
Hi,
habe mal ein Muster erstellt zur Diagrammerstellung in Excel per AutoIt.
Es ist durchkommentiert.
Die Konstanten für weitere Diagrammtypen findet man in Excel ==> Extra ==> Makro ==> Visual Basic-Editor, dort im Objektkatalog.
Im Suchfenster "XlChartType" eingeben, dann werden alle Konstanten aufgelistet.
Spoiler anzeigen
Const $xlColumns = 2
Const $xl3DPieExploded = 70
Const $xlDataLabelsShowValue = 2
Local $oExcel = ObjCreate("Excel.Application") ; Excel-Objekt erstellen
$oExcel.Visible = 1
$oExcel.SheetsInNewWorkbook = 1 ; Anzahl der gewünschten Sheets beim Erstellen festlegen
Local $oBook = $oExcel.Workbooks.Add ; im Excel-Objekt ein Workbook-Objekt erstellen
Local $oSheet = $oBook.Sheets(1) ; Sheet-Objekt für Sheet 1 erstellen (Name oder Index)
$oSheet.Name = 'Mein Sheet' ; Eigenschft Name ändern
; oder vorhandene Datei öffnen:
;~ Local $oBook = $oExcel.WorkBooks.Open($sFilePath, Default, False)
;~ Local $oSheet = $oBook.Worksheets.Item(1) ; Index od. Name des Sheets
; Daten in neuem Sheet eintragen
[/autoit] [autoit][/autoit] [autoit]; Die Range-Offset-Adressierung ermöglicht einfaches Navigieren mit Schleifen
[/autoit] [autoit][/autoit] [autoit]; Syntax: NewRange = Objekt.Range("StartZelle").Offset(ZeilenOffset, SpaltenOffset)
; Offset=0 ist die betreffende Zeile/Spalte selbst, die Adressierung ist relativ zur StartZelle
; negative Werte betreffen also Zeilen/Spalten oberhalb/vor der StartZelle
; Spaltenbeschriftung B1:H1
For $i = 0 To 7
If $i = 7 Then
$oSheet.Range("B1").Offset(0, $i).Value = 'SUMME'
Else
$oSheet.Range("B1").Offset(0, $i).Value = 'HEADER ' & $i+1
EndIf
Next
; Zeilenbeschriftung A2:A10
For $i = 0 To 8
$oSheet.Range("A2").Offset($i, 0).Value = 'NAME ' & $i+1
Next
; Werte eintragen B2:H10
For $i = 0 To 8
For $j = 0 To 6
$oSheet.Range("B2").Offset($i, $j).Value = Random(8,30,1)
Next
Next
; Formeln Summen Zeilen und Summe gesamt
Local $r = 2
For $i = 0 To 9
If $i = 9 Then
$oSheet.Range("I2").Offset($i, 0).Formula = "=SUMME(I2:I10)"
Else
$oSheet.Range("I2").Offset($i, 0).Formula = "=SUMME(B"&$r&":H"&$r&")"
$r += 1
EndIf
Next
; Diagramm im $oSheet erstellen
; Um die Positionierung des Diagramms an einer Zelle auszurichten, kann man die Werte vorab abfragen
; und das Diagramm gleich mit diesen Parametern erstellen, oder anschließend verschieben
Local $width = 300, $height = 200
[/autoit] [autoit][/autoit] [autoit]; Ausrichtung linksbündig an Zelle B13:
;~ Local $left = $oSheet.Range("B13").Left
;~ Local $top = $oSheet.Range("B13").Top
; Ausrichtung rechtsbündig an Zelle I13:
Local $left = $oSheet.Range("J13").Left - $width ; Zelle J13: left = Zelle I13: right !
Local $top = $oSheet.Range("I13").Top
; Objekt Diagramm erstellen
Local $oChart = $oSheet.ChartObjects.Add($left, $top, $width, $height).Chart
With $oChart
.ChartType = $xl3DPieExploded ; Diagrammtyp festlegen
.SetSourceData($oSheet.Range("I2:I10"), $xlColumns) ; Datenbereich für Diagramm
.SeriesCollection(1).XValues = "='Mein Sheet'!Z2S1:Z10S1" ; Beschriftung Legende setzen (Namen aus A2:A10)
.HasTitle = True ; Titel aktivieren
.ChartTitle.Characters.Text = "Einzelsummen / Name (Gesamt = " & $oSheet.Range('I11').Value & ")" ; Titel
.ApplyDataLabels($xlDataLabelsShowValue, False, True) ; Segmente Beschriften mit Werten
EndWith
; Diagramm (Zeichnungsfläche=Shape) ausrichten, wenn nicht vorab positioniert
;~ With $oSheet
;~ .Shapes(1).Top = $oSheet.Range("B13").Top ; Ausrichtung Top an Zelle B13.top
;~ .Shapes(1).Left = $oSheet.Range("B13").Left ; Ausrichtung Left an Zelle B13.left
;~ .Select
;~ EndWith