Een Excel-rapport vullen vanuit AutoIt

Je wilt data vanuit AutoIt netjes in Excel zetten. Dat kan met ObjCreate(). Daarmee praat je script direct met Excel, zonder handmatig kopieren en plakken.

Wanneer is dit handig?

Dit is handig als je al gegevens hebt in een tabel, tekstbestand of een eerdere stap in je script. Daarna wil je alles netjes in een Excel-bestand krijgen. Voor een simpel rapport is dit vaak sneller dan zelf een CSV bouwen.

Wat doet ObjCreate() hier?

ObjCreate() maakt een COM-object aan. In dit geval leg je zo een verbinding met Excel. Daarna werk je met een workbook en een worksheet.

  • Excel-object: de verbinding met Excel
  • Workbook: het Excel-bestand
  • Worksheet: het werkblad waar je cellen vult

Stap voor stap

  1. Start Excel met ObjCreate().
  2. Maak een nieuw workbook of open een bestaand bestand.
  3. Kies het juiste worksheet.
  4. Vul de cellen met jouw data.
  5. Sla het bestand op en sluit Excel weer netjes af.

Voorbeeldcode

Hieronder zie je een klein voorbeeld. Het opent Excel, vult een paar cellen en slaat daarna het bestand op.

Local $oExcel = ObjCreate("Excel.Application")
If @error Then
    MsgBox(16, "Fout", "Excel kon niet worden gestart.")
    Exit
EndIf

$oExcel.Visible = True

Local $oWorkbook = $oExcel.Workbooks.Add()
Local $oSheet = $oWorkbook.Worksheets(1)

$oSheet.Cells(1, 1).Value = "Naam"
$oSheet.Cells(1, 2).Value = "Aantal"
$oSheet.Cells(2, 1).Value = "Bever"
$oSheet.Cells(2, 2).Value = 3
$oSheet.Cells(3, 1).Value = "Eekhoorn"
$oSheet.Cells(3, 2).Value = 7

Local $sPad = @ScriptDir & "\rapport.xlsx"
$oWorkbook.SaveAs($sPad)

$oWorkbook.Close()
$oExcel.Quit()

Hoe lees je dit voorbeeld?

Eerst maak je verbinding met Excel. Daarna zet je Visible = True, zodat je tijdens het testen ziet wat er gebeurt. Vervolgens maak je een nieuw workbook aan, pak je het eerste werkblad en vul je daar de cellen.

Werken met een bestaand bestand

Heb je al een Excel-bestand klaarstaan? Dan open je dat bestand en vul je nieuwe regels aan.

Local $oExcel = ObjCreate("Excel.Application")
Local $oWorkbook = $oExcel.Workbooks.Open("C:\temp\rapport.xlsx")
Local $oSheet = $oWorkbook.Worksheets(1)

$oSheet.Cells(4, 1).Value = "Nieuwe regel"
$oSheet.Cells(4, 2).Value = 12

$oWorkbook.Save()
$oWorkbook.Close()
$oExcel.Quit()

Let hier op

  • Excel moet echt op de pc staan.
  • ObjCreate("Excel.Application") kan mislukken als Excel niet goed is geinstalleerd.
  • Sluit workbook en Excel altijd netjes af.
  • Gebruik bij SaveAs() een geldig pad.
  • Laat het doelbestand niet tegelijk ergens anders open staan.

Veelgemaakte fout

Een veelgemaakte fout is denken dat ObjCreate() zelf al een bestand maakt. Dat doet het niet. Je maakt eerst alleen de verbinding met Excel. Daarna moet je nog een workbook en worksheet kiezen.

Bevers gedachte

Voor een klein rapport is dit een nette aanpak. Begin klein met een paar cellen. Werkt dat goed? Dan kun je later pas uitbreiden met meer regels, opmaak of formules. Meer uitleg staat in de officiele AutoIt-documentatie.