[Gelöst] Zelle mit best. Wert, Leerzeile darüber einfügen.

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: [Gelöst] Zelle mit best. Wert, Leerzeile darüber einfügen.

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von MikeRo » Di, 09.11.2010 15:29

Tausend Dank an alle :)

Es scheint nun zu funktionieren. Ich werde es noch mal genauer testen.

Code: Alles auswählen

Sub Main

oDoc = thisComponent
for i = 0 to odoc.sheets().count() -1
oSheet = oDoc.Sheets( i )
orows = osheet.getrows
oRange = oSheet.getCellRangeByName( "A1:Z60000" )
oSearchDesc = oSheet.createSearchDescriptor
oSearchDesc.SearchString = "Gesamtergebnis"
oSearchDesc.searchWords = True
oResult = oRange.findAll(oSearchDesc)
If NOT isNull( oResult ) then
      For each cell in oResult
      nRow = cell.celladdress.row
      nCol = cell.celladdress.column
      If Len(oSheet.getCellByPosition(nCol,nRow-1).String) > 0 Then
         orows.insertbyindex( nRow , 1 )     
         osheet.getcellrangebyposition( 0 , nRow , 99 , nRow ).cellstyle = "Standard"
      End If
   Next cell
End If
next i

rem --------------------------------------------------------suchen und ersetzen
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:TableSelectAll", "", 0, Array())

rem ----------------------------------------------------------------------
dim args2(17) as new com.sun.star.beans.PropertyValue
args2(0).Name = "SearchItem.StyleFamily"
args2(0).Value = 2
args2(1).Name = "SearchItem.CellType"
args2(1).Value = 1
args2(2).Name = "SearchItem.RowDirection"
args2(2).Value = false
args2(3).Name = "SearchItem.AllTables"
args2(3).Value = false
args2(4).Name = "SearchItem.Backward"
args2(4).Value = false
args2(5).Name = "SearchItem.Pattern"
args2(5).Value = false
args2(6).Name = "SearchItem.Content"
args2(6).Value = false
args2(7).Name = "SearchItem.AsianOptions"
args2(7).Value = false
args2(8).Name = "SearchItem.AlgorithmType"
args2(8).Value = 0
args2(9).Name = "SearchItem.SearchFlags"
args2(9).Value = 65536
args2(10).Name = "SearchItem.SearchString"
args2(10).Value = "Ergebnis"
args2(11).Name = "SearchItem.ReplaceString"
args2(11).Value = ""
args2(12).Name = "SearchItem.Locale"
args2(12).Value = 255
args2(13).Name = "SearchItem.ChangedChars"
args2(13).Value = 2
args2(14).Name = "SearchItem.DeletedChars"
args2(14).Value = 2
args2(15).Name = "SearchItem.InsertedChars"
args2(15).Value = 2
args2(16).Name = "SearchItem.TransliterateFlags"
args2(16).Value = 1024
args2(17).Name = "SearchItem.Command"
args2(17).Value = 1

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

rem ----------------------------------------------------------------------
dim args3(17) as new com.sun.star.beans.PropertyValue
args3(0).Name = "SearchItem.StyleFamily"
args3(0).Value = 2
args3(1).Name = "SearchItem.CellType"
args3(1).Value = 1
args3(2).Name = "SearchItem.RowDirection"
args3(2).Value = false
args3(3).Name = "SearchItem.AllTables"
args3(3).Value = false
args3(4).Name = "SearchItem.Backward"
args3(4).Value = false
args3(5).Name = "SearchItem.Pattern"
args3(5).Value = false
args3(6).Name = "SearchItem.Content"
args3(6).Value = false
args3(7).Name = "SearchItem.AsianOptions"
args3(7).Value = false
args3(8).Name = "SearchItem.AlgorithmType"
args3(8).Value = 0
args3(9).Name = "SearchItem.SearchFlags"
args3(9).Value = 65536
args3(10).Name = "SearchItem.SearchString"
args3(10).Value = "Ergebnis"
args3(11).Name = "SearchItem.ReplaceString"
args3(11).Value = ""
args3(12).Name = "SearchItem.Locale"
args3(12).Value = 255
args3(13).Name = "SearchItem.ChangedChars"
args3(13).Value = 2
args3(14).Name = "SearchItem.DeletedChars"
args3(14).Value = 2
args3(15).Name = "SearchItem.InsertedChars"
args3(15).Value = 2
args3(16).Name = "SearchItem.TransliterateFlags"
args3(16).Value = 1024
args3(17).Name = "SearchItem.Command"
args3(17).Value = 1

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

