Seite 4 von 5

Verfasst: 30.01.2009 10:24
von CNESM
Hallo Leute,

das Ganze entwickelt sich genau in die Richtung, in die ich gehen möchte. Leider habe ich bei einer kleinen Sache noch ein Problem, vielleicht könnt ihr mir da helfen:

Code: Alles auswählen

IncludePath "C:\Users\f13820\Desktop\4.3\"
XIncludeFile "COMate.pbi"

ExcelObject.COMateObject

If OpenWindow(0,#PB_Ignore,#PB_Ignore,800,600,"COMate: OWC11.Spreadsheet-Demo",#PB_Window_SystemMenu|#PB_Window_Invisible)
    
  ExcelObject=COMate_CreateActiveXControl(0,0,800,600,"OWC11.Spreadsheet")

  ExcelObject\SetProperty("Cells(1,1) = 'Özgür'")
  ExcelObject\SetProperty("Cells(1,2) = 'Levent'")
  ExcelObject\SetProperty("Cells(2,1) = 10")
  ExcelObject\SetProperty("Cells(2,2) = 20")
  
  ExcelObject\SetProperty("Cells(1, 1)\Interior\Color = 18915966")
  ExcelObject\SetProperty("Cells(1, 2)\Interior\Color = 18915966")
  ExcelObject\SetProperty("Cells(2, 1)\Interior\Color = 18915966")
  ExcelObject\SetProperty("Cells(2, 2)\Interior\Color = 18915966")
  
  ExcelObject\SetProperty("Cells(1, 1)\Font\Color = 255255255")
  ExcelObject\SetProperty("Cells(1, 2)\Font\Color = 255255255")
  ExcelObject\SetProperty("Cells(2, 1)\Font\Color = 255255255")
  ExcelObject\SetProperty("Cells(2, 2)\Font\Color = 255255255")
  
  ExcelObject\GetObjectProperty("Sheets('3')\Delete")
  ExcelObject\GetObjectProperty("Sheets('2')\Delete")

  ExcelObject\SetProperty("Cells(1, 1)\HorizontalAlignment = -4152") ;-4152 = xlRight
  ExcelObject\SetProperty("Cells(1, 2)\HorizontalAlignment = -4152") ;-4152 = xlRight
  ExcelObject\SetProperty("Cells(2, 1)\HorizontalAlignment = -4152") ;-4152 = xlRight
  ExcelObject\SetProperty("Cells(2, 2)\HorizontalAlignment = -4152") ;-4152 = xlRight
  
  
  ExcelObject\SetProperty("Cells(1, 1)\Borders(7)\LineStyle = 1") ;7 = xlEdgeLeft ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(1, 1)\Borders(8)\LineStyle = 1") ;8 = xlEdgeTop ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(1, 1)\Borders(9)\LineStyle = 1") ;9 = xlEdgeBottom ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(1, 1)\Borders(10)\LineStyle = 1") ;10 = xlEdgeRight ; 1 = xlContinuous
  
  ExcelObject\SetProperty("Cells(1, 2)\Borders(7)\LineStyle = 1") ;7 = xlEdgeLeft ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(1, 2)\Borders(8)\LineStyle = 1") ;8 = xlEdgeTop ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(1, 2)\Borders(9)\LineStyle = 1") ;9 = xlEdgeBottom ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(1, 2)\Borders(10)\LineStyle = 1") ;10 = xlEdgeRight ; 1 = xlContinuous
  
  ExcelObject\SetProperty("Cells(2, 1)\Borders(7)\LineStyle = 1") ;7 = xlEdgeLeft ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(2, 1)\Borders(8)\LineStyle = 1") ;8 = xlEdgeTop ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(2, 1)\Borders(9)\LineStyle = 1") ;9 = xlEdgeBottom ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(2, 1)\Borders(10)\LineStyle = 1") ;10 = xlEdgeRight ; 1 = xlContinuous
  
  ExcelObject\SetProperty("Cells(2, 2)\Borders(7)\LineStyle = 1") ;7 = xlEdgeLeft ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(2, 2)\Borders(8)\LineStyle = 1") ;8 = xlEdgeTop ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(2, 2)\Borders(9)\LineStyle = 1") ;9 = xlEdgeBottom ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(2, 2)\Borders(10)\LineStyle = 1") ;10 = xlEdgeRight ; 1 = xlContinuous
  
  ExcelObject\SetProperty("Cells(1, 1)\Borders(7)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(1, 1)\Borders(8)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(1, 1)\Borders(9)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(1, 1)\Borders(10)\Weight = 2") ;2 = xlThin
  
  ExcelObject\SetProperty("Cells(1, 2)\Borders(7)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(1, 2)\Borders(8)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(1, 2)\Borders(9)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(1, 2)\Borders(10)\Weight = 2") ;2 = xlThin
  
  ExcelObject\SetProperty("Cells(2, 1)\Borders(7)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(2, 1)\Borders(8)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(2, 1)\Borders(9)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(2, 1)\Borders(10)\Weight = 2") ;2 = xlThin
  
  ExcelObject\SetProperty("Cells(2, 2)\Borders(7)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(2, 2)\Borders(8)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(2, 2)\Borders(9)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(2, 2)\Borders(10)\Weight = 2") ;2 = xlThin
  
  ExcelObject\SetProperty("DisplayToolbar = #False")
  ExcelObject\SetProperty("ScreenUpdating = #True")
  ExcelObject\SetProperty("ViewOnlyMode = #True") ;Schreibschutz
  ExcelObject\SetProperty("DisplayOfficeLogo = #False")
  ExcelObject\SetProperty("DisplayTitleBar = #False")
  
  ExcelObject\SetProperty("ViewableRange = '$A$1:$E$5")
  ExcelObject\SetProperty("SheetSelector = #False")
  
  HideWindow(0,0) 

  If ExcelObject 
    Repeat 
    Until WaitWindowEvent()=#PB_Event_CloseWindow
    ExcelObject\Release()
  EndIf
  CloseWindow(0)
