Exceldatei aufbauen

  • Hallo zusammen,

    ich möchte, dass ein Array, dass ich in meinem Autoit Skript aufgebaut habe als Excel-Datei umgesetzt wird.
    Zuerst dachte ich, ich nehm einfach die integrierten Excel-Funktionen der Excel.au3.
    Da ich damit aber manche Sachen nicht machen kann, wäre meine aktuelle Lösung, dass ich in Auto it eine VBScript-Datei schreibe und diese dann nach dem schreiben starte. Die VBScript-datei erzeugt dann die Excel-Datei Hier der Code, der die VBScript Datei aufbaut:

    [autoit]


    FileWrite($file, 'linesgesamt=' & (UBound($arr_ergebnisliste_final, 1)-1 * UBound($arr_ergebnisliste_final, 2)-1) & @CRLF)
    FileWrite($file, 'linecounter=0' & @CRLF)
    FileWrite($file, 'Set objExcel = createobject("Excel.application")' & @CRLF)
    FileWrite($file, "objexcel.Visible = true" & @CRLF)
    FileWrite($file, "objexcel.Workbooks.add" & @CRLF)
    FileWrite($file, 'objExcel.ActiveWorkbook.Sheets(1).Name="Schmelznummernliste"' & @CRLF)
    FileWrite($file, 'objexcel.Range("A1:C1").MergeCells=True' & @CRLF)
    FileWrite($file, 'objexcel.Range("A2:C2").MergeCells=True' & @CRLF)
    FileWrite($file, 'objexcel.Cells(1, 1).Value="Kunde / Customer:"' & @CRLF)
    FileWrite($file, 'objexcel.Cells(2, 1).Value="' & $kundenname & "," & $ort & " / " & $land & '"' & @CRLF)
    FileWrite($file, 'objexcel.Cells(1, 5).Value="Bestellnr. / Commission no.:"' & @CRLF)
    FileWrite($file, 'objexcel.Cells(2, 5).Value="' & $hauf & '"' & @CRLF)
    FileWrite($file, 'objexcel.Cells(1, 6).Value="Typ / Type:"' & @CRLF)
    FileWrite($file, 'objexcel.Cells(2, 6).Value="' & $maschtyp & '"' & @CRLF)
    FileWrite($file, 'objexcel.Cells(1, 7).Value="Maschinennr. / Machine no.:"' & @CRLF)
    FileWrite($file, 'objexcel.Cells(2, 7).Value="' & $maschnr & '"' & @CRLF)
    FileWrite($file, 'objexcel.Range("A1:G1").Font.FontStyle = "Fett"' & @CRLF)
    FileWrite($file, 'objexcel.Cells.Select' & @CRLF)
    FileWrite($file, 'objexcel.Selection.NumberFormat = "@"' & @CRLF)
    For $i=0 to UBound($arr_ergebnisliste_final, 1)-1 Step +1
    For $y=2 to UBound($arr_ergebnisliste_final, 2)-1 Step +1
    FileWrite($file, 'objexcel.Cells('&$i+4&', '&$y-1&').Value="' & $arr_ergebnisliste_final[$i][$y] & '"' & @CRLF)
    ;Zeile zum Aktualisieren des Fortschrittsbalkens schreiben
    FileWrite($file, 'linecounter=linecounter+1' & @CRLF)
    Next
    Next
    FileWrite($file, 'objexcel.Range("A5:' & _ColNrToLetter(UBound($arr_ergebnisliste_final,2)-2) & (UBound($arr_ergebnisliste_final,1)-1)&'").Select' & @CRLF)
    FileWrite($file, 'objexcel.Range("A4:G5").AutoFilter' & @CRLF)
    FileWrite($file, 'objexcel.ActiveWorkbook.ActiveSheet.PageSetup.LeftHeaderPicture.Filename = "'&@ScriptDir&'\grafiken\Bosch_Logo.jpg"' & @CRLF)
    FileWrite($file, 'objexcel.ActiveWorkbook.ActiveSheet.PageSetup.LeftHeader = "&G" & Chr(10) & "&""-,Fett""&18Schmelzennummernliste"' & @CRLF)
    FileWrite($file, 'objexcel.Columns.AutoFit' & @CRLF)
    FileWrite($file, "objexcel.Visible = true" & @CRLF)
    FileWrite($file, 'objexcel.ActiveWorkbook.SaveAs("' & $path & '")' & @CRLF)
    FileClose($file)

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

    ShellExecute(@ScriptDir & "\xls_create.vbs")

    [/autoit]

    Meine erste Frage: Ist diese Lösung aus eurer Sicht praktiabel oder gibts was "attraktiveres"?

    Meine zweite Frage: Der Aufbau der Excel-Datei dauert extrem lange, da der Array über 6000 Zeilen hat, die als Excel aufgebaut werden müssen. Excel-öffnet sich eben und baut sich Zeile für Zeile auf. Gibts da eine Möglichkeit, das zu beschleunigen?

    Bin für jeden Tipp dankbar.

    Viele Grüße

    Daniel

  • Die könntest auch einfach ein CSV-Datei schreiben, was schneller gehen dürfte und diese dann in Excel importieren.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hi,

    das Problem ist, dass ich manche Zeilen formatieren muss und csv ist ja unformatiert...
    Die Formatierung der Zeilen umzusetzen ist im Autoit-Script für mich noch einfacher als in Excel nachträglich, da ich da manche Infos nicht mehr habe, die über die Formatierung entscheiden...

    Beste Grüße

    Daniel

  • Oder wirf mal einen Blick auf meine ExcelEX (ist ein kompletter, nicht kompatibler Rewrite der aktuellen Excel UDF). Die sollte die Limitierungen der aktuellen UDF beheben.

  • Was kannst du denn mit der Excel.au3 nicht machen?


    Hi,

    die Kopfzeile bearbeiten z.B....und Zellen verbinden.
    Oder seh ich das falsch?

    Beste Grüße

    Daniel

  • Die Excel UDF und auch mein Rewrite decken nicht alle Funktionen von Excel ab sondern nur Basisfunktionen.
    Den Rest musst Du selber machen.
    Zellen verbinden:

    [autoit]

    $oExcel.Range("A1:B1").Merge

    [/autoit]