[GELÖST] Cursormanipulation per Basic

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

StePfl
**
Beiträge: 47
Registriert: Mo, 04.07.2016 17:16

[GELÖST] Cursormanipulation per Basic

Beitrag von StePfl »

Hallo zusammen,

ich lese hier öfters und es hat mir häufig weiter geholfen - DANKE!
Nun schreibe ich meine erste eigene Frage, da ich hierzu keine Lösung finden konnte.

Thema:
ich führe mit Hilfe von Basic umfangreiche, oft unterschiedliche (Form, Größe) Auswertungen von Buchhaltungsdaten aus, die das Buchhaltungsprogramm selbst nicht ausführen kann. Bisher habe ich zum finden der Datenblöcke aufgenommene und angepasste Dispatcher-Routinen verwendet.
Im wesentlichen ist es die Nachbildung der CursorSprungbefehle wie "strg+down", "strg+shift+down", dito für up, left, right, pos1, end..

Beispiel:

Code: Alles auswählen

sub locGoto(Addresse as string)
	rem ----------------------------------------------------------------------
	rem define variables
	dim document   as object
	dim dispatcher as object
	rem ----------------------------------------------------------------------
	rem get access to the document
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
	rem ----------------------------------------------------------------------
	dim args1(0) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "ToPoint"
	args1(0).Value = Addresse
	
	dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
end sub
Lieber wäre es mir, dies mit einem separaten, verborgenen Cursor ("createCursor") durchzuführen - nur habe ich bisher nicht gefunden welche Anweisungen die oben genannten Cursorbewegungen auslösen. (Dann würde die Anzeige nicht immer wild herumspringen - und ich könnte ggf mehrere Cursor einsetzen)

Außerdem suche ich bisher vergebens, wie aus einem vorhandenen Cell-Object das zugehörige (bisher unbekannte) Sheet bzw. Worksheet ermittelt werden kann. Aus früheren Excel-Zeiten ist mir die Eigenschaft "Parent" in Erinnerung, habe aber bisher nichts vergleichbares in Starbasic gefunden.

Ich wäre um Tips auf Anleitungen bzw. MusterCode sehr dankbar.

mfg StePfl

PS: mir sind die Anleitungen von Dannenhöfer und Andrew Pitoniak (in deutsch) bekannt - ich bin aber damit nicht weiter gekommen.
Zuletzt geändert von StePfl am So, 10.07.2016 11:53, insgesamt 1-mal geändert.
Thomas Mc Kie
******
Beiträge: 921
Registriert: Mo, 12.04.2010 00:37

Re: Cursormanipulation per Basic

Beitrag von Thomas Mc Kie »

Gehört sicher ins Makro-Forum

Eventuell hilft:
http://www.dannenhoefer.de/faqstarbasic ... chrim.html

Da ich in Calc selbst noch nicht programmiert habe (dafür in VBA, und dort hab ich des öfteren die Bildschirmaktualiserung ausgestellt, das beschleunigt manchen Code wirklich sehr!), kann ich da nicht mehr dazu sagen.

Es würde mich aber wundern, wenn man die Cursorsprungbefehle nicht auch anders per Makro nachbilden kann. Und sei es nur, erstmal zu ermitteln, bis wo Daten in der jeweiligen Tabelle enthalten sind, um dann gezielt zu dieser Zelle zu springen.

Viele Grüße

Thomas
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Cursormanipulation per Basic

Beitrag von clag »

Hallo StePfl,
das was du anfragst gibt es so nicht in Calc.
Der Cursor wird in Basic/Calc nicht derart verwendet wie du das bei einem aufgezeichneten Makro tust und dann im Code siehst.
Normalerweise spricht man die Zellen direkt über die Adresse an.
Das naheliegenste wäre wohl den Zellen oder Bereichen die du lesen/schreiben möchtest Namen zu geben, diese benannten Bereiche kannst du dann in Basic direkt ansprechen. Und diese benannten Bereiche sind "flexibel", heißt beim einfügen von Spalten oder Zeilen passt sich die Adresse an.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Cursormanipulation per Basic