rem ----------------------------------------------------------------------
dim args4(17) as new com.sun.star.beans.PropertyValue
args4(0).Name = "SearchItem.StyleFamily"
args4(0).Value = 2
args4(1).Name = "SearchItem.CellType"
args4(1).Value = 1
args4(2).Name = "SearchItem.RowDirection"
args4(2).Value = false
args4(3).Name = "SearchItem.AllTables"
args4(3).Value = false
args4(4).Name = "SearchItem.Backward"
args4(4).Value = false
args4(5).Name = "SearchItem.Pattern"
args4(5).Value = false
args4(6).Name = "SearchItem.Content"
args4(6).Value = false
args4(7).Name = "SearchItem.AsianOptions"
args4(7).Value = false
args4(8).Name = "SearchItem.AlgorithmType"
args4(8).Value = 0
args4(9).Name = "SearchItem.SearchFlags"
args4(9).Value = 65536
args4(10).Name = "SearchItem.SearchString"
args4(10).Value = "Ergebnis"
args4(11).Name = "SearchItem.ReplaceString"
args4(11).Value = ""
args4(12).Name = "SearchItem.Locale"
args4(12).Value = 255
args4(13).Name = "SearchItem.ChangedChars"
args4(13).Value = 2
args4(14).Name = "SearchItem.DeletedChars"
args4(14).Value = 2
args4(15).Name = "SearchItem.InsertedChars"
args4(15).Value = 2
args4(16).Name = "SearchItem.TransliterateFlags"
args4(16).Value = 1024
args4(17).Name = "SearchItem.Command"
args4(17).Value = 3

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


end sub

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von DPunch » Do, 04.11.2010 12:20

Aloha

Die entsprechende Codezeile einfach folgendermaßen anpassen:

Code: Alles auswählen

osheet.getcellrangebyposition( 0 , nRow , 99 , nRow ).cellstyle = "Standard"

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von MikeRo » Mi, 03.11.2010 20:54

DPunch hat geschrieben:Aloha
MikeRo hat geschrieben:das einzige Problem ist noch, das nun die Zeilen drüber nicht die Standartformatierung haben, sondern die vom Ergebnis.
Was meinst Du mit "nun"? Wenn die Formatierung vorher zurückgesetzt wurde, wird sie das auch jetzt noch.
Oder hat das Zurücksetzen gar nicht erst funktioniert?
Doch eigentlich ging es vorher. Nun übernimmt er für die neue Zeile, die Formatierung der Zeile darüber.
Ich habe es mal einfach in einem neuen Dokument getestet.

Ergebnis
Gesamtergebnis
Ergebnis
Gesamtergebnis
TestTest rot hinterlegt
Gesamtergebnis

Die Zeile ist dann auch Rot hinterlegt. Alles andere geht und auch auf jeder Tabelle

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von DPunch » Mi, 03.11.2010 20:27

Aloha
MikeRo hat geschrieben:das einzige Problem ist noch, das nun die Zeilen drüber nicht die Standartformatierung haben, sondern die vom Ergebnis.
Was meinst Du mit "nun"? Wenn die Formatierung vorher zurückgesetzt wurde, wird sie das auch jetzt noch.
Oder hat das Zurücksetzen gar nicht erst funktioniert?

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von MikeRo » Mi, 03.11.2010 20:16

DPunch hat geschrieben:Aloha
MikeRo hat geschrieben:Das Problem ist, dass er mit der Überprüfung nur in der ersten Tabelle eine Zeile über Gesamtergebnis hinzufügt und alle anderen nicht weiter beachtet
Dann stimmt was mit deinen Tabellen nicht, ich habe das von Dir gepostete Makro ergänzt mit der Überprüfung einfach hier rauskopiert und es macht haargenau das, was Dir vorschwebt - und zwar (logischerweise, schliesslich läuft das Ganze in einer Schleife) in allen Tabellen.
Danke für die Hilfe, es geht jetzt, das einzige Problem ist noch, das nun die Zeilen drüber nicht die Standartformatierung haben, sondern die vom Ergebnis.

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von DPunch » Mi, 03.11.2010 19:38

Aloha
MikeRo hat geschrieben:Das Problem ist, dass er mit der Überprüfung nur in der ersten Tabelle eine Zeile über Gesamtergebnis hinzufügt und alle anderen nicht weiter beachtet
Dann stimmt was mit deinen Tabellen nicht, ich habe das von Dir gepostete Makro ergänzt mit der Überprüfung einfach hier rauskopiert und es macht haargenau das, was Dir vorschwebt - und zwar (logischerweise, schliesslich läuft das Ganze in einer Schleife) in allen Tabellen.

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von MikeRo » Mi, 03.11.2010 19:20

Das Problem ist, dass er mit der Überprüfung nur in der ersten Tabelle eine Zeile über Gesamtergebnis hinzufügt und alle anderen nicht weiter beachtet, egal wie oft ich es ausführe und mein eigenes Makro wird danach auch nicht mehr gestartet. In der Version ohne die Überprüfung geht es in jeder Tabelle da wird Gesamtergebnis verrückt und Ergebnis gelöscht.

Code: Alles auswählen

Sub Main

oDoc = thisComponent
for i = 0 to odoc.sheets().count() -1
oSheet = oDoc.Sheets( i )
orows = osheet.getrows
oRange = oSheet.getCellRangeByName( "A1:Z60000" )
oSearchDesc = oSheet.createSearchDescriptor
oSearchDesc.SearchString = "Gesamtergebnis"
oSearchDesc.searchWords = True
oResult = oRange.findAll(oSearchDesc)
If NOT isNull( oResult ) then
   For each cell in oResult
     orows.insertbyindex( cell.celladdress.row , 2 )     
     osheet.getcellrangebyposition( 0 , cell.celladdress.row -2 , 99 , cell.celladdress.row -1).cellstyle = "Standard"
   Next cell
End If
next i

rem --------------------------------------------------------suchen und ersetzen
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:TableSelectAll", "", 0, Array())

rem ----------------------------------------------------------------------
dim args2(17) as new com.sun.star.beans.PropertyValue
args2(0).Name = "SearchItem.StyleFamily"
args2(0).Value = 2
args2(1).Name = "SearchItem.CellType"
args2(1).Value = 1
args2(2).Name = "SearchItem.RowDirection"
args2(2).Value = false
args2(3).Name = "SearchItem.AllTables"
args2(3).Value = false
args2(4).Name = "SearchItem.Backward"
args2(4).Value = false
args2(5).Name = "SearchItem.Pattern"
args2(5).Value = false
args2(6).Name = "SearchItem.Content"
args2(6).Value = false
args2(7).Name = "SearchItem.AsianOptions"
args2(7).Value = false
args2(8).Name = "SearchItem.AlgorithmType"
args2(8).Value = 0
args2(9).Name = "SearchItem.SearchFlags"
args2(9).Value = 65536
args2(10).Name = "SearchItem.SearchString"
args2(10).Value = "Ergebnis"
args2(11).Name = "SearchItem.ReplaceString"
args2(11).Value = ""
args2(12).Name = "SearchItem.Locale"
args2(12).Value = 255
args2(13).Name = "SearchItem.ChangedChars"
args2(13).Value = 2
args2(14).Name = "SearchItem.DeletedChars"
args2(14).Value = 2
args2(15).Name = "SearchItem.InsertedChars"
args2(15).Value = 2
args2(16).Name = "SearchItem.TransliterateFlags"
args2(16).Value = 1024
args2(17).Name = "SearchItem.Command"
args2(17).Value = 1

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

rem ----------------------------------------------------------------------
dim args3(17) as new com.sun.star.beans.PropertyValue
args3(0).Name = "SearchItem.StyleFamily"
args3(0).Value = 2
args3(1).Name = "SearchItem.CellType"
args3(1).Value = 1
args3(2).Name = "SearchItem.RowDirection"
args3(2).Value = false
args3(3).Name = "SearchItem.AllTables"
args3(3).Value = false
args3(4).Name = "SearchItem.Backward"
args3(4).Value = false
args3(5).Name = "SearchItem.Pattern"
args3(5).Value = false
args3(6).Name = "SearchItem.Content"
args3(6).Value = false
args3(7).Name = "SearchItem.AsianOptions"
args3(7).Value = false
args3(8).Name = "SearchItem.AlgorithmType"
args3(8).Value = 0
args3(9).Name = "SearchItem.SearchFlags"
args3(9).Value = 65536
args3(10).Name = "SearchItem.SearchString"
args3(10).Value = "Ergebnis"
args3(11).Name = "SearchItem.ReplaceString"
args3(11).Value = ""
args3(12).Name = "SearchItem.Locale"
args3(12).Value = 255
args3(13).Name = "SearchItem.ChangedChars"
args3(13).Value = 2
args3(14).Name = "SearchItem.DeletedChars"
args3(14).Value = 2
args3(15).Name = "SearchItem.InsertedChars"
args3(15).Value = 2
args3(16).Name = "SearchItem.TransliterateFlags"
args3(16).Value = 1024
args3(17).Name = "SearchItem.Command"
args3(17).Value = 1

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

rem ----------------------------------------------------------------------
dim args4(17) as new com.sun.star.beans.PropertyValue
args4(0).Name = "SearchItem.StyleFamily"
args4(0).Value = 2
args4(1).Name = "SearchItem.CellType"
args4(1).Value = 1
args4(2).Name = "SearchItem.RowDirection"
args4(2).Value = false
args4(3).Name = "SearchItem.AllTables"
args4(3).Value = false
args4(4).Name = "SearchItem.Backward"
args4(4).Value = false
args4(5).Name = "SearchItem.Pattern"
args4(5).Value = false
args4(6).Name = "SearchItem.Content"
args4(6).Value = false
args4(7).Name = "SearchItem.AsianOptions"
args4(7).Value = false
args4(8).Name = "SearchItem.AlgorithmType"
args4(8).Value = 0
args4(9).Name = "SearchItem.SearchFlags"
args4(9).Value = 65536
args4(10).Name = "SearchItem.SearchString"
args4(10).Value = "Ergebnis"
args4(11).Name = "SearchItem.ReplaceString"
args4(11).Value = ""
args4(12).Name = "SearchItem.Locale"
args4(12).Value = 255
args4(13).Name = "SearchItem.ChangedChars"
args4(13).Value = 2
args4(14).Name = "SearchItem.DeletedChars"
args4(14).Value = 2
args4(15).Name = "SearchItem.InsertedChars"
args4(15).Value = 2
args4(16).Name = "SearchItem.TransliterateFlags"
args4(16).Value = 1024
args4(17).Name = "SearchItem.Command"
args4(17).Value = 3

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


end sub

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von DPunch » Mi, 03.11.2010 14:19

Aloha
MikeRo hat geschrieben:Ich habe das Makro noch ein mal geändert, aber der Fehler besteht immer noch, wenn die Schleife drin ist, die überprüft ob schon 2 Zeilen drüber sind.
Es wäre für die Zukunft vielleicht hilfreich, wenn Du wenigstens sagen würdest, was für ein Fehler überhaupt auftritt.
(...)ich habe die Überprüfung herausgenommen, da damit gar nichts mehr geht.
Mit so einer Fehlerbeschreibung kann man, oder zumindest ich, herzlich wenig anfangen.

Code: Alles auswählen

	For each cell in oResult
		nRow = cell.celladdress.row
		nCol = cell.celladdress.column
		If Len(oSheet.getCellByPosition(nCol,nRow-1).String) > 0 Then
			orows.insertbyindex( nRow , 1 )     
			osheet.getcellrangebyposition( 0 , nRow -1 , 99 , nRow -1).cellstyle = "Standard"
		End If
	Next cell

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von MikeRo » Di, 02.11.2010 17:09

Ich habe das Makro noch ein mal geändert, aber der Fehler besteht immer noch, wenn die Schleife drin ist, die überprüft ob schon 2 Zeilen drüber sind.
Und die Aktuelle Version, ist ohne diese Überprüfung, allerdings funktioniert sie auf allen Tabellen perfekt (und nun muss auch nur noch eine Zeile eingefügt werden.) Aber ich brauche auch diese Überprüfung. Weil das Dokument nicht immer Vollständig erstellt wird und auch mal gespeichert und später wieder bearbeitet wird.

Code: Alles auswählen

Sub Main

oDoc = thisComponent
for i = 0 to odoc.sheets().count() -1
oSheet = oDoc.Sheets( i )
orows = osheet.getrows
oRange = oSheet.getCellRangeByName( "A1:Z60000" )
oSearchDesc = oSheet.createSearchDescriptor
oSearchDesc.SearchString = "Gesamtergebnis"
oSearchDesc.searchWords = True
oResult = oRange.findAll(oSearchDesc)
If NOT isNull( oResult ) then
   For each cell in oResult
     orows.insertbyindex( cell.celladdress.row , 1 )     
     osheet.getcellrangebyposition( 0 , cell.celladdress.row -1 , 99 , cell.celladdress.row -1).cellstyle = "Standard"
   Next cell
End If
next i
end sub

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von MikeRo » Do, 28.10.2010 14:29

