Excel-Tabelle in GUI-Fenster eingebettet?

    • Offizieller Beitrag

    Zum Thema Excel findet man ja eigentlich jede Menge. Auch UDFs usw., aber was ich suche ist eine Möglichkeit eine Excel-Tabelle in einem GUI-Fenster zu erstellen, also eingebettet sozusagen. So dass man nicht die Symbolleisten, Statusleiste usw. sieht, sondern nur die Tabelle. Kennt jemand eine Möglichkeit sowas zu machen? Oder geht das nicht?

    Würde mir eine Menge Arbeit ersparen. :)

    • Offizieller Beitrag

    Du möchtest also ein "EmbeddedObject" gestalten. Gesehen hab ich es noch nicht. Adhoc wüßte ich nicht, wie ich es angehen sollte, würde aber die Machbarkeit nicht unbedingt in Frage stellen.
    Ich wünsch dir auf jeden Fall Erfolg bei deiner Suche.

    • Offizieller Beitrag

    Hallo

    Kann es leider nicht testen, da es mit Office 2007 nicht funktioniert, aber einbisschen im Engl Forum suchen hilft immer (hier hab ich die Keyword "excel" und "embedded" benutzt ;) )
    http://www.autoitscript.com/forum/index.php?showtopic=17802&hl=excel++embedded

    Mfg Spider

    • Offizieller Beitrag

    GtaSpider : Gesucht habe ich auch im engl. Forum, aber zuviel gefunden/falschen Suchbegriff verwendet. :rolleyes:
    Vielen Dank! Du hast genau das Richtige gefunden, denke ich. Muss das noch ausgiebig testen.

    Danke! Danke! Danke! Das erspart mir eine Menge Arbeit. :thumbup:

    Edit: Hier noch ein Beispiel, wo wirklich nur die Tabelle zu sehen ist, eingebettet in ein AutoIt-GUI-Fenster. :)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>

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

    $Form1 = GUICreate('Embedded Excel', 600, 600, -1, -1)
    $Obj1 = ObjCreate('OWC10.Spreadsheet')

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

    $Obj1_ctrl = GUICtrlCreateObj($Obj1,50, 50,500,500)

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

    With $Obj1
    .AutoFit=0
    .DisplayGridlines=-1
    .DisplayHorizontalScrollBar=0
    .DisplayTitleBar=0
    .DisplayToolbar=0
    .DisplayVerticalScrollBar=0
    .EnableEvents=-1
    .MoveAfterReturn=-1
    .RightToLeft=0
    .ViewableRange='1:28'
    EndWith
    With $Obj1
    .range('A1').value = 'aaa'
    .range('A2').value = '65'
    .range('A3').value = '75'
    .range('B1').value = 'bbb'
    .range('C1').value = 'ccc'
    .range('A19').value = 'SUM(A2:A18)'
    .range('A20').formula = '=SUM(A2:A18)'
    Endwith
    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Wenn ich das Script von Oscar ausführe erscheint bei mir eine Fehlermeldung:

    Code
    C:\Dokumente und Einstellungen\test\Eigene Dateien\tabelle ind gui.au3 (8) : ==> Only Object-type variables allowed in an "With" statement.: 
    
    
    With $Obj1 
    
    
    With ^ ERROR


    Wie kann ich das umgehen?
    Wo liegt bei mir der Fehler?

    • Offizieller Beitrag

    Die Fehlermeldung besagt, dass das Excel-Objekt nicht existiert.
    Sollte man abfangen mit:

    [autoit]

    $Obj1 = ObjCreate('OWC10.Spreadsheet')
    If Not IsObj($Obj1) Then Exit MsgBox(0, 'Fehler', 'Excel-Objekt konnte nicht erstellt werden.')

    [/autoit]

    Um eine Referenz auf Excel zu erstellen mußt du natürlich Excel installiert haben. - Hast du das? ^^

    • Offizieller Beitrag

    Stimmt! Man sollte auch abfragen, ob das erzeugen des Objekts auch geklappt hat. Könnte ja sein, das jemand gar kein Excel (in dem Fall die XP-Version) installiert hat. Danke!

    Hier habe ich nochmal ein Beispiel, wo das eingebaut ist und in dem noch einige Befehle drin sind, wie man die einzelnen Spalten, Zeilen und Zellen beeinflussen kann (Schriftart, Farbe, Hintergrundfarbe, Größe, Breite usw.).

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>

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

    $Form1 = GUICreate('Embedded Excel', 600, 600, -1, -1)
    $Obj1 = ObjCreate('OWC10.Spreadsheet')
    If Not IsObj($Obj1) Then Exit MsgBox(0, 'Fehler', 'Excel-Objekt konnte nicht erstellt werden.')

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

    $Obj1_ctrl = GUICtrlCreateObj($Obj1,50, 50,500,500)

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

    With $Obj1
    .AutoFit=0
    .DisplayGridlines=-1
    .DisplayHorizontalScrollBar=0
    .DisplayTitleBar=0
    .DisplayToolbar=0
    .DisplayVerticalScrollBar=0
    .EnableEvents=-1
    .MoveAfterReturn=-1
    .RightToLeft=0
    .ViewableRange='1:26'
    EndWith
    With $Obj1
    .range("A1:D1").Font.Size = 16
    .range("A1:D1").Font.Color = 0xffffff
    .range("A1:D1").Font.Bold = TRUE
    .range("A1:D1").Interior.Color = 0x8888ff
    .range("C1:D1").Interior.Color = 0xff8888
    .range("A1:D1").HorizontalAlignment = -4108; -4108 = center, -4131 = left, -4152 = right
    .range("A1:D1").VerticalAlignment = -4108; -4108 = center, -4107 = bottom, -4130 = justify, -4160 = top
    .Columns("A:G").ColumnWidth = 14
    .Rows("1:1").RowHeight = 25
    .range('A1').value = 'aaa'
    .range('A2').value = '65'
    .range('A3').value = '75'
    .range('B1').value = 'bbb'
    .range('C1').value = 'ccc'
    .range('D1').value = 'ddd'
    .range('A19').value = 'SUM(A2:A18)'
    .range('A20').formula = '=SUM(A2:A18)'
    .range('A1').activate
    Endwith

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

    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Ich hab hier noch Office 2003 eingebaut. (Wenn owc10 nicht geht wird owc11 getestet)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $Form1 = GUICreate('Embedded Excel', 600, 600, -1, -1)
    $Obj1 = ObjCreate('OWC10.Spreadsheet')
    If Not IsObj($Obj1) Then
    $Obj1 = ObjCreate('OWC11.Spreadsheet')
    If Not IsObj($Obj1) Then Exit MsgBox(0, 'Fehler', 'Excel-Objekt konnte nicht erstellt werden.')
    EndIf

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

    $Obj1_ctrl = GUICtrlCreateObj($Obj1,50, 50,500,500)

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

    With $Obj1
    .AutoFit=0
    .DisplayGridlines=-1
    .DisplayHorizontalScrollBar=0
    .DisplayTitleBar=0
    .DisplayToolbar=0
    .DisplayVerticalScrollBar=0
    .EnableEvents=-1
    .MoveAfterReturn=-1
    .RightToLeft=0
    .ViewableRange='1:26'
    EndWith
    With $Obj1
    .range("A1:D1").Font.Size = 16
    .range("A1:D1").Font.Color = 0xffffff
    .range("A1:D1").Font.Bold = TRUE
    .range("A1:D1").Interior.Color = 0x8888ff
    .range("C1:D1").Interior.Color = 0xff8888
    .range("A1:D1").HorizontalAlignment = -4108; -4108 = center, -4131 = left, -4152 = right
    .range("A1:D1").VerticalAlignment = -4108; -4108 = center, -4107 = bottom, -4130 = justify, -4160 = top
    .Columns("A:G").ColumnWidth = 14
    .Rows("1:1").RowHeight = 25
    .range('A1').value = 'aaa'
    .range('A2').value = '65'
    .range('A3').value = '75'
    .range('B1').value = 'bbb'
    .range('C1').value = 'ccc'
    .range('D1').value = 'ddd'
    .range('A19').value = 'SUM(A2:A18)'
    .range('A20').formula = '=SUM(A2:A18)'
    .range('A1').activate
    Endwith

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

    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • also ich kenn mich damit net so richtich aus aber ich hab ma so ne exeltabelle mit dem editor geöffnen und das war alles html also könnte ma das ja vllt auch so einbinden frag mich net wie aber das geht bestimmt.

    naja ich hoffe ich hab noch geholfen wenn schon so viele antworten da sind :D

  • ähhm, so was soll HTML sein ??

    Code
    ÐÏà¡±á                >  þÿ	                          þÿÿÿ    þÿÿÿ       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ	   éÍÉÀ    á  °Á    â   \ p   XXX                                                                                                        B  °a   À  =    œ               ¯   ¼   =  x K «6ö'8      X@        "       ·   Ú    1  È   ÿ     ¾A r i a l 1  È   ÿ     ¾A r i a l 1  È   ÿ     ¾A r i a l 1  È   ÿ     ¾A r i a l 1      ÿ     ¾A r i a l 3   # , # # 0 \   " ¬ " ; \ - # , # # 0 \   " ¬ " =   # , # # 0 \   " ¬ " ; [ R


    usw...
    Nein, das geht nicht so einfach, das ohne Excel anzuzeigen :)

    • Offizieller Beitrag

    Hi,
    vergeßt mir das gute alte Excel 2000 nicht ;)

    Einige Methoden sind darunter allerdings nicht verfügbar. Aber so kann man zumindest in allen Versionen arbeiten.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $Form1 = GUICreate('Embedded Excel', 600, 600, -1, -1)
    For $i = 1 To 3
    Switch $i
    Case 1
    $Obj1 = ObjCreate('OWC.Spreadsheet') ; OWC 9.0 = Excel 2000
    Case 2
    $Obj1 = ObjCreate('OWC10.Spreadsheet')
    Case 3
    $Obj1 = ObjCreate('OWC11.Spreadsheet')
    EndSwitch
    If IsObj($Obj1) Then ExitLoop
    Next
    If Not IsObj($Obj1) Then Exit MsgBox(0, 'Fehler', 'Excel-Objekt konnte nicht erstellt werden.')

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

    $Obj1_ctrl = GUICtrlCreateObj($Obj1,50, 50,500,500)

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

    With $Obj1
    .AutoFit=0
    .DisplayGridlines=-1
    .DisplayHorizontalScrollBar=0
    .DisplayTitleBar=0
    .DisplayToolbar=0
    .DisplayVerticalScrollBar=0
    .EnableEvents=-1
    .MoveAfterReturn=-1
    .RightToLeft=0
    .ViewableRange='1:26'
    EndWith
    With $Obj1
    .range("A1:D1").Font.Size = 16
    .range("A1:D1").Font.Color = 0xffffff
    .range("A1:D1").Font.Bold = TRUE
    .range("A1:D1").Interior.Color = 0x8888ff
    .range("C1:D1").Interior.Color = 0xff8888
    #region - NICHT mit Excel 2000:
    .range("A1:D1").HorizontalAlignment = -4108; -4108 = center, -4131 = left, -4152 = right
    .range("A1:D1").VerticalAlignment = -4108; -4108 = center, -4107 = bottom, -4130 = justify, -4160 = top
    .Columns("A:G").ColumnWidth = 14
    .Rows("1:1").RowHeight = 25
    #endregion - NICHT mit Excel 2000
    .range('A1').value = 'aaa'
    .range('A2').value = '65'
    .range('A3').value = '75'
    .range('B1').value = 'bbb'
    .range('C1').value = 'ccc'
    .range('D1').value = 'ddd'
    .range('A19').value = 'SUM(A2:A18)'
    .range('A20').formula = '=SUM(A2:A18)'
    ; NICHT mit Excel 2000:
    .range('A1').activate
    Endwith

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

    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • So kann man zwischen den Versionen unterscheiden und dann Funktionen verwenden oder nicht

    Spoiler anzeigen
    [autoit]

    $Form1 = GUICreate('Embedded Excel', 600, 600, -1, -1)
    Global Const $E2000 = 1
    Global Const $EXP = 2
    Global Const $E2003 = 3
    For $EVersion = 1 To 3
    Switch $i
    Case 1
    $Obj1 = ObjCreate('OWC.Spreadsheet') ; OWC 9.0 = Excel 2000
    Case 2
    $Obj1 = ObjCreate('OWC10.Spreadsheet')
    Case 3
    $Obj1 = ObjCreate('OWC11.Spreadsheet')
    EndSwitch
    If IsObj($Obj1) Then ExitLoop
    Next
    If Not IsObj($Obj1) Then Exit MsgBox(0, 'Fehler', 'Excel-Objekt konnte nicht erstellt werden.')

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

    $Obj1_ctrl = GUICtrlCreateObj($Obj1,50, 50,500,500)

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

    With $Obj1
    .AutoFit=0
    .DisplayGridlines=-1
    .DisplayHorizontalScrollBar=0
    .DisplayTitleBar=0
    .DisplayToolbar=0
    .DisplayVerticalScrollBar=0
    .EnableEvents=-1
    .MoveAfterReturn=-1
    .RightToLeft=0
    .ViewableRange='1:26'
    EndWith
    With $Obj1
    .range("A1:D1").Font.Size = 16
    .range("A1:D1").Font.Color = 0xffffff
    .range("A1:D1").Font.Bold = TRUE
    .range("A1:D1").Interior.Color = 0x8888ff
    .range("C1:D1").Interior.Color = 0xff8888
    #region - NICHT mit Excel 2000:
    .range("A1:D1").HorizontalAlignment = -4108; -4108 = center, -4131 = left, -4152 = right
    .range("A1:D1").VerticalAlignment = -4108; -4108 = center, -4107 = bottom, -4130 = justify, -4160 = top
    .Columns("A:G").ColumnWidth = 14
    .Rows("1:1").RowHeight = 25
    #endregion - NICHT mit Excel 2000
    .range('A1').value = 'aaa'
    .range('A2').value = '65'
    .range('A3').value = '75'
    .range('B1').value = 'bbb'
    .range('C1').value = 'ccc'
    .range('D1').value = 'ddd'
    .range('A19').value = 'SUM(A2:A18)'
    .range('A20').formula = '=SUM(A2:A18)'
    ; NICHT mit Excel 2000:
    If $EVersion > $E2000 Then
    .range('A1').activate
    EndIF
    Endwith

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

    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag
    Zitat von Oscar

    Gibt es eigentlich irgendwo eine Übersicht über alle Methoden, die Excel unterstützt?


    Ja, in Excel selber.
    Öffne in Excel den Visual-Basic-Editor und dort den Objektkatalog. Bei Bibliotheken wählst du 'Excel'.
    Dann hast du eine komplette Übersicht.

  • Also eine Tabelle öffnen und beschreiben und wieder speichern kann ich in Excel 2007.

    Ich bekomme das aber nicht in die Gui eingebaut.

    So öffne ich eine Datei, beschreibe diese und schliesse diese auch wieder. Das alles klappt wunderbar.

    Spoiler anzeigen
    [autoit]

    Dim $infilename
    $infilename = "c:\test\test.xls"
    $oExcel = objCreate("Excel.Application")
    $oExcel.Visible = 0
    $oBooks = $oExcel.Workbooks.Open($infilename)
    $oSheet = $oBooks.Worksheets(1)
    $oSheet.Range("C3").Value = "neu eintragen"
    msgbox(0,"Debug",$oSheet.Range("C3").Value)
    $oBooks.Save
    $oBooks.Saved = True
    $oBooks.Close
    $oExcel.Quit

    [/autoit]

    Was muß ich denn jetzt bei dem "OWC" in AutoIt eintragen?
    Gruß Autoirrer