Beitrag von balu »

Hallo StePfl,
mir sind die Anleitungen von Dannenhöfer und Andrew Pitoniak (in deutsch) bekannt - ich bin aber damit nicht weiter gekommen.
Na ja, typisches Umsteigerproblem. Man sieht den Wald vor lauter Bümen nicht mehr. ;-)
Kenn ich selber zu genüge.

Aus früheren Excel-Zeiten ist mir die Eigenschaft "Parent" in Erinnerung, habe aber bisher nichts vergleichbares in Starbasic gefunden.
VBA ist nicht StarBasic. Stellenweise ähneln sie sich, es sind aber dennoch 2 verschiedene Dialekte einer Sprache.
Wie, und mit was hast Du denn gesucht?

Außerdem suche ich bisher vergebens, wie aus einem vorhandenen Cell-Object das zugehörige (bisher unbekannte) Sheet bzw. Worksheet ermittelt werden kann.
Meinst Du jetzt folgendes?
Tabelle1 ist sichtbar, und der Cursor steht z.B. in X166. Und nun möchtest Du im Makro wissen wie das aktuell sichtbare Tabellenblatt heißt?
Oder andersrum gefragt:
Im zuletzt aktivierten Tabellenblatt, also das bevor Du in den Basic-Editor umgeschaltet hast, steht der Cursor in der Zelle X166.

Nun denn, das würde dann z.B. so lauten.

Code: Alles auswählen

Print ThisComponent.CurrentSelection.Spreadsheet.Name
Im wesentlichen ist es die Nachbildung der CursorSprungbefehle wie "strg+down", "strg+shift+down" ....
Was willst Du denn jetzt ganz genau Wissen?
Du musst schon wissen was Du jetzt aktuell willst, denn einerseits, so fern ich das richtig verstehe, willst Du einmal einen Zellbereich markieren und anderseits zu irgendwohin springen. Konzentriere dich für den Anfang erstmal auf einen Punkt, wie z.B. springe zu der letzten Benutzten Zelle/Spalte.
Dannenhöfer:
7.3.14 Wie kann man die letzte verwendete Zeile/Spalte ermitteln?

Ich frage mich ernsthaft; Warum willst Du unbedingt die Manuelle Cursor Bewegungen nachbauen, wenn es doch bestimmt andere oder bessere Wege gibt?
Klar, machmal braucht man schon bestimmte Cursorsprungbefehle, dies ist aber nicht immer nötig.

Und ich weiß das der Makrorecorder in Excel alles mögliche aufzeichnet, was in calc nicht möglich ist, aber genau so gut weiss ich das selbst viel Excel-Makros sich bedeutend übersichtlicher gestalten lassen, wenn man denn richtig Programmiert. Nein! Persönlich habe ich damit keine Ahnung, aber man bekommt halt so das eine oder andere in diversen Foren schon mit.

Auswertungen von Buchhaltungsdaten
Ich weiss nicht wie die Datei aussieht, und auch nicht was Du da so alles machst, aber vielleicht solltest Du dir in StarBasic eine Grafische Benutzeroberfläche programmieren. Entweder via Formulare, oder über Dialog.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
StePfl
**
Beiträge: 47
Registriert: Mo, 04.07.2016 17:16

Re: Cursormanipulation per Basic

Beitrag von StePfl »

wow - mit so vielen Antworten hatte ich nicht gerechnet - vielen Dank!
Insbesondere dir, Balu, für dein ausführlichliches Eingehen auf meine Anfrage!

Grundsätzlich:
ich weiß dass VBA nicht Startbasic ist - und wie man Zellen etc anspricht - und auch die Erläuterungen zu "CreateCursor" bei Dannenhöfer hatte ich gelesen und versucht .... Ich brauch also keine allgemeinen Hinweise, wie man programmiert....

Hintergrund meiner Frage(n):

