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]