Programmierung unter AOO/LO (StarBasic, Python, Java, ...)
Moderator: Moderatoren
turtle47
*******
Beiträge: 1849 Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach
Beitrag
von turtle47 » Di, 19.09.2006 20:09
Hallo Forumgemeinde,
mit folgendem Code lese ich eine Zelle oder einen selektierten Zellbereich aus und
lasse diesen in einer Messagebox anzeigen. Wie bekomme ich es hin,
dass ein selektierter
Zellbereich auch
direkt in die Zwischenablage kopiert wird?
Code: Alles auswählen
Sub SelectedCells
oSelect=ThisComponent.CurrentSelection.getRangeAddress
oSelectColumn=ThisComponent.CurrentSelection.Columns
oSelectRow=ThisComponent.CurrentSelection.Rows
CountColumn=oSelectColumn.getCount
CountRow=oSelectRow.getCount
oSelectSC=oSelectColumn.getByIndex(0).getName
oSelectEC=oSelectColumn.getByIndex(CountColumn-1).getName
oSelectSC=oSelectColumn.getByIndex(0).getName
oSelectEC=oSelectColumn.getByIndex(CountColumn-1).getName
oSelectSR=oSelect.StartRow+1
oSelectER=oSelect.EndRow+1
NoCell=(CountColumn*CountRow)
oSelectAC=oSelect.StartColumn+0
oSelectAR=oSelect.StartRow+0
If CountColumn=1 AND CountRow=1 Then
MsgBox("Selektierte Zelle: " + oSelectSC + oSelectSR + chr(13)_
+ "Spaltenindex: " + oSelectAC+ chr(13) + "Zeilenindex: " + oSelectAR + chr(13) ++ chr(13) +"Achtung: Der Index fängt immer bei Null an zu zählen!",, "Selektierte Zelle")
Else
MsgBox("Zellbereich (" + oSelectSC + oSelectSR + ":" + oSelectEC + oSelectER + ")" + chr(13) + "Anzahl der Zellen: " + NoCell,, "Selektierte Zellen")
End If
End Sub
Wenn ich irgendwo die Zwischenablage einfüge sollte dort z.B. "C5-C45" stehen.
Vielen Dank im voraus für die Hilfe.
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Stephan
********
Beiträge: 12368 Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin
Beitrag
von Stephan » Di, 19.09.2006 21:35
Habe ich mich noch nicht ernsthaft mit befasst, der native Zugriff auf das Clipboard ist soweit mir bekannt äußerst kompliziert.
Verwende statt dessen eine einfache Lösung ala:
http://www.oooforum.org/forum/viewtopic.phtml?t=6065
im Deinem Fall also einfach Wert in freie Zelle Schreiben mittels Dispatcer (uno:copy) in Zwischenablage lesen und Zellwert wieder löschen.
Gruß
Stephan
turtle47
*******
Beiträge: 1849 Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach
Beitrag
von turtle47 » Mi, 20.09.2006 13:59
Hallo Stephan,
dank Deiner Hilfe habe ich es jetzt so gelöst:
Code: Alles auswählen
dim document as object
dim dispatcher as object
dim args1(0) as new com.sun.star.beans.PropertyValue
Sub Clipboard
oSelect=ThisComponent.CurrentSelection.getRangeAddress
oSelectColumn=ThisComponent.CurrentSelection.Columns
oSelectRow=ThisComponent.CurrentSelection.Rows
CountColumn=oSelectColumn.getCount
CountRow=oSelectRow.getCount
oSelectSC=oSelectColumn.getByIndex(0).getName
oSelectEC=oSelectColumn.getByIndex(CountColumn-1).getName
oSelectSR=oSelect.StartRow+1
oSelectER=oSelect.EndRow+1
NoCell=(CountColumn+CountRow)
oSelectAC=oSelect.StartColumn+0
oSelectAR=oSelect.StartRow+0
oDoc = ThisComponent 'das Dokumentenobjekt
oSheet = oDoc.sheets(1) ' das erste Tabellenblatt Objekt
oCell = oSheet.getCellRangeByName("A4") 'das Objekt der Zelle
sText = oCell.string 'Textinhalt der Zelle
oCell.string = " " + oSelectSC + oSelectSR + ":" + oSelectEC + oSelectER + ""
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
args1(0).Name = "ToPoint"
args1(0).Value = "$A$4"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
end sub
Ist vieleicht ein wenig holprig, aber es funktioniert nach meiner Vorstellung.
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem