geschützte Tabelle sortieren

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

kilix
****
Beiträge: 128
Registriert: So, 09.04.2023 11:27

geschützte Tabelle sortieren

Beitrag von kilix »

Hallo,
ich habe jetzt noch eine Frage:
ich habe eine Tabelle erstellt, da man, sortiert, als Bericht drucken kann. Dazu muss sie aber sortiert werden.
Die Sortierung konnte ich ganz leicht als Makro aufzeichnen und speichern. Wenn die Tabelle allerdings geschützt ist muss ich zuerst den Schutz aufheben und danach wieder setzen.
Wenn ich das Aufheben und das Setzen des Schutzen mit einem aufgezeichneten Makro mache wird jedesmal nach dem Passwort gefragt weil diese Frage beim Aufzeichnen nicht mit aufgezeichnet wird. Im Grunde macht das Sinn weil sonst jeder im Macro das Passwort auslesen könnte.
In meinem Fall habe ich den Schutz nich wegen der geheimhaltung gesetzt sondern "nur" als Schutz für die enthaltenen Formeln.
Daher meine Frage: was muss ich in den Makro einbauen damit die Frage nicht mehr gestellt wird (wobei das Passwort durchaus auch leer sein kann.
Das Makro sieht jetzt so aus:

Code: Alles auswählen

sub SortGesamt
	dim document   as object
	dim dispatcher as object
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dim args1(0) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "ToPoint"
	args1(0).Value = "$A$5"
	dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
	dim args2(0) as new com.sun.star.beans.PropertyValue
	args2(0).Name = "By"
	args2(0).Value = 1
	dispatcher.executeDispatch(document, ".uno:GoDownToEndOfDataSel", "", 0, args2())
	dim args3(0) as new com.sun.star.beans.PropertyValue
	args3(0).Name = "By"
	args3(0).Value = 1
	dispatcher.executeDispatch(document, ".uno:GoRightToEndOfDataSel", "", 0, args3())
rem dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, Array())
	dim args5(13) as new com.sun.star.beans.PropertyValue
	args5(0).Name = "ByRows"
	args5(0).Value = true
	args5(1).Name = "HasHeader"
	args5(1).Value = false
	args5(2).Name = "CaseSensitive"
	args5(2).Value = false
	args5(3).Name = "NaturalSort"
	args5(3).Value = false
	args5(4).Name = "IncludeAttribs"
	args5(4).Value = true
	args5(5).Name = "UserDefIndex"
	args5(5).Value = 0
	args5(6).Name = "Col1"
	args5(6).Value = 6
	args5(7).Name = "Ascending1"
	args5(7).Value = false
	args5(8).Name = "Col2"
	args5(8).Value = 3
	args5(9).Name = "Ascending2"
	args5(9).Value = true
	args5(10).Name = "Col3"
	args5(10).Value = 1
	args5(11).Name = "Ascending3"
	args5(11).Value = true
	args5(12).Name = "IncludeComments"
	args5(12).Value = false
	args5(13).Name = "IncludeImages"
	args5(13).Value = true
	dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args5())
	dim args6(0) as new com.sun.star.beans.PropertyValue
	args6(0).Name = "ToPoint"
	args6(0).Value = "$A$1"
	dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())
end sub
Wobei zu Beginn nur der Bereich definiert wird und am Ende auf den Beginn der Tabelle gesprungen wird.
Grüße
kilix
Karolus
********
Beiträge: 7442
Registriert: Mo, 02.01.2006 19:48

Re: geschützte Tabelle sortieren

Beitrag von Karolus »

Hallo

Es gibt die Methoden sheet.protect("streng_geheimes_passwort") und sheet.unprotect("streng_geheimes_passwort")

Code: Alles auswählen

sub SortGesamt

PWD = "strenggeheim"
controller = thisComponent.CurrentController
sheet = controller.ActiveSheet
sheet.unprotect( PWD )

	dim document   as object
	dim dispatcher as object
	
document   = controller.Frame

	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dim args1(0) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "ToPoint"
	args1(0).Value = "$A$5"
	dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
	dim args2(0) as new com.sun.star.beans.PropertyValue
	args2(0).Name = "By"
	args2(0).Value = 1
	dispatcher.executeDispatch(document, ".uno:GoDownToEndOfDataSel", "", 0, args2())
	dim args3(0) as new com.sun.star.beans.PropertyValue
	args3(0).Name = "By"
	args3(0).Value = 1
	dispatcher.executeDispatch(document, ".uno:GoRightToEndOfDataSel", "", 0, args3())
   ' dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, Array())
	dim args5(13) as new com.sun.star.beans.PropertyValue
	args5(0).Name = "ByRows"
	args5(0).Value = true
	args5(1).Name = "HasHeader"
	args5(1).Value = false
	args5(2).Name = "CaseSensitive"
	args5(2).Value = false
	args5(3).Name = "NaturalSort"
	args5(3).Value = false
	args5(4).Name = "IncludeAttribs"
	args5(4).Value = true
	args5(5).Name = "UserDefIndex"
	args5(5).Value = 0
	args5(6).Name = "Col1"
	args5(6).Value = 6
	args5(7).Name = "Ascending1"
	args5(7).Value = false
	args5(8).Name = "Col2"
	args5(8).Value = 3
	args5(9).Name = "Ascending2"
	args5(9).Value = true
	args5(10).Name = "Col3"
	args5(10).Value = 1
	args5(11).Name = "Ascending3"
	args5(11).Value = true
	args5(12).Name = "IncludeComments"
	args5(12).Value = false
	args5(13).Name = "IncludeImages"
	args5(13).Value = true
	dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args5())
	dim args6(0) as new com.sun.star.beans.PropertyValue
	args6(0).Name = "ToPoint"
	args6(0).Value = "$A$1"
	dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())
sheet.protect( PWD )
end sub
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Carsten01
*
Beiträge: 17
Registriert: Mi, 20.12.2006 17:10

Re: geschützte Tabelle sortieren

Beitrag von Carsten01 »

Fürs Sortieren braucht man den dispatcher-Kram doch nicht. Ich mache das zumindest so:

Code: Alles auswählen

Sub mysort
doc=thiscomponent
Sheet1 = Doc.Sheets.getByName("Tabelle1")
Sheet1.unprotect("")
zeilen=5
spalten=5
Ziel = Sheet1.getCellRangeByPosition(0,0,spalten,zeilen)
Dim SortProps(3) As new com.sun.star.beans.PropertyValue
Dim SortFeld(1) As new com.sun.star.table.TableSortField
SortFeld(0).Field = 0
SortFeld(0).IsAscending = True
SortFeld(0).FieldType = com.sun.star.util.SortFieldType.AUTOMATIC
SortFeld(1).Field = 1
SortFeld(1).IsAscending = True
SortFeld(1).FieldType = com.sun.star.util.SortFieldType.AUTOMATIC
SortProps(0).Name = "SortFields"
SortProps(0).Value = SortFeld()
SortProps(1).Name = "IsSortColumns"
SortProps(1).Value = False
SortProps(2).Name = "ContainsHeader"
SortProps(2).Value = false
SortProps(3).Name = "BindFormatsToContent"
SortProps(3).Value = false
Ziel.Sort(SortProps())
Sheet1.protect("")
end sub
Antworten