a) Cursormanipulation per Basic:
ich bekomme von einer Hausverwaltung regelmäßig (monatlich) mehrere, umfangreiche Daten als Textdatei, die ich auswerten "darf".
Deren Inhalt ist oft sehr unterschiedlich - obwohl die Grundaufgabe ähnlich bleibt. Die umfangreichen Auswertungen habe ich schon in Basic programmiert (ich weiß also, wie man Zellen /Ranges etc. in Basic anspricht) - die Datenzuordnung (Identifikation der Datebereiche und mit Namen belegen) habe ich bisher manuell (mit den o.g. Cursorbewegungen) durchgeführt - DAS will ich gerne automatisieren. Die Anweisung "CreateCursor" habe ich schon gefunden und z.T. verwendet - nur konnte ich meinen bisherigen, manuellen Modus damit nicht nachbilden. NUR deshalb habe ich mir mit den Dispatcher-Records beholfen - bin aber nicht glücklich damit. Dannenhöfers "7.3.14 Wie kann man die letzte verwendete Zeile/Spalte ermitteln?" hilft nicht, denn es sind ja mehrere Datenblöcke in jeder Datei, die EINZELN identifiziert werden müssen.

UND - ich will, dass die Aktionen im Hintergrund ablaufen - sprich die bearbeitete Tabelle nicht im Vordergrund ist (sein muß)

b) RückwärtsIdentifizierung:
in einigen meiner Sub übergebe ich ein CellObject. Innerhalb der Sub wäre es gut, das zu dem CellObjekt dazugehörige "Sheet" und das "Worksheet" ansprechen zu können. Ich suche also ein Pendant in Starbasic, das der Funktionalität von "parent" im VBA entspricht.
Ich brauch das, weil das CellObjekt nicht immer(sicher) im "ThisComponent.ActiveSheet" steht - das wäre ja schön einfach! :D
Da die Sub an vielen Stellen verwendet wird, würde ich mir gerne die Umprogrammierung auf eine zusätzliche Übergabe des dazugehörigen Sheets und Worksheets ersparen. HIER geht es mit mehr um den Lerneffekt innerhalb von StarBasic.


c) BeispielCode:
@Balu: STIMMT - ich hab da den falschen/anderen Code verwendet - hier nun der passende Code:

Code: Alles auswählen

sub locStrgDown(i%)
	dim i% as integer
	dim document   as object
	dim dispatcher as object
	document   = ThisComponent.CurrentController.Frame
	dim args1(1) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "By"
	args1(0).Value = i%
	args1(1).Name = "Sel"
	args1(1).Value = false
	dispatcher.executeDispatch(document, ".uno:GoDownToEndOfData", "", 0, args1())
end sub
nochmals vielen Dank,
lG StePfl
Zuletzt geändert von StePfl am Do, 07.07.2016 11:25, insgesamt 1-mal geändert.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Cursormanipulation per Basic

Beitrag von F3K Total »

Hi,
mal ein paar Beispiele:

Code: Alles auswählen

Sub Main
    oSheets = ThisComponent.Sheets 'alle Tabellen
    'xray oSheets 
    oSheet_Tabelle_1 = oSheets.getbyname("Tabelle1")'Tabelle per Name
    'xray oSheet_Tabelle_1
    oSheet_Tabelle_2 = oSheets.getbyname("Tabelle2")'Tabelle per Name
    'xray oSheet_Tabelle_2
    oSheet_Tabelle_1 = oSheets.getbyIndex(0)'Tabelle per Index
    'xray oSheet_Tabelle_1
    oSheet_Tabelle_1 = oSheets(0)'Tabelle per Index Kurzform
    'xray oSheet_Tabelle_1
    oSheet_Tabelle_2 = oSheets.getbyIndex(1)'Tabelle per Index
    'xray oSheet_Tabelle_2
    oSheet_Tabelle_2 = oSheets(1)'Tabelle per Index Kurzform
    'xray oSheet_Tabelle_2
    oCell = oSheet_Tabelle_1.getcellbyposition(1,1) 'Zelle B2 per Index
    'xray oCell
    oSheet_Tabelle_1 = oCell.Spreadsheet 'Tabelle von Zelle B2
    'xray oSheet_Tabelle_1
    oCell = oSheet_Tabelle_1.getcellrangebyName("B2") 'Zelle B2 per Name
    'xray oCell
    oSheet_Tabelle_1 = oCell.Spreadsheet 'Tabelle von Zelle B2
    'xray oSheet_Tabelle_1
    oCellrange = oSheet_Tabelle_1.getcellrangebyPosition(1,1,2,2) 'Zellbereich per Index
    'xray oCellrange
    oSheet_Tabelle_1 = oCellrange.Spreadsheet 'Tabelle von Zellbereich B2:C3
    'xray oSheet_Tabelle_1
    oCellrange = oSheet_Tabelle_1.getcellrangebyName("B2:C3") 'Zellbereich B2:C3 per Name
    'xray oCellrange
    oSheet_Tabelle_1 = oCellrange.Spreadsheet 'Tabelle von Zellbereich B2:C3
    'xray oSheet_Tabelle_1
End Sub
Wenn du z.B Xray installiert hast, kannst Du das Apostroph vor den xray - Einträgen entfernen und die Objekte so inspizieren.

HTH Gruß R
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Cursormanipulation per Basic

Beitrag von Stephan »

UND - ich will, dass die Aktionen im Hintergrund ablaufen - sprich die bearbeitete Tabelle nicht im Vordergrund ist (sein muß)
und genau das ist der Punkt warum wohl niemand versteht was das Selektieren soll, zumal Du ja betonst programmieren zu können, denn:

1.
.Select ist in VBA in 99% aller Fälle unnötig (und ungünstig) und nur dem Makrorekorder geschuldet

siehe z.B.:
http://www.online-excel.de/excel/singsel_vba.php?f=78

2. Select ist doch hier überhaupt erst Auslöser der Probleme das der Bildschirm 'springt', was er ja nicht soll, also ist Select hier nicht einmal eine Stilfrage sondern schlichtweg ungeeignet

das Aus- und An-Schalten der Bildschirmaktualisierung geht im Übrigen per:

Code: Alles auswählen

ThisComponent.LockControllers
ThisComponent.UnLockControllers
aber das verhindert auch nicht das 'Springen' das zwangsläufig entsteht wenn Du die Aktualisierung wieder einschaltest.
(ich weiß also, wie man Zellen /Ranges etc. in Basic anspricht) - die Datenzuordnung (Identifikation der Datebereiche und mit Namen belegen) habe ich bisher manuell (mit den o.g. Cursorbewegungen) durchgeführt - DAS will ich gerne automatisieren. Die Anweisung "CreateCursor" habe ich schon gefunden und z.T. verwendet - nur konnte ich meinen bisherigen, manuellen Modus damit nicht nachbilden. NUR deshalb habe ich mir mit den Dispatcher-Records beholfen - bin aber nicht glücklich damit.
Richtig wäre hier (mutmaßlich) mit Zell- und Range-Objekten zu arbeiten, gleichzeitig sagst Du das Du das kannst aber dann doch nicht tust (sondern per dispatch arbeitest) und ich verstehe einfach nicht warum.

Du wirst also erklären müssen was für Besonderheiten vorliegen, damit wir helfen können.

Allgemein gesprochen ist fast immer der direkte Weg besser in VBA (siehe Link oben) wie auch in StarBasic und nicht erst Zell- oder RAngeobjekte selektieren, also z.B.:

Code: Alles auswählen

With ThisComponent.Sheets(0)
  'Text von Zelle A2 in Zelle A1 'kopieren'	
  .getCellByPosition(0,0).String = .getCellByPosition(0,1).String 

  'Daten von Zellbereich A1:A10 in Zellbereich B1:B10 'Kopieren'
  tmp = .getCellRangeByName(A1:A10).getDataArray()
  .getCellRangeByName(B1:B10).setDataArray(tmp())
End With
b) RückwärtsIdentifizierung:
in einigen meiner Sub übergebe ich ein CellObject. Innerhalb der Sub wäre es gut, das zu dem CellObjekt dazugehörige "Sheet" und das "Worksheet" ansprechen zu können.
Sheet:
<zell-object>.RangeAddress.Sheet

z.B.