EndIf
Sämtlicher Code läuft bei mir problemlos, nur die zwei letzten Funktionen werden nicht ausgeführt:

Code: Alles auswählen

  ExcelObject\SetProperty("ViewableRange = '$A$1:$E$5'")
  ExcelObject\SetProperty("SheetSelector = #False")
In Exel würde die Funktion "ViewableRange" wie folgt ausgeführt

Code: Alles auswählen

Spreadsheet1.ActiveWindow.ViewableRange = "$A$1:$E$5" 
bzw mit:

Code: Alles auswählen

Me.Spreadsheet1.ActiveWindow.ViewableRange = "$A$1:$E$5" 
Weiß jemand Abhilfe?

Grüße

Verfasst: 30.01.2009 10:46
von Kiffi
versuch mal:

Code: Alles auswählen

  ExcelObject\SetProperty("ActiveWindow\ViewableRange = '$A$1:$E$5'")
  ExcelObject\SetProperty("ActiveWindow\SheetSelector = #False")
Grüße ... Kiffi

Verfasst: 30.01.2009 10:56
von CNESM
Danke, funktioniert aber nicht ...

Verfasst: 30.01.2009 11:35
von Kiffi
so is besser:

Code: Alles auswählen

  ExcelObject\SetProperty("ActiveWindow\ViewableRange = 'A1:E5'")
einen SheetSelector hingegen gibt es im ObjektKatalog gar nicht...

Grüße ... Kiffi

Verfasst: 30.01.2009 12:03
von CNESM
Kiffi hat geschrieben:so is besser:

Code: Alles auswählen

  ExcelObject\SetProperty("ActiveWindow\ViewableRange = 'A1:E5'")
einen SheetSelector hingegen gibt es im ObjektKatalog gar nicht...

Grüße ... Kiffi
Ahh, okey verstanden. Danke :)

ViewableRange gibt es laut Eigenschaftsfenster auch nicht und trotzdem kann man es setzen. Die SheetSelector Sache gibts wohl wirklich nicht, auf jedenfall kann man das auch in Excel nicht (mehr) ansprechen. Ist eine sogenannte Disabled-Call-Funktion und kann nur vorher gesetzt werden, aber irgendwie muss ja Excel das der DLL mitteilen, da man es ja verändern kann .... Mhh

Verfasst: 30.01.2009 12:15
von ts-soft
CNESM hat geschrieben:Ist eine sogenannte Disabled-Call-Funktion und kann nur vorher gesetzt werden, aber irgendwie muss ja Excel das der DLL mitteilen, da man es ja verändern kann .... Mhh
Seh mal unter: SetDesignTimeMode() in der Hilfe von COMate nach. Kann
leider nichts testen, hab wohl ne andere Office Version.

