Makro in Calc mit OOBasic, Fehler bei offset

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Makro in Calc mit OOBasic, Fehler bei offset

Re: Makro in Calc mit OOBasic, Fehler bei offset

von martin1234 » Do, 20.03.2008 13:07

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

martin

Re: Makro in Calc mit OOBasic, Fehler bei offset

von Karolus » Do, 20.03.2008 12:30

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

Re: Makro in Calc mit OOBasic, Fehler bei offset

von martin1234 » Do, 20.03.2008 11:00

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

Re: Makro in Calc mit OOBasic, Fehler bei offset

von Karolus » Do, 20.03.2008 09:38

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

Re: Makro in Calc mit OOBasic, Fehler bei offset

von martin1234 » Do, 20.03.2008 08:40

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

Re: Makro in Calc mit OOBasic, Fehler bei offset

von hol.sten » Di, 18.03.2008 20:51

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

Makro in Calc mit OOBasic, Fehler bei offset

von martin1234 » Di, 18.03.2008 18:55

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

Nach oben