Code: Alles auswählen

zo = ThisComponent.Sheets(0).getCellRAngeByName("A1")
Msgbox zo.RangeAddress.Sheet
gibt Blattindex aus

z.B.

Code: Alles auswählen

zo = ThisComponent.Sheets(0).getCellRangeByName("A1")
Msgbox ThisComponent.Sheets().getByIndex(zo.RangeAddress.Sheet).Name
'oder auch:
zo.Spreadsheet.Name
gibt Blattname aus

Gruß
Stephan
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Cursormanipulation per Basic

Beitrag von balu »

Hallo StePfl,

ich persönlich kann momentan nicht sehr viel mit deiner Beschreibung, Erklärung etwas anfangen, da eine Beispieldatei fehlt.
ich bekomme von einer Hausverwaltung regelmäßig (monatlich) mehrere, umfangreiche Daten als Textdatei, die ich auswerten "darf".
Nix Haarspalterei, sondern ein extrem wichtiger Punkt der genau geklärt werden muss.
Handelt es sich wirklich um eine Textdatei, also so etwas wie das geschriebene hier in diesem Thread?
Oder handelt es sich um eine CSV-Datei, oder ähnliches?

Es wird oft von einer Textdatei gesprochen, aber meistens ist eine CSV-Datei gemeint. Und man sollte sich diesbezüglich schon sehr genau Ausdrücken, damit es nicht zu missverständinssen kommt, da es sich dabei um Unterschiedliche paar Schuhe handelt (Textdatei - CSV) die auch unterschiedlich in Calc behandelt werden müssen, wenn aus denen Daten "rausgefischt" werden sollen.

Ich suche also ein Pendant in Starbasic, das der Funktionalität von "parent" im VBA entspricht.
Ich persönlich kenne das nicht, da kennt sich wohl nur Stephan mit aus. Wenn ich aber die gesamte Anforderung unter
b) RückwärtsIdentifizierung:
mir so durchlese, dann glaube ich das Du nicht nur mit Sub arbeiten darfst, sondern auch noch zusätzlich mit einer oder mehreren Function arbeiten musst.

"ThisComponent.ActiveSheet"
Du weisst schon das man nicht zwingend ein Tabellenblatt aktivieren muss, also Salop gesagt in den sichtbaren Vordergrund holen muss, um dort Daten zu schreiben oder zu lesen, so fern es zur gleichen Datei gehört?

Ich erwähne das, da eine im Hintergrund versteckt geöffnete Datei mit ihren ganzen Tabellenblättern genau so behandelt werden kann, wie die aktive Datei von wo aus das Makro gestartet wurde. Nur muss dazu die andere Datei dementsprechend erstmal geladen werden.


Aber wie schon eingangs erwähnt, ohne eine Beispieldatei aus der ersichtlich ist was Du genau vorhast, wird es schwer dir punktgenau zielführend zu helfen. Und denk bitte bei deiner nächsten Antwort an das Thema "Textdatei".



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Cursormanipulation per Basic

Beitrag von Stephan »

Lieber Balu,
Nix Haarspalterei, sondern ein extrem wichtiger Punkt der genau geklärt werden muss.
Handelt es sich wirklich um eine Textdatei, also so etwas wie das geschriebene hier in diesem Thread?
Oder handelt es sich um eine CSV-Datei, oder ähnliches?
Es wird oft von einer Textdatei gesprochen, aber meistens ist eine CSV-Datei gemeint. Und man sollte sich diesbezüglich schon sehr genau Ausdrücken, damit es nicht zu missverständinssen kommt, da es sich dabei um Unterschiedliche paar Schuhe handelt (Textdatei - CSV) die auch unterschiedlich in Calc behandelt werden müssen, wenn aus denen Daten "rausgefischt" werden sollen.
naja, aber csv ist schon quasi eine Teilmenge aller denkbaren Textdateien
dann glaube ich das Du nicht nur mit Sub arbeiten darfst, sondern auch noch zusätzlich mit einer oder mehreren Function arbeiten musst
möglicherweise hast Du ja eine ungefähre Lösung vor Augen, aber ansonsten ist hier Sub oder Function ziemlich egal.


Gruß
Stephan
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Cursormanipulation per Basic

Beitrag von balu »

Lieber Stephan,
naja, aber csv ist schon quasi eine Teilmenge aller denkbaren Textdateien
Ich wollte damit versteckt z.B. auf den Unterschied zwischen "INI-Datei" und Tabellen ähnlichen Textdateien a-la CSV hinweisen. Du, ich und noch so einige hier kennen den Unterschied, aber ob das auch StePfl weiss?

möglicherweise hast Du ja eine ungefähre Lösung vor Augen, aber ansonsten ist hier Sub oder Function ziemlich egal.
Ich und eine Lösung vor Augen?
Nö Du! Nicht im aller geringsten.
Ob Function nötig ist, weiss ich auch nicht. Da ich aus seiner bisherigen Erklärung nicht so recht schlau wurde, habe ich das halt mal als eine Vermutung so in den Raum geschmissen.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Thomas Mc Kie
******
Beiträge: 921
Registriert: Mo, 12.04.2010 00:37

Re: Cursormanipulation per Basic

Beitrag von Thomas Mc Kie »

Das Aus- und Anschalten der Bildschirmaktualisierung hatte ich übrigens auch schon verlinkt.

@Mod Wie wär's wenn das Thema in das richtige Unterforum verschoben wird?

Viele Grüße

Thomas
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Cursormanipulation per Basic

Beitrag von Stephan »

Das Aus- und Anschalten der Bildschirmaktualisierung hatte ich übrigens auch schon verlinkt.
Ah, ja ich sehe. Ich wollte das nicht übergehen, sondern hatte mir nur das Ziel Deines Links nicht angesehen.
@Mod Wie wär's wenn das Thema in das richtige Unterforum verschoben wird?
Ja, kann ich tun.


Gruß
Stephan
StePfl
**
Beiträge: 47
Registriert: Mo, 04.07.2016 17:16

Re: Cursormanipulation per Basic

Beitrag von StePfl »

vielen Dank für die Ausführungen!

@"F3k Total" :
ich habe XRay nicht installiert - aber ich weiß schon, wie ich Worksheet, Sheet , Ranges und Zellen addressieren/ansprechen kann.
Ich suche nach einem Befehl, mit dem ich von eine bestimmten Adresse in einem Sheet den (internen) Fokus versetzen kann -
analog zu dem "Strg+Down" beim manuellen Cursorfokus.

@Stephan:
Nach meinem Wissen habe ich nirgends von "select" gesprochen sondern von "adressieren" und "ermitteln". Ich will nicht "selektieren" im eigentlichen Sinn, sondern "identifizieren" und in Form eines <Range-objects> später dann adressieren/verarbeiten - sprich einen virtuellen (unsichtbaren) Cursor analog zu z.B."Strg+Down" so zu bewegen dass die Datenbereiche anschließend (als Cell- oder Range-Object) durch die restlichen Routinen sauber angesprochen/adressiert werden können.

Danke - das kannte ich noch nicht ...
ThisComponent.LockControllers
ThisComponent.UnLockControllers

Code: Alles auswählen

<zell-object>.RangeAddress.Sheet
... kenne ich - aber wenn ich zwischen zwei unterschiedlichen Calc-Dokumenten wechsle (sprich sie gemeinsam bearbeite - z.B. Calc1 als Grunddaten und Calc2 als Ergebnisdaten) - wie/wo finde ich heraus, in welchem der beiden Doc sich dann Sheet(0) befindet?

Genau DAS ließ sich (damals) bei VBA mit <WB-Object> = (<Cell-object>.parent).parent recht einfach realisieren.

Wenn es in Starbasic so etwas nicht gibt - auch kein (echtes) Problem - dann müssen halt die entsprechenden Parameter im Aufruf mit übergeben werden. Nur wollte ich vorher versuchen das Ganze direkter zu programmieren.

Sorry - vielleicht denke ich einfache im Moment um zu viele Ecken herum.