Verfasst: 30.01.2009 12:31
von Kiffi
CNESM hat geschrieben:ViewableRange gibt es laut Eigenschaftsfenster auch nicht und trotzdem kann man es setzen.
nicht, dass wir aneinander vorbeireden:

Eigenschaftsfenster != Objektkatalog. Drück in Deinem VB6 mal <F2>. Das,
was Du dann siehst, ist der Objektkatalog, der alle Objekte / Eigenschaften
und Methoden des aktuellen VB-Projektes anzeigt. Und da gibt es ein ViewableRange.
CNESM hat geschrieben:Ist eine sogenannte Disabled-Call-Funktion und kann nur vorher gesetzt werden, aber irgendwie muss ja Excel das der DLL mitteilen, da man es ja verändern kann .... Mhh
wie gesagt: SheetSelector finde ich nirgendwo. Wenn wir uns hingegen
auf DisplayWorkbookTabs einigen könnten? ;-)

Code: Alles auswählen

ExcelObject\SetProperty("ActiveWindow\ViewableRange = 'A1:E5'")
ExcelObject\SetProperty("ActiveWindow\DisplayWorkbookTabs = #False") 
Grüße ... Kiffi

Verfasst: 30.01.2009 13:48
von CNESM
Mensch Kiffi, klasse! Genau das ist es, du bist ja echt nen Programmierexperte :-) Vielen Dank für deine andauernde Hilfe! So langsam steig ich auch ansatzweiße in dem Thema durch. Und ich muss ebenfalls zugeben, das die Methode mit der Nutzung der .pbi auch die richtige Entscheidung war, auch wenn ich dazu Excel benötigte. Durch die Einfachheit, VBA zu nutzen, lassen sich deutlich einfacher und schneller Ergebnisse erzielen, als dies mit der OLE COM Generator wohl möglich gewesen wäre.

SheetSelector gab es mal, ist aber mittlerweile keine unterstützte Funktion mehr .... Da haste wohl wieder recht gehabt :-)

Ich bin nun gerade dabei, das Spreadsheet mit einem Chart zu verbinden. Ich habe bereits mal ein bissle rumgetüftelt, komme aber beim Setzen der Diagrammendaten nicht wirklich weiter. Hier mal mein bisheriger Code:

Code: Alles auswählen

IncludePath "C:\Users\f13820\Desktop\4.3\"
XIncludeFile "COMate.pbi"

ExcelObject.COMateObject
ExcelObject1.COMateObject

