Excel-Tabelle erstellen

  • hallo, ich möchte mir eine simple exel tabelle erstellen.

    habe mit der suche hier, den link zur englischen "ExcelCom.au3" gefunden :)

    ich komme leider nicht klar damit, da mein englisch hierzu zu schlecht ist :weinen:

    das was ich machen will, ist eigentlich sehr leicht (hoffe ich)

    meine vorraussetzungen sind erst mal diese.
    ich selbst benutze hier auf meinen rechner OpenOffice 2 und die ".xls" datei ist schon vorhanden
    es muss also die ".xls" datei bearbeitet werden, da es auch auf MS office gehn muss.

    so, zu meinen vorhaben :)
    ich möchte mir mit AutoIt ein kleines GUI erstellen, in dem ich verschiedene user gruppen habe (sollte ja kein problem sein :) )
    ich wähle dann zb: gruppe 1 (5 Mann)
    so jetzt möchte ich, das AutoIt diese 5 mann in je einer vorgegebenen
    Exel Spallte schreibt.
    genau diesen befehl suche ich ;)

    Code
    A1 --> User 1
    A2 --> User 2
    A3 --> User 3
    A4 --> User 4
    A5 --> User 5


    [Blockierte Grafik: http://img222.imageshack.us/img222/5595/20070402160246fz7.jpg]

    Doktore

  • mhh hab mir mal die exel udf gesaugt....irgendwie funktioniert die noch nicht ganz....-.- zumindest müsste nach meiner meinung nach folgender programmcode einwandfrei funktionieren....

    [autoit]

    #include"ExcelCom.au3"
    $FilePath=@ScriptDir&"\test.xls";ja datei vorhanden ;)
    _XLCreateBlank($FilePath)
    Dim $XLArray[6]
    For $i = 0 to 5
    $XLArray[$i] = "User "&$i+1
    Next
    $XLArrayAddress=_XLArrayWrite($XLArray,$FilePath,1,"A1",1)
    MsgBox(0,"",$XLArrayAddress)

    [/autoit]


    joa kein plan geh erstmal was essen dann schau ich mir das weiter an....

    • Offizieller Beitrag

    Hi!

    Ich würde anstatt der Microsoft-Dateiformate, die kaum ordentlich zu bearbeiten sind, lieber das ODT-Format nehmen, auf das OpenOffice setzt. Das würde v.a. deshalb optimal passen, da du ja OOo schon einsetzt.
    Dieses Format ist ein XML-Derivat, das sich auch mit AutoIt sehr viel einfacher (nämlich als Textdatei) schreiben lassen sollte. Vielleicht informierst du dich mal ein wenig bei Wikipedia oder so, was da möglich ist :)

    peethebee

  • mhh naja pee hast schon recht...musst nur ne txt mit inhalt erstellen in odt umbennen und dann kannste das ganze auch per openoffice öfnnen....aber das ganze ist dann der texteditor!!!...gefragt war nach tabelle also ods....wenns ne udf für oo gibt nehm ich die sofort!!!^^

    PS: stolzer besitzer von OpenOffice

    //edit
    okay schaut so aus als wenn der pee recht hat ;)^^
    naja kann mich sicherlich irren :rolleyes:
    mhh mit php xls dateien zu erstellen ist kein problem das geht noch klar^^

    • Offizieller Beitrag

    Hi!

    Zitat Wikipedia:
    "Die Speicherung der Dokumentinhalte erfolgt in dem Java-Archive-Format. Es handelt sich dabei um eine ZIP-Datei mit speziellen Einträgen in diesem Archiv. Die Dateiendung eines Java-Archivs ist .jar, jedoch werden für OpenDocument-Dateien die Dateiendungen .odt für Texte, .ods für Tabellen, .odp für Präsentationen und .odg für Zeichnungen verwendet."

    Es scheint also auch ein Format für Tabellen zu geben. Ich habe es aber noch nie verwendet; für odt (also Textverarbeitung) habe ich schon PHP-Skripte gesehen, die Dateien erzeugen.

    peethebee

  • und ich dachte das wäre leicht :rolleyes:
    im englischen forum stand so viel, das ich dachte es geht so einfach, aber da sieht man mal das mein englisch einfach sch... ist :schild4:

    Doktore

    • Offizieller Beitrag

    Hi,

    vielleicht hilft dir dies:

    Spoiler anzeigen
    [autoit]

    ; ----------------------------------------------------------------------------
    ; Author: Noobster24 (andreas_vliegen [AT] hotmail [DOT] com)
    ;
    ; Script Function:
    ; Search for the licenses registrations on this computer for:
    ; Nero - Windows - Office - Alcohol 120% - Call of Duty 1 & 2 - mIRC - Partition Magic - OmniPage - Sony Vegas/Video Capture - TuneUP Utilities
    ; ----------------------------------------------------------------------------

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

    ; ------------------- Included Files ----------------------------------
    #NoTrayIcon
    #include <GuiConstants.au3>
    #include <File.au3>
    #Include <GuiListView.au3>
    #include <Array.au3>
    #include <String.au3>
    #include <Date.au3>

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

    ; ------------------- Options ----------------------------------
    Opt('GUICloseOnESC', 1)

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

    ; ------------------- Variables and globals ----------------------------------
    Global $size1 = 180
    Global $size2 = 170
    Global $size3 = 245
    Global $filedir2 = @ScriptDir & '\Files\'
    Global $inifile = @ScriptDir & '\serializer_software.ini'
    Global Const $WM_NOTIFY = 0x004E
    Global Const $DebugIt = 1

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

    ; ------------------- ListView Events ----------------------------------
    Global Const $NM_FIRST = 0
    Global Const $NM_LAST = (-99)
    Global Const $NM_OUTOFMEMORY = ($NM_FIRST - 1)
    Global Const $NM_CLICK = ($NM_FIRST - 2)
    Global Const $NM_DBLCLK = ($NM_FIRST - 3)
    GUIRegisterMsg($WM_NOTIFY, 'WM_Notify_Events')

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

    ; ------------------- Check if folders & files excist----------------------------------
    DirGetSize($filedir2)
    If @error = 1 Then
    DirCreate($filedir2)
    EndIf

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

    ; ------------------- GUI ----------------------------------
    $win_1 = GUICreate('Teh Serializer', 720, 280)
    GUISetIcon ('shell32.dll', 47)
    $refresh = GuiCtrlCreateButton('Get Licenses',615,35,100,25)
    GuiCtrlSetFont(-1,8,800,0,'Verdana')
    $excel = GuiCtrlCreateButton('Export 2 Excel',615,71,100,25)
    GuiCtrlSetFont(-1,8,800,0,'Verdana')
    $2txt = GuiCtrlCreateButton('Export 2 TXT',615,107,100,25)
    GuiCtrlSetFont(-1,8,800,0,'Verdana')
    $Excelo = ObjCreate('Excel.Application')
    If @error = 1 Then GUICtrlSetState($excel, $GUI_DISABLE)

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

    ;--------------------Listview---------------------------------------
    GuiSetFont(8,100,0,'Verdana')
    GuiCtrlCreateLabel('Licenses:',12,12,60,20)
    GuiCtrlSetFont(-1,9,800,0,'Verdana')
    $listview = GUICtrlCreateListView ('Product Name|User/ID|Serial/Code/License/Key',10,35,600,237,$LVS_SORTASCENDING,BitOR($LVS_EX_REGIONAL, $LVS_EX_FULLROWSELECT))
    GUICtrlSetState(-1,$GUI_DROPACCEPTED)
    GUICtrlSetBkColor($listview,0xf4f2ea)
    _GUICtrlListViewSetColumnWidth($listview,0,$size1)
    _GUICtrlListViewSetColumnWidth($listview,1,$size2)
    _GUICtrlListViewSetColumnWidth($listview,2,$size3)
    Dim $B_DESCENDING = _GUICtrlListViewGetSubItemsCount($listview)

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

    ; ------------------- Dim etc.----------------------------------
    Dim $Bin
    Dim $key4RegisteredOwner = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
    GuiSetState()
    TraySetState(2)

    While 1
    $msg = GuiGetMsg()
    $msg1 = TrayGetMsg()

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

    Switch $msg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $listview
    _GUICtrlListViewSort($listview, $B_DESCENDING, GUICtrlGetState($listview))
    Case $refresh
    Refresh()
    Case $excel
    _OutExcel()
    Case $2txt
    ListView_DoubleClick()
    EndSwitch

    WEnd
    GUIDelete($win_1)
    Exit

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

    ; ------------------- Functions ----------------------------------
    Func Refresh()
    $begin = TimerInit()
    _GUICtrlListViewDeleteAllItems ($listview)

    $Bin = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion','DigitalProductID') ;(Thanks to Thorsten Meger)
    $objWMIService = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') ;(Thanks to Thorsten Meger)
    $colSettings = $objWMIService.ExecQuery ('Select * from Win32_OperatingSystem') ;(Thanks to Thorsten Meger)
    For $objOperatingSystem In $colSettings
    Next
    GuiCtrlCreateListViewItem('M$ Windows ' & StringMid($objOperatingSystem.Caption, 19) & ' Product Key' & '|' & StringMid($objOperatingSystem.SerialNumber, 1) & '|' & DecodeProductKey($Bin),$listview)

    $iniread = IniRead($inifile,'Program','Total',10)
    Dim $regread[$iniread+1], $regname[$iniread+1], $officekey[$iniread+1], $regread2[$iniread+1], $inireadname[$iniread+1], $inireadread[$iniread+1], $inireadreadkey[$iniread+1], $inireadreadkey2[$iniread+1], $inireadenumkey[$iniread+1], $inireaduser[$iniread+1], $inireaduser2[$iniread+1], $inireaduser3[$iniread+1], $inireaduser4[$iniread+1]
    For $i = 1 TO $iniread
    $inireadname[$i] = IniRead($inifile,$i,'Name',@error)
    $inireadread[$i] = IniRead($inifile,$i,'Read',@error)
    $inireadreadkey[$i] = IniRead($inifile,$i,'Readkey',@error)
    $inireaduser[$i] = IniRead($inifile,$i,'Userkey',@error)
    $regread[$i] = RegRead($inireadread[$i],$inireadreadkey[$i])
    $regread2[$i] = RegRead($inireadread[$i],$inireaduser[$i])
    If $inireadreadkey[$i] = '(|1|)' Then
    $inireadreadkey2[$i] = IniRead($inifile,$i,'Readkey2',@error)
    $inireadenumkey[$i] = RegEnumKey($inireadread[$i], 1)
    $officekey[$i] = RegRead($inireadread[$i] & '\' & $inireadenumkey[$i], 'DigitalProductID')
    $regname[$i] = RegRead($inireadread[$i] & '\' & $inireadenumkey[$i], 'ProductID')
    If Not $officekey[$i] = '' Then GuiCtrlCreateListViewItem($inireadname[$i] & '|' & $regname[$i] & '|' & DecodeProductKey($officekey[$i]),$listview)
    ElseIf $inireaduser[$i] = '(|2|)' Then
    $inireaduser2[$i] = IniRead($inifile,$i,'UserKey2',@error)
    $inireaduser3[$i] = IniRead($inifile,$i,'UserKey3',@error)
    $inireaduser4[$i] = RegRead($inireaduser2[$i],$inireaduser3[$i])
    If Not $inireaduser4[$i] = '' Then GUICtrlCreateListViewItem($inireadname[$i] & '|' & $inireaduser4[$i] & '|' & $regread[$i],$listview)
    Else
    If Not $regread[$i] = '' Then GUICtrlCreateListViewItem($inireadname[$i] & '|' & $regread2[$i] & '|' & $regread[$i],$listview)
    EndIf
    Next
    $dif = TimerDiff($begin)/1000
    $difround = Round($dif, 3) ;$difround is the amount of time in sec that teh Serializer needed to gather all your licenses..:) you can use this if you want to...
    EndFunc ;==>Refresh

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

    Func DecodeProductKey($BinaryDPID)
    Local $bKey[15]
    Local $sKey[29]
    Local $Digits[24]
    Local $Value = 0
    Local $hi = 0
    local $n = 0
    Local $i = 0
    Local $dlen = 29
    Local $slen = 15
    Local $Result

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

    $Digits = StringSplit('BCDFGHJKMPQRTVWXY2346789','')

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

    $binaryDPID = stringmid($binaryDPID,105,30)

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

    For $i = 1 to 29 step 2
    $bKey[int($i / 2)] = dec(stringmid($binaryDPID,$i,2))
    next

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

    For $i = $dlen -1 To 0 Step -1
    If Mod(($i + 1), 6) = 0 Then
    $sKey[$i] = '-'
    Else
    $hi = 0
    For $n = $slen -1 To 0 Step -1
    $Value = Bitor(bitshift($hi ,- 8) , $bKey[$n])
    $bKey[$n] = int($Value / 24)
    $hi = mod($Value , 24)
    Next
    $sKey[$i] = $Digits[$hi +1]
    EndIf

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

    Next
    For $i = 0 To 28
    $Result = $Result & $sKey[$i]
    Next

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

    Return $Result
    EndFunc ;==>DecodeProductKey (Thanks to forum)

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

    Func QuickOutput($Filename, $Output, $Mode)
    Local $File = FileOpen($Filename, $Mode)
    FileWriteLine($File, $Output)
    FileClose($File)
    EndFunc ;==>QuickOutput

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

    Func ListView_Click()
    ;If $DebugIt Then ConsoleWrite (_DebugHeader ('$NM_CLICK'))
    EndFunc ;==>ListView_Click

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

    Func ListView_DoubleClick()
    $ret = _GUICtrlListViewGetItemText ($listview)
    If $ret = '' Then
    Msgbox(0,'Nothing selected','You must select a serial to copy it into Notepad.')
    Else
    $namep = _GUICtrlListViewGetItemText ($listview, -1, 0)
    $idp = _GUICtrlListViewGetItemText ($listview, -1, 1)
    $serialp = _GUICtrlListViewGetItemText ($listview, -1, 2)
    $file2writetxt = @ScriptDir & '\Files\' & $namep & '.txt'
    $text2txt = 'Created by teh Serializer' & @CRLF & 'Date: ' & _Now() & @CRLF & '==========================' & @CRLF & 'Product Name: ' & $namep & @CRLF & 'User/ID: ' & $idp & @CRLF & 'Serial: ' & $serialp
    QuickOutput($file2writetxt, $text2txt, 2)
    Run('notepad.exe ' & $file2writetxt)
    EndIf
    EndFunc ;==>ListView_DoubleClick

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

    ; WM_NOTIFY event handler
    Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate('int;int;int', $lParam);NMHDR (hwndFrom, idFrom, code)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    Select
    Case $wParam = $ListView
    Select
    Case $event = $NM_CLICK
    ListView_Click ()
    Case $event = $NM_DBLCLK
    ListView_DoubleClick ()
    EndSelect
    EndSelect
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>WM_Notify_Events

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

    Func _OutExcel()
    ProgressOn('Progress...', 'Wait for teh Serializer to export it to Excel', '0 percent')
    $oExcel = ObjCreate('Excel.Application')
    WITH $oExcel
    .Visible = 1
    .WorkBooks.Add
    $a_Itema = _GUICtrlListViewGetItemCount($listview)
    $nowstatus = 100/$a_Itema
    .ActiveWorkBook.ActiveSheet.Cells(1,1).Value='Product Name'
    .ActiveWorkBook.ActiveSheet.Cells(1,2).Value='Name/ID'
    .ActiveWorkBook.ActiveSheet.Cells(1,3).Value='Serial/Key/License/Code'
    For $i = 2 To $a_Itema+1
    $ret2 = _GUICtrlListViewGetItemText ($listview,$i-2,0)
    $ret3 = _GUICtrlListViewGetItemText ($listview,$i-2,1)
    $ret4 = _GUICtrlListViewGetItemText ($listview,$i-2,2)
    .ActiveWorkBook.ActiveSheet.Cells($i,1).Value=$ret2
    .ActiveWorkBook.ActiveSheet.Cells($i,2).Value=$ret3
    .ActiveWorkBook.ActiveSheet.Cells($i,3).Value=$ret4
    $nowstatus2 = Round($nowstatus*($i-1),2)
    ProgressSet($nowstatus2, $nowstatus2 & ' percent')
    Next
    ProgressOff()
    .Columns('A:AY').EntireColumn.AutoFit
    ENDWITH
    EndFunc ;==>_OutExcel()

    [/autoit]

    So long,

    Mega

  • der code von "Jonk" geht mit MS Office auch super.

    [autoit]

    Const $xlAscending = 1
    Dim $ExcelObjekt
    Dim $Datei
    Dim $Zaehler
    ;~ ' Excel-Objekt erzeugen
    $ExcelObjekt = ObjCreate("Excel.Application")
    ;~ ' Excel sichtbar machen
    $ExcelObjekt.Visible = 1
    ;~ ' Eine neue Arbeitsmappe hinzufügen
    $ExcelObjekt.WorkBooks.Add()

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


    $ExcelObjekt.Cells(1,1).Value = "a"
    $ExcelObjekt.Cells(1,2).Value = "b"
    $ExcelObjekt.Cells(1,3).Value = "c"
    $ExcelObjekt.Cells(1,4).Value = "d"
    $ExcelObjekt.Cells(1,5).Value = "e"
    $ExcelObjekt.Cells(1,6).Value = "f"
    $ExcelObjekt.Cells(1,7).Value = "g"

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

    $ExcelObjekt.Range("A1:G1").Select
    $ExcelObjekt.Selection.Font.Bold = True

    [/autoit]

    kann man das auf OOo umlegen?

    wie gesagt die datei muss nicht erstellt werden nur geöffnet und ein paar werte eingetragen, so wie es "Jonk" schon gemacht hat.
    auch nicht speicher muss gemacht werden, da ich das doku dann drucke und je nach meinen Arbeits Thema abspeichern muss :)

    Doktore

  • hi,

    das geht auch mit OpenOffice. Ich müßte da auch irgendwo noch ein funktionierendes Beispiel haben... ich werde mal suchen.

  • hast du schon mal geschaut? :)

    also das Excel macht mich fertig :(

    ich will eine vorhandes Excel datei so bearbeiten, aber ich bekomme das nicht hin.

    auch das starten von einer vorhandenen dati bekomme ich nicht hin :(

    Spoiler anzeigen
    [autoit]

    Const $xlAscending = 1
    Dim $ExcelObjekt
    Dim $Datei
    Dim $Zaehler

    ;~ ' Excel-Objekt erzeugen
    ;$ExcelObjekt = ObjCreate("Excel.Application")

    $ExcelObjekt = "Microsoft Excel - Steuerung.xls"


    ;~ ' Excel sichtbar machen
    $ExcelObjekt.Visible = 1

    ;~ ' Eine neue Arbeitsmappe hinzufügen
    ;$ExcelObjekt.WorkBooks.Add()


    $ExcelObjekt.Cells(1,1).Value = "a"
    $ExcelObjekt.Cells(1,2).Value = "b"
    $ExcelObjekt.Cells(1,3).Value = "c"
    $ExcelObjekt.Cells(1,4).Value = "d"
    $ExcelObjekt.Cells(1,5).Value = "e"
    $ExcelObjekt.Cells(1,6).Value = "f"
    $ExcelObjekt.Cells(1,7).Value = "g"

    ;$ExcelObjekt.Range("A1:G1").Select
    ;$ExcelObjekt.Selection.Font.Bold = True

    [/autoit]

    Doktore

    Einmal editiert, zuletzt von Dr.Galvany (18. Februar 2007 um 12:30)

  • soi hab mich nochmal aufm englischen forum umgeschaut und was schickes gefunden wie man nen leeres exel dings erstellt....

    Spoiler anzeigen
    [autoit]

    Dim $OpenPar[3]
    Global $setOOoProp

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

    ;Instancie OOo : ces deux lignes sont obligatoires avec VB dans tout code !
    $oSM = Objcreate("com.sun.star.ServiceManager")
    $oDesk = $oSM.createInstance("com.sun.star.frame.Desktop")

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

    ;On appelle la fonction setOOoProp définie précédemment pour récupérer la structure
    $OpenPar[0]= setProp("ReadOnly", True)
    $OpenPar[1] = setProp("Password", "secret")
    $OpenPar[2] = setProp("Hidden", False)

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

    ;On appelle la fonction OOo loadComponentFromURL, en lui passant en
    $r_doc = $oDesk.loadComponentFromURL( "private:factory/scalc", "_blank", 0, $OpenPar)

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

    Exit

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

    Func setProp($cName, $uValue)

    ; Dim $oPropertyValue
    ; Dim $oSM

    $oSM = Objcreate("com.sun.star.ServiceManager")
    $oPropertyValue = $oSM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
    $oPropertyValue.Name = $cName
    $oPropertyValue.Value = $uValue

    $setOOoProp= $oPropertyValue
    Return $setOOoProp
    EndFunc

    [/autoit]


    script can be found under
    http://www.autoitscript.com/forum/index.php?showtopic=19200&hl=openoffice
    COM-Obejecs can be found under
    http://api.openoffice.org/docs/common/re…/module-ix.html


    ne udf war bis jetzt leider nicht aufzutreiben..ansonsten muss der jonk mal posten was er hat...
    der snoozy