======== Ihr wart für mich zu schnell ====
@ Balu:
es ist eine (fast) echte TextDatei - ein in eine *.Lis umgeleiteter Ausdruck, der erst umformatiert, dann zerlegt und anschließen ausgewertet wird)
Ein Beispiel kann ich nicht anfügen, da 1. zu groß und 2. vertrauliche Daten enthält.
Das Umformatieren und "Bereiche Namen.zuordnen" mach ich derzeit manuell bzw. mit Hilf der Dispatcher-Routinen.
Wenn das erledigt ist, erfolgt die Zerlegung und Auswertung (heute schon) per div. Routinen.
Abschließend wird das Ergebnis in die Datei Calc3 verschoben und gespeichert.
Für die man. Zuordnung sitze ich ca 1 Std. dran , für die anschließende Verarbeitung braucht mein PC (i9) ca 15 min ....

Da die Daten demnächst noch einmal deutlich anwachsen werden, baue ich zur Zeit die Auswertung so um, dass die Daten nicht mehr in den Sheets sondern in internen Arrays bearbeitet werden, da das schreiben/lesen der Sheet-Inhalte im Wesentlichen für den großen Zeitbedarf der Programme verantwortlich ist. Eingelesen werden soll dann mit "getDataArray" - dafür brauch ich den genauen Bereich, in dem die Daten stehen (sprich die CursorManipulationen) - zurückgeschrieben mit setDataArray.

Es sind immer wieder unterschiedliche AusdruckDateien, deren Auswertung (2.Schritt) dennoch ziemlich ähnlich erfolgt.
Da sich das Format der Ausdrucke mit dem selben Inhalt auch immer wieder verändern, benötige ich eine flexible Form der Identifikation/Adressierung.

Die Erstauswertung /Zerlegung erfolgt im importierten Calc1 (die Routinen stehen aber im Bereich von Calc2)
Für die Auswertungen gibt es Calc2 - mit diversen Steuerungslisten und Rechenalgorithmen u.ä.

Meine Fragestellung sollte mir dabei helfen, den ersten Teil deutlich mehr zu automatisieren - geht ja mit dem Dispatcherfunktionen zum Teil schon ..
ist aber kein sauberer Programmierstil ....

@Stephan:
bitte in das richtige Unterforum verschieben - DANKE. Ich hatte das nicht gesehen und deshalb HIER aufgemacht.

herzliches Danke und lieben Gruß,
StePfl
Thomas Mc Kie
******
Beiträge: 921
Registriert: Mo, 12.04.2010 00:37

Re: Cursormanipulation per Basic

Beitrag von Thomas Mc Kie »

StePfl hat geschrieben: Danke - das kannte ich noch nicht ...
ThisComponent.LockControllers
ThisComponent.UnLockControllers
*Grmpfl* Dann hast du aber nicht auf meinen Link geklickt. Hab's da nicht ganz so schmackhaft präsentiert, aber wer Hunger hat, hätte schon was zu Essen gefunden. :wink:
Grüße
Thomas
EDIT: Du solltes dir wirlich überlegen, eine verfremdete (Fantasiedaten) und verkleinerte Beispieldatei (ein paar Zeilen, ein paar "Spalten" - ist ja ne Textdatei - sollten langen) anzufügen. Weil selbst mit deinen ausführlichen Erklärungen ist es für mich schwer nachzuvollziehen, wie die Datenstruktur aussieht. Vielleicht geht es anderen auch so.
StePfl
**
Beiträge: 47
Registriert: Mo, 04.07.2016 17:16

Re: Cursormanipulation per Basic

Beitrag von StePfl »

vielleich besser - die konkrete Frage 1 lautet (ohne weitere Beschreibungen):

Gibt es in in Starbasic die Möglichkeit, einen mit CreateCursor erzeugten, virtuellen Cursor ähnlich zu bewegen/manipulieren, wie man in der "normalen", manuellen Oberfläche den sichtbaren Cursor mit "Strg+Down" bewegen kann?

Analog auch für "Strg-Left", "Strg-Right", "Strg+End" ....

Danke und lG,
StePfl
Antworten