If OpenWindow(0,#PB_Ignore,#PB_Ignore,800,800,"COMate: OWC11.Spreadsheet-Demo",#PB_Window_Invisible|#PB_Window_SystemMenu)
    
  ExcelObject=COMate_CreateActiveXControl(0,0,800,400,"OWC11.Spreadsheet")

  ExcelObject\SetProperty("Cells(1,1) = 'Özgür'")
  ExcelObject\SetProperty("Cells(1,2) = 'Levent'")
  ExcelObject\SetProperty("Cells(2,1) = 10")
  ExcelObject\SetProperty("Cells(2,2) = 20")
  
  ExcelObject\SetProperty("Cells(1, 1)\Interior\Color = 18915966")
  ExcelObject\SetProperty("Cells(1, 2)\Interior\Color = 18915966")
  ExcelObject\SetProperty("Cells(2, 1)\Interior\Color = 18915966")
  ExcelObject\SetProperty("Cells(2, 2)\Interior\Color = 18915966")
  
  ExcelObject\SetProperty("Cells(1, 1)\Font\Color = 255255255")
  ExcelObject\SetProperty("Cells(1, 2)\Font\Color = 255255255")
  ExcelObject\SetProperty("Cells(2, 1)\Font\Color = 255255255")
  ExcelObject\SetProperty("Cells(2, 2)\Font\Color = 255255255")
  
  ExcelObject\GetObjectProperty("Sheets('3')\Delete")
  ExcelObject\GetObjectProperty("Sheets('2')\Delete")

  ExcelObject\SetProperty("Cells(1, 1)\HorizontalAlignment = -4152") ;-4152 = xlRight
  ExcelObject\SetProperty("Cells(1, 2)\HorizontalAlignment = -4152") ;-4152 = xlRight
  ExcelObject\SetProperty("Cells(2, 1)\HorizontalAlignment = -4152") ;-4152 = xlRight
  ExcelObject\SetProperty("Cells(2, 2)\HorizontalAlignment = -4152") ;-4152 = xlRight
  
  
  ExcelObject\SetProperty("Cells(1, 1)\Borders(7)\LineStyle = 1") ;7 = xlEdgeLeft ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(1, 1)\Borders(8)\LineStyle = 1") ;8 = xlEdgeTop ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(1, 1)\Borders(9)\LineStyle = 1") ;9 = xlEdgeBottom ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(1, 1)\Borders(10)\LineStyle = 1") ;10 = xlEdgeRight ; 1 = xlContinuous
  
  ExcelObject\SetProperty("Cells(1, 2)\Borders(7)\LineStyle = 1") ;7 = xlEdgeLeft ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(1, 2)\Borders(8)\LineStyle = 1") ;8 = xlEdgeTop ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(1, 2)\Borders(9)\LineStyle = 1") ;9 = xlEdgeBottom ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(1, 2)\Borders(10)\LineStyle = 1") ;10 = xlEdgeRight ; 1 = xlContinuous
  
  ExcelObject\SetProperty("Cells(2, 1)\Borders(7)\LineStyle = 1") ;7 = xlEdgeLeft ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(2, 1)\Borders(8)\LineStyle = 1") ;8 = xlEdgeTop ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(2, 1)\Borders(9)\LineStyle = 1") ;9 = xlEdgeBottom ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(2, 1)\Borders(10)\LineStyle = 1") ;10 = xlEdgeRight ; 1 = xlContinuous
  
  ExcelObject\SetProperty("Cells(2, 2)\Borders(7)\LineStyle = 1") ;7 = xlEdgeLeft ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(2, 2)\Borders(8)\LineStyle = 1") ;8 = xlEdgeTop ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(2, 2)\Borders(9)\LineStyle = 1") ;9 = xlEdgeBottom ; 1 = xlContinuous
  ExcelObject\SetProperty("Cells(2, 2)\Borders(10)\LineStyle = 1") ;10 = xlEdgeRight ; 1 = xlContinuous
  
  ExcelObject\SetProperty("Cells(1, 1)\Borders(7)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(1, 1)\Borders(8)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(1, 1)\Borders(9)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(1, 1)\Borders(10)\Weight = 2") ;2 = xlThin
  
  ExcelObject\SetProperty("Cells(1, 2)\Borders(7)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(1, 2)\Borders(8)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(1, 2)\Borders(9)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(1, 2)\Borders(10)\Weight = 2") ;2 = xlThin
  
  ExcelObject\SetProperty("Cells(2, 1)\Borders(7)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(2, 1)\Borders(8)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(2, 1)\Borders(9)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(2, 1)\Borders(10)\Weight = 2") ;2 = xlThin
  
  ExcelObject\SetProperty("Cells(2, 2)\Borders(7)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(2, 2)\Borders(8)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(2, 2)\Borders(9)\Weight = 2") ;2 = xlThin
  ExcelObject\SetProperty("Cells(2, 2)\Borders(10)\Weight = 2") ;2 = xlThin
  
  ExcelObject\SetProperty("DisplayToolbar = #False")
  ExcelObject\SetProperty("ScreenUpdating = #True")
  ExcelObject\SetProperty("ViewOnlyMode = #True") ;Schreibschutz
  ExcelObject\SetProperty("DisplayOfficeLogo = #False")
  ExcelObject\SetProperty("DisplayTitleBar = #False")
  ExcelObject\SetProperty("ActiveWindow\ViewableRange = 'A1:B2'")
  

