Hallo Guido,


wie ich bereits in meiner letzen E-Mail angekündigt habe, schildere ich ein
weiteres Problem in Calc.



Angaben zum Betriebssystem und zur Windows-Version:

Betriebssystem: Windows XP Professional bzw. Suse-Linux 10.0

OpenOffice-Version 2.0.2 Build oob680.1.0



Unter dem Menüpunkt Bearbeiten befindet sich der Untermenüpunkt "Inhalte
löschen ...". Die drei Punkte am Ende des Untermenüpunktes besagen, dass
nach Auswahl dieses Menüpunktes ein Dialogfenster angezeigt wird, in dem
weitere Einstellungen vorgenommen werden können. Dies trifft sowohl für die
Windows- wie auch für die Linux-Version zu. Leider verhält sich die
Windows-Version anders als die Linux-Version. Während bei der
Windows-Version das Dialogfenster richtig angezeigt wird und man auswählen
kann, was in den Zellen gelöschen werden soll, führt die Linux-Version den
Löschvorgang aus, ohne das Dialogfenster anzuzeigen. Analog gilt dies, wenn
die <Entf-Taste> gedrückt. Erst wenn in der Linux-Version die
<Backspace-Taste> gedrückt wird, geht das Dialogfenster für Inhalte Löschen
auf. Mit der <Entf-Taste> werden unter Linux die Zellinhalte nicht komplett
gelöscht, so bleiben z.B. die Zellformatierungen erhalten und die Zellen
sind nicht leer. Man sollte doch davon ausgehen, dass sowohl bei der
Windows- wie auch bei der Linux-Version gleiche Funktionalität vorhanden
sein sollte.



Das Verhalten unter Linux mag auch die Ursache dafür sein, dass das Kopieren
eines Bereiches über Index-Werte von einem Tabellenblatt zu einem anderen
Tabellenblatt mit identischem Bereich nicht möglich ist, wenn dieser Bereich
zuvor gelöscht wird und Formatierungen enthielt, die nach dem Löschvorgang
noch weiter vorhanden sind. Unter Linux werden die Zellbereiche nicht
komplett gelöscht, die Formatierungen z.B. bleiben erhalten. Dadurch kann
der Kopiervorgang nicht durchgeführt werden. An dieser Stelle müsste eine
Dialogfenster aufgehen, das nachfrägt, ob der Inhalt der Zellen ersetzt
werden soll.



Beispiel :

Sub KopierenNachADPlan

  Dim oDoc as Object

  Dim Document as Object

  Dim oTabellen as Object

  Dim oTabelleQ as Object

  Dim oTabelleZ as Object

  Dim oWorkTabelle as Object

  Dim oZelleQ as new com.sun.star.table.CellAddress

  Dim oZelleZ as new com.sun.star.table.CellAddress

  Dim oZellbereich as Object

  Dim oQuellbereich as new com.sun.star.table.CellRangeAddress

  Dim dispatcher as Object

  Dim oView as Object

  Dim sWocheQ as String

  Dim sWocheZ as String

  Dim i as Integer

  Dim j as Integer

  document   = ThisComponent.CurrentController.Frame

  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

  oDoc = ThisComponent

  oTabellen = oDoc.Sheets

  oTabelleQ = oTabellen.getByName("EingabeBereich")

  sWocheQ = "ad" & oTabelleQ.getCellRangeByName("E1").String

  sWocheZ = InputBox("Arbeitsblatt nach Blatt " & sWocheQ & " kopieren.",
Blattauswahl",sWocheQ

  If sWocheZ = "" Then Exit Sub 

  'Zielbereich definieren und löschen

  oTabelleZ = oTabellen.getByName(sWocheZ)

  'Ziel-Tabellenblatt aktivieren

  oView = oDoc.CurrentController

  oView.setActiveSheet(oTabelleZ)

  'Zielbereich löschen

  dim args1(0) as new com.sun.star.beans.PropertyValue

  args1(0).Name = "ToPoint"

  args1(0).Value = "$A$1:$AZ$60"

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

  dim args2(0) as new com.sun.star.beans.PropertyValue

  args2(0).Name = "Flags"

  args2(0).Value = "A"

  dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())

  'Daten von Tabellenblatt <Eingabebereich> nach Zielbereich <ad??> kopieren
 

  'Quellbereich definieren 

  oZelleQ = oTabelleQ.getCellByPosition(0,0).getCellAddress()

  oQuellbereich.Sheet = oZelleQ.Sheet

  oQuellbereich.StartColumn = 0

  oQuellbereich.StartRow = 0

  oQuellbereich.EndColumn = 25

  oQuellbereich.EndRow = 48

  'Zielbereich definieren  

  oZelleZ = oTabelleZ.getCellByPosition(0,0).getCellAddress()

  oZelleZ.Column = 0

  oZelleZ.Row = 0

  oTabelleQ.copyRange(oZelleZ, oQuellbereich)

  oDoc.CurrentController.Select(oTabelleZ.getCellByPosition(0,0))

  oView.setActiveSheet(oTabelleQ)

  oDoc.CurrentController.Select(oTabelleQ.getCellByPosition(0,0))

  Beep

  MsgBox "Datenübertragung nach Tabelle <" & oTabelleZ.Name & "> beendet!"
64,"Datenübertragung nach Tabelle"

End Sub  



Dieser Programmcode funktioniert unter Windows einwandfrei, unter Linux
führt er zu einem Programmfehler.



Erst dieser Quellcode funktioniert unter Windows wie auch unter Linux:

'neuer Quellcode

  oView.setActiveSheet(oTabelleQ)

  dim args3(0) as new com.sun.star.beans.PropertyValue

  args3(0).Name = "ToPoint"

  args3(0).Value = "$A$1:$Z$59"

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

  rem ----------------------------------------------------------------------

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

  rem ----------------------------------------------------------------------

  oView.setActiveSheet(oTabelleZ)

  dim args4(0) as new com.sun.star.beans.PropertyValue

  args4(0).Name = "ToPoint"

  args4(0).Value = "$A$1"

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

  rem ----------------------------------------------------------------------

  dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

  'Ende neuer Quellcode



Gruß

Hellmuth

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Antwort per Email an