Seite 1 von 1

Selektierter Zellbereich in Zwischenablage kopieren

Verfasst: Di, 19.09.2006 20:09
von turtle47
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

Verfasst: Di, 19.09.2006 21:35
von Stephan
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

Verfasst: Mi, 20.09.2006 13:59
von turtle47
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