ExcelObject\SetProperty("ActiveWindow\DisplayWorkbookTabs = #False") 
  
  ;##############################################################
  
  ExcelObject1=COMate_CreateActiveXControl(0,400,800,400,"OWC11.ChartSpace")
  ExcelObject1\SetProperty("DisplayOfficeLogo = #True")
  ExcelObject1\SetProperty("DisplayToolbar = #True")
  ExcelObject1\SetProperty("AllowPropertyToolbox = #True")
  
  ExcelObject1\SetProperty("HasChartSpaceTitle = #True")
  ExcelObject1\SetProperty("ChartSpaceTitle\Caption = 'Overview'")
  ExcelObject1\SetProperty("ChartSpaceTitle\Font\Bold = #True")
  ExcelObject1\SetProperty("ChartSpaceTitle\Font\Underline = #True")
  
  ;Hier komm ich nicht weiter
  
  ExcelObject1\SetProperty("Type = 6") ;6=chChartTypeLine
  ExcelObject1\SetProperty("DataSource = 'Spreadsheet1'")
  ExcelObject1\SetProperty("SeriesCollection\Add")
  
  ExcelObject1\SetProperty("SeriesCollection(0)\SetData 0, 0, 'B1'")  ;0 = chDimSeriesNames
  ExcelObject1\SetProperty("SeriesCollection(0)\SetData 1, 0, 'A1:B1'") ;1 = chDimCategories
  ExcelObject1\SetProperty("SeriesCollection(0)\SetData 2, 0, 'A2:B2'") ;2=chDimValues
  
  
  ;ChartSpace1.Charts(0).Type = chChartTypeLine
  ;ChartSpace1.DataSource = Spreadsheet1
  ;ChartSpace1.Charts(0).SeriesCollection.Add
  
  ;ChartSpace1.Charts(0).SeriesCollection(0).SetData chDimSeriesNames, 0, "B1"
  ;ChartSpace1.Charts(0).SeriesCollection(0).SetData chDimCategories, 0, "A1:B1"
  ;ChartSpace1.Charts(0).SeriesCollection(0).SetData chDimValues, 0, "A2:B2"
  
  HideWindow(0,0)
  
  If ExcelObject 
    Repeat 
    Until WaitWindowEvent()=#PB_Event_CloseWindow
    ExcelObject\Release()
  EndIf
  CloseWindow(0)
EndIf
Das Chart wird erfolgreich erstellt. Da wo die Probleme anfangen, habe ich mit dem Kommentar " ;Hier komm ich nicht weiter" versehen. Die folgenden Zeilen führen nicht zum Erfolg. In VB funktioniert das Ganze (siehe auskommentierte Funktionen). Eventuell liegt es am fehlenden Object, das bei VB mit "Charts(0)." mitgegeben wird. Ohne diese Angabe funktioniert das Ganze auch in VB nicht. Wie übergeb ich das am Besten in PB?. Einfach "Charts(0)\" zu verwenden funktioniert nicht, wäre ja auch zu einfach gewesen ...

Verfasst: 30.01.2009 14:09
von Kiffi
CNESM hat geschrieben:Und ich muss ebenfalls zugeben, das deine Methode mit der Nutzung der .pbi auch die richtige Entscheidung war, auch wenn ich dazu Excel benötigte. Durch die Einfachheit, VBA zu nutzen, lassen sich deutlich einfacher und schneller Ergebnisse erzielen, als dies mit der OLE COM Generator wohl möglich gewesen wäre.
Thomas hat es zwar schon erwähnt, aber hier noch einmal: so oder so
hättest Du auf jeden Fall ein installiertes Excel auf dem Rechner benötigt,
auf dem Dein Programm laufen soll. Der OLE COM Generator macht nix
anderes, als die Aufrufe der von Excel zur Verfügung gestellten
Funktionalitäten in eine PB-Syntax zu überführen. Ohne Excel läuft also
nix. :-)
CNESM hat geschrieben:Ich bin nun gerade dabei, das Spreadsheet mit einem Chart zu verbinden. Ich habe bereits mal ein bissle rumgetüftelt, komme aber beim Setzen der Diagrammendaten nicht wirklich weiter.
mh, das erste, was mir direkt auffällt ist, dass Du keine Beziehung
zwischen den beiden Controls herstellst. Das Chart soll ja seine Daten auf
dem Sheet holen. Da fehlt also noch was.

Ich bin jetzt auch nicht so der Excel-Experte (eher im Gegenteil: Wo es
möglich ist, da vermeide ich den Einsatz von Excel). Das müsste ich mir
also noch genauer anschauen.

Grüße ... Kiffi

// Edit: Da habe ich mich verguckt. DataSource wird von Dir gesetzt
(wenn auch falsch ;-))

Verfasst: 30.01.2009 14:33
von CNESM

Code: Alles auswählen

// Edit: Da habe ich mich verguckt. DataSource wird von Dir gesetzt 
(wenn auch falsch )
Und was ist falsch? :-)

VBA:

Code: Alles auswählen

ChartSpace1.DataSource = Spreadsheet1 
PB:

Code: Alles auswählen

ExcelObject1\SetProperty("DataSource = 'Spreadsheet1'")