Excel Comate - Wie bearbeite ich eine bestimmte Tabelle?

Anfängerfragen zum Programmieren mit PureBasic.
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Excel Comate - Wie bearbeite ich eine bestimmte Tabelle?

Beitrag von TheSaint »

Hallo Zusammen,

wie kann ich auf eine bestimmte Tabelle in einer Excel Datei zugreifen?
Ich würde gerne weiter Comate verwenden.

Folgenden Code verwende ich zur Zeit:

Code: Alles auswählen

IncludePath #PB_Compiler_Home + "Include\"
XIncludeFile "U:\comate_pb4-3\COMate.pbi"

Define.COMateObject ExcelObject, WorkBook
ExcelObject = COMate_CreateObject("Excel.Application")
ExcelObject\SetProperty("Visible = #True")
ExcelObject\Invoke("Workbooks\Open('C:\Kassenbuch2008.xls')")

If ExcelObject
intRow.i = 13
  Repeat
    Cell$ = ExcelObject\GetStringProperty("Cells(" + Str(intRow) + ",4)")
    Cell$ = ExcelObject\GetStringProperty("Cells(" + Str(intRow) + ",6)")
    Cell$ = ExcelObject\GetStringProperty("Cells(" + Str(intRow) + ",7)")
    Cell$ = ExcelObject\GetStringProperty("Cells(" + Str(intRow) + ",8)")
    Cell$ = ExcelObject\GetStringProperty("Cells(" + Str(intRow) + ",9)")
    Cell$ = ExcelObject\GetStringProperty("Cells(" + Str(intRow) + ",10)")
    
     MessageRequester("Row: " + Str(intRow),Cell$)
    intRow = intRow + 1
  Until ExcelObject\GetStringProperty("Cells(intRow,1) = #nullstring") 

   ExcelObject\Invoke("Quit()")
  ExcelObject\Release()
Else
  MessageRequester("COMate -Excel demo", "Couldn't create the application object!") 
EndIf
Leider komme ich im Moment nicht weiter, stehe wie ein Ochse vorm Berg.

Ich möchte aus der Excel Datei eine bestimmte Tabelle auslesen:
z.B.: die Tabelle mit dem Namen: "01.2008".
Leider weis ich nicht welchen Befehl ich nutzen muss um die Tabellen-
Namen herauszufinden.

Wäre toll, wenn mir jemand helfen könnte.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo Zusammen,

habe herausgefunden, dass man mit diesen Befehlen:

Code: Alles auswählen

WorkSheet = ExcelObject\GetObjectProperty("Sheets('01.2008')")
WorkSheet\Invoke("Activate()")
ein Excel Sheet auswählen kann.

Aber, leider weis ich nicht, wie ich alle Sheet Namen aus einer Excel Datei herauslesen kann.
z. B. Sheet Namen: 01.2008 und 02.2008 usw.

Wäre toll, wenn jemand mir hierbei helfen könnte.
Habe nichts gefunden. Mein Englisch ist auch nicht so gut.

Schon mal vielen Dank.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Das geht so:

Code: Alles auswählen

    For a=1 To ExcelObject\GetIntegerProperty("Worksheets\Count")
      Debug ExcelObject\GetStringProperty("Worksheets("+ Str(a) +")\Name")
    Next
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo CNESM,

:D vielen Dank für Deine Hilfe.
Da wäre ich ja nie drauf gekommen.

Hätte nicht gedacht, dass die Lösung dem nahe kommt, die ich
in Access benutzt habe:

Code: Alles auswählen

For i = 1 To wbkXLS.Worksheets.Count
    Set Bereich = Nothing
    Set wksXLS = wbkXLS.Worksheets(wbkXLS.Worksheets(i).Name)
Naja, vielleicht liegt es daran, dass ich dem Englischen nicht so mächtig bin. Habe mir das ganze im englischen PB-Forum angesehen und auch Comate und deren Hilfe heruntergeladen.
Bin einfach nicht klargekommen.

Im Access VBA habe ich den folgenden Code benutzt um die Zeilenanzahl, die verwendet wird herauszufinden. Kann man das auch mit Comate machen?

Code: Alles auswählen

Set Bereich = wksXLS.Range("c13:n" & wksXLS.Range("H65536").End(xlUp).Row)
Gibt es einen ähnlichen Befehl, der mir die tatsächlich genutzte Zeilenanzahl angibt?

Komme irgendwie noch nicht richtig klar, wie ich die Befehle einsetze. Gibt es vielleicht noch eine andere Erläuterung, die ich durcharbeiten könnte?

Nochmals vielen Dank.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

In Excel gibt es eine Funktion: Application.WorksheetFunction.CountBlank(Range())

Damit könnte man z.B. die Leeren Zellen von der Vorgegebenen Gesamtanzahl der Spalte differenzieren.

Leider kann ich Dir keine Sourcelösung anbieten, da ich mit dem COMate selbst noch nicht durchsteige. :lol:

Wie weit diese Funktion im alten Excel vorhanden ist, weiß ich leider nicht. Aber dafür habe ich hier was in VB dazu gefunden:

http://support.microsoft.com/kb/139573

Gruß, Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo Falko,
Falko hat geschrieben:In Excel gibt es eine Funktion: Application.WorksheetFunction.CountBlank(Range())
Ja, diese Funktion kenne ich auch. Diese Funktion:

Code: Alles auswählen

Range("H65536").End(xlUp).Row)
macht folgendes: sie schaut in die letzte Zeile die
Excel zur Verfügung stellt und geht von dort aus nach
oben bis zur ersten belegten Zelle in der Spalte H.

Diese Funktion gibt es auch in der Form, dass er von
der letzten Zeile (65536), die Excel zur Verfügung stellt,
alle Spalten anschaut und die erste Zeile von unten
angibt, die belegt ist, egal welche Spalte.

Nur, und genau das ist das Problem, wie ist die Syntax,
wenn das überhaupt geht, in Comate.

Leider ist mein Englisch ziemlich eingerostet, so dass ich
in dem Englischen Forum mich nicht traue etwas zu fragen.

Hm, ich bin auch schon einige Zeit dabei Comate zu
verstehen. Mit der Hilfe komme ich nicht so klar und
die Beispiele die dabei sind führen nicht so in die Tiefe.

Aber vielen Dank für Deine Hilfe und Mühe.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Hi,

sorry, war das ganze WE off.

Müsste so gehen:

Code: Alles auswählen

ExcelObject\SetProperty("Cells(980,1) = 'Hello'")
EndRow=ExcelObject\GetIntegerProperty("Range('A1000')\End(-4162)\Row")
MessageRequester("Test", Str(EndRow))
xlUp wurde hier rein übergeben (-4162).
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo CNESM,

vielen Dank für Deine Hilfe.

Funktioniert auf anhieb. :D

Wäre ich nie draufgekommen.
Hab aber auch nichts gefunden,
wo ich das hätte nachlesen können.

Nochmals vielen Dank für Deine Hilfe.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

TheSaint hat geschrieben:Hallo Falko,
Falko hat geschrieben:In Excel gibt es eine Funktion: Application.WorksheetFunction.CountBlank(Range())
Ja, diese Funktion kenne ich auch. Diese Funktion:

Code: Alles auswählen

Range("H65536").End(xlUp).Row)
macht folgendes: sie schaut in die letzte Zeile die
Excel zur Verfügung stellt und geht von dort aus nach
oben bis zur ersten belegten Zelle in der Spalte H.

Diese Funktion gibt es auch in der Form, dass er von
der letzten Zeile (65536), die Excel zur Verfügung stellt,
alle Spalten anschaut und die erste Zeile von unten
angibt, die belegt ist, egal welche Spalte.

Nur, und genau das ist das Problem, wie ist die Syntax,
wenn das überhaupt geht, in Comate.

Leider ist mein Englisch ziemlich eingerostet, so dass ich
in dem Englischen Forum mich nicht traue etwas zu fragen.

Hm, ich bin auch schon einige Zeit dabei Comate zu
verstehen. Mit der Hilfe komme ich nicht so klar und
die Beispiele die dabei sind führen nicht so in die Tiefe.

Aber vielen Dank für Deine Hilfe und Mühe.
Hier könntest Du Dir vielleicht noch mehr Anregungen zu COMate und Excel holen:

http://www.purebasic.fr/german/viewtopi ... 466#239466

Viel Spass und gutes Gelingen 8)

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo Falko,
Falko hat geschrieben:Hier könntest Du Dir vielleicht noch mehr Anregungen zu COMate und Excel holen:

http://www.purebasic.fr/german/viewtopi ... 466#239466

Viel Spass und gutes Gelingen 8)

Gruß Falko
Wow, :allright: Vielen Dank.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
Antworten