Ich habe mal etwas an dem Makro verändert und nun fügt es auf jeder Tabelle 2 Leerzeilen über Gesamtergebnis ein.
Allerdings immer wieder, falls es nochmals gestartet wird, ich habe die Überprüfung herausgenommen, da damit gar nichts mehr geht.
Jetzt geht es wenigstens das er es auf allen Tabellen macht.

Code: Alles auswählen

Sub Main

oDoc = thisComponent
for i = 0 to odoc.sheets().count() -1
oSheet = oDoc.Sheets( i )
orows = osheet.getrows
oRange = oSheet.getCellRangeByName( "A1:Z60000" )
oSearchDesc = oSheet.createSearchDescriptor
oSearchDesc.SearchString = "Gesamtergebnis"
oSearchDesc.searchWords = True
oResult = oRange.findAll(oSearchDesc)
If NOT isNull( oResult ) then
   For each cell in oResult
     orows.insertbyindex( cell.celladdress.row , 2 )     
     osheet.getcellrangebyposition( 0 , cell.celladdress.row -2 , 99 , cell.celladdress.row -1).cellstyle = "Standard"
   Next cell
End If
next i
end sub

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von turtle47 » Mi, 27.10.2010 23:34

Hallo,

ersetze mal den mittleren Teil durch:

Code: Alles auswählen

		....
		If NOT isNull(oResult) Then
			For Each cell in oResult
					r = cell.celladdress.row
						if osheet.getcellbyposition(5 , r-2).string = "" then
							goto Label_1'<- Zeile geändert
                        else
							orows.insertbyindex( r , 2 )
							osheet.getcellrangebyposition( 0 , r , 99 , r +1).cellstyle = "Standard"
						end if
							Label_1: '<- Zeile hinzugefügt
			Next cell
			....
Jürgen

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von MikeRo » Mi, 27.10.2010 22:34

Es scheint noch ein Problem zu geben,

Ich habe 17(vielleicht auch bald mehr) Tabellenblätter, wenn ich auf jedem Tabellenblatt Teilergebnisse ausführe, habe ich auf jedem Tabellenblatt mindestens einmal Gesamtergebnis stehen.
Ich habe das Makro dann mal gestartet, aber es bricht nach der ersten Tabelle ab. es macht nicht auf der zweiten Seite weiter, wenn ich dann allerdings das Gesamtergebnis auf der ersten Seite lösche, macht er es doch auf der zweiten.

Code: Alles auswählen

REM--------------------------------------------------- Leezeilen einfügen

oDoc = thisComponent
for i = 0 to odoc.sheets().count() -1
    oSheet = oDoc.Sheets( i )
    orows = osheet.getrows
    oRange = oSheet.getCellRangeByName("A1:K60000")
    oSearchDesc = oSheet.createSearchDescriptor
    oSearchDesc.SearchString = "Gesamtergebnis"
    oSearchDesc.searchWords = True
    oResult = oRange.findAll(oSearchDesc)
    If NOT isNull(oResult) Then
            For Each cell in oResult
                    r = cell.celladdress.row
                    if osheet.getcellbyposition(5 , r-2).string = "" then
                            exit sub
                    else
                            orows.insertbyindex( r , 2 )
                            osheet.getcellrangebyposition( 0 , r , 99 , r +1).cellstyle = "Standard"
                    end if
            Next cell
    End If
next i

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von MikeRo » So, 24.10.2010 19:44

Karolus hat geschrieben:Hallo
Nein, es sucht jetzt nur in jeder Tabelle im Bereich E1:E60000, ich traue dir durchaus zu das du diese Bereichsadresse selbstständig auf deine Bedürfnisse anpassen kannst 8)

Gruß Karo
Das dürfte ich hin bekommen :)
Denn falls das Gesamtergebnis mal in einer anderen Spalte ist, kann ich das doch einfach in B1:G60000 ändern oder? :D

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von Karolus » So, 24.10.2010 15:29

Hallo
Nein, es sucht jetzt nur in jeder Tabelle im Bereich E1:E60000, ich traue dir durchaus zu das du diese Bereichsadresse selbstständig auf deine Bedürfnisse anpassen kannst 8)

Gruß Karo

Re: Zelle mit best. Wert, Leerzeile darüber einfügen? Überall

von MikeRo » So, 24.10.2010 14:23

Karolus hat geschrieben:Hallo
Ich hab in der Antwort vom Dienstag eine Schleife über alle Tabellenblaätter eingebaut.

Gruß Karo
Sehr nett :) Und das sucht jetzt in jeder Tabelle und jeder Spalte?
Tausend Dank für die Hilfe.

Gruß
Mike

Nach oben