geschützte Tabelle sortieren

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: geschützte Tabelle sortieren

Re: geschützte Tabelle sortieren

von Carsten01 » Mo, 13.11.2023 17:49

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

Re: geschützte Tabelle sortieren

von Karolus » Sa, 04.11.2023 08:48

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

geschützte Tabelle sortieren

von kilix » Fr, 03.11.2023 20:43

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.

Nach oben