Makro in Calc mit OOBasic, Fehler bei offset

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

martin1234
Beiträge: 4
Registriert: Di, 18.03.2008 18:44

Makro in Calc mit OOBasic, Fehler bei offset

Beitrag von martin1234 »

Hallo Leute
ich möchte anfangen ein Makro zu erstellen, da ich absolut neu bin, wollte ich erstmal eine ganz einfache funktion implementieren:
eine Zelle kopieren und sieben spalten weiter einfügen:

sub autoCopy
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 = ActiveCell

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = ActiveCell.Offset(0,7)

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
end sub

bedauerlicherweise funktioniert der offset nicht, ich erhalte eine fehlermeldung, dass die objektvariable nicht belegt ist!
jemand eine idee?
wäre dankbar
beste grüße
martin
hol.sten
******
Beiträge: 871
Registriert: Fr, 18.11.2005 21:21

Re: Makro in Calc mit OOBasic, Fehler bei offset

Beitrag von hol.sten »

martin1234 hat geschrieben:

Code: Alles auswählen

...
args1(0).Value = ActiveCell
...
args3(0).Value = ActiveCell.Offset(0,7)
bedauerlicherweise funktioniert der offset nicht, ich erhalte eine fehlermeldung, dass die objektvariable nicht belegt ist!
Kommt das ActiveCell aus Excel? Sowas gibt es bei OOo Basic, glaube ich, nicht.

Kennst du das Kapitel 7 Tabellendokumente aus dem StarOffice 8 Programmierhandbuch für BASIC. Vielleicht hilft dir das ja weiter.

Und wie man zumindest die akuell selektierte Spalte finde habe ich hier gefunden: http://www.oooforum.org/forum/viewtopic ... rrent+cell
martin1234
Beiträge: 4
Registriert: Di, 18.03.2008 18:44

Re: Makro in Calc mit OOBasic, Fehler bei offset

Beitrag von martin1234 »

Danke für die vielen Tipps, bin auch schon etwas weitergekommen.
Nun ist es so, dass ich eine Suche durchführe und das Ergebnis kopieren möchte, um es in einer anderen Tabelle einzufügen.
Das klappt leider nicht so ganz.

// hier ist die Suche:
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

// hier eslektiere ich die Zelle
document = ThisComponent.CurrentController.Frame
oCell = ThisComponent.CurrentSelection

// nur zum testen mal was ausgeben:
MsgBox "before query!" + oCell.getValue()

wie gesagt, dass klappt leider nicht!
Jemand eine Idee?
Danke schonmal
martin
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Makro in Calc mit OOBasic, Fehler bei offset

Beitrag von Karolus »

Hallo
Bitte mehr Infos - Was genau funktioniert nicht ?
- evt wird der Wert 0 zurückgegeben, dann lass dir den Text liefern:
msgbox "before query! "& thiscomponent.currentselection().string

Führst du vorher 'Suche alle' aus, und hast mehrere Treffer ?
- Führe nur 'suchen' aus , und pack später alles in eine Schleife.
...

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
martin1234
Beiträge: 4
Registriert: Di, 18.03.2008 18:44

Re: Makro in Calc mit OOBasic, Fehler bei offset

Beitrag von martin1234 »

Hey danke für die Antwort!
hier kommt mein bisheriger versuch:

Code: Alles auswählen

Public Sub find(myQuery As String)
dim document   as object
dim dispatcher as object
dim oCell		as object
dim myResult	as double


document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")


dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Nr"
args3(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args3())

Set odoc = ThisComponent
Set oCell = odoc.getCurrentSelection
Set aCellAddress = oCell.getCellAddress
Column = aCellAddress.Column
Sheet = aCellAddress.Sheet
Set osheets = odoc.getSheets
Set osheet = osheets.getByIndex(Sheet)
Set oColumns = osheet.getColumns
Set oColumn = oColumns.getByIndex(0)
Set oController = odoc.getCurrentController
oController.Select oColumn 

rem ----------------------------------------------------------------------
dim args1(17) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = false
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.Backward"
args1(4).Value = false
args1(5).Name = "SearchItem.Pattern"
args1(5).Value = false
args1(6).Name = "SearchItem.Content"
args1(6).Value = false
args1(7).Name = "SearchItem.AsianOptions"
args1(7).Value = false
args1(8).Name = "SearchItem.AlgorithmType"
args1(8).Value = 0
args1(9).Name = "SearchItem.SearchFlags"
args1(9).Value = 71680
args1(10).Name = "SearchItem.SearchString"
args1(10).Value = myQuery
args1(11).Name = "SearchItem.ReplaceString"
args1(11).Value = ""
args1(12).Name = "SearchItem.Locale"
args1(12).Value = 255
args1(13).Name = "SearchItem.ChangedChars"
args1(13).Value = 2
args1(14).Name = "SearchItem.DeletedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.InsertedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.TransliterateFlags"
args1(16).Value = 1280
args1(17).Name = "SearchItem.Command"
args1(17).Value = 0

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
  
				    				     
   oCurSp1 = osheet.createCursor 'Spaltenz�hler f�r Blatt 1
   oCurZe1 = osheet.createCursor 'Zeilenz�hler f�r Blatt 1

   
'--Cursor f�r das 1. Blatt erzeugen
   oCurSp1.gotoStartofUsedArea(True)
   oCurSp1.gotoEndofUsedArea(false)
	StartColumn = oCurSp1.getColumns.getRangeAddress

   MsgBox StartColumn

Ich hätte an dieser Stelle einfach gern die Adresse der gefundenen Zelle
ich weiß, dass diese in Spalte A1 anfängt, nur welche Reihe?

Das Ergebnis sollte mit rowOffset auch die nächsten 10 spalten des aktuellen Ergebnisses enthalten.

Vielen herzlichen Dank für Deine Mühe
beste Grüße
martin
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Makro in Calc mit OOBasic, Fehler bei offset

Beitrag von Karolus »

martin1234 hat geschrieben:
Ich hätte an dieser Stelle einfach gern die Adresse der gefundenen Zelle
ich weiß, dass diese in Spalte A1 anfängt, nur welche Reihe?

Das Ergebnis sollte mit rowOffset auch die nächsten 10 spalten des aktuellen Ergebnisses enthalten.
Tut mir leid, aber wenn sich deine Fragestellung mit jedem Post ändert wird das Antworten schwierig.
Die Zelladdresse als Text:
oadresse = thiscomponent.currentselection().absolutename 'zb. $Tabelle1.$A$15
der Index der Zeile:
ozeile = thiscomponent.currentselection().celladdress.row 'zb 14
den Spaltenindex:
ospalte = thiscomponent.currentselection().celladdress.column 'zb 0
den Tabellenindex:
osheet = thiscomponent.currentselection().celladdress.sheet 'zb 0
und den inhalt einer Zelle 10 Spalten weiter dann:
offsetinhalt = thiscomponent.sheets(osheet).getcellbyposition(ospalte,ozeile+10).string 'oder .value oder .formula

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
martin1234
Beiträge: 4
Registriert: Di, 18.03.2008 18:44

Re: Makro in Calc mit OOBasic, Fehler bei offset

Beitrag von martin1234 »

Hey Super!
Tausend Dank!
das ist genau dass, was ich brauchte!

martin
Antworten