Bedingte Formatierung macht Probleme.

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

Moderator: Moderatoren

Benutzeravatar
MikeRo
****
Beiträge: 153
Registriert: Mi, 20.01.2010 10:16

Bedingte Formatierung macht Probleme.

Beitrag von MikeRo »

Hallo, ich habe mich ein bisschen an Makros versucht und muss eine bedingte Formatierung über Makros gelöst.
(Ich kann nicht die normale nehmen, da ich das Dokument als XLS Speichern muss und dann die Formatierung flöten geht... Weil er die Formatvorlagen komisch umwandelt...)

Code: Alles auswählen

Sub Suchen_Formatieren
rem---------
Ende = 6
rem------
oDoc = thisComponent
	for i = 0 to odoc.sheets().count() -1
oSheet = oDoc.Sheets( i )
orows = osheet.getrows
oRange = oSheet.getCellRangeByName("A1:J6000")
oSearchDesc = oSheet.createSearchDescriptor
oSearchDesc.SearchString = "test"
'oSearchDesc.searchWords = True
oResult = oRange.findAll(oSearchDesc)
	If NOT isNull( oResult ) then
         	For each cell in oResult
         	nRow = cell.celladdress.row
        	ErgebnisLinks = osheet.getcellrangebyposition( 0 , nRow , Ende , nRow )
        	ErgebnisLinks.CharFontName="ComicSansif"
			ErgebnisLinks.CharHeight="20"
			ErgebnisLinks.charcolor=&Hfa00fa
			ErgebnisLinks.cellbackcolor=&H0000ff
   			Next cell
		End If
	next i

End Sub


Wenn ich das Makro starte und in jeder zweiten Zeile (in einer Spalte) test steht, geht es ohne Probleme, aber wenn in jeder Zeile test steht kommt die Fehlermeldung: Eigenschaft oder Methode nicht gefunden: celladress

Ich bin noch am probieren, am ende muss es nicht nach test suchen, sondern nach der Formel (Teilergebnis)
Außer in der Zeile in der Gesamtergebnis steht.
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Bedingte Formatierung macht Probleme.

Beitrag von DPunch »

Aloha
MikeRo hat geschrieben:Wenn ich das Makro starte und in jeder zweiten Zeile (in einer Spalte) test steht, geht es ohne Probleme, aber wenn in jeder Zeile test steht kommt die Fehlermeldung: Eigenschaft oder Methode nicht gefunden: celladress
Nur eine einzelne Zelle hat die Methode .getCellAddress, direkt untereinander stehend Treffer werden aber zu einer CellRange zusammengefasst - dort fehlt die Methode, daher die Fehlermeldung.
Allgemeingültig würde Dein Code ungefähr so aussehen:

Code: Alles auswählen

	Ende = 6
	oDoc = thisComponent
	oDoc.lockControllers
	For i = 0 To oDoc.Sheets.Count-1
		oSheet = oDoc.Sheets(i)
		oRange = oSheet.getCellRangeByName("A1:J6000")
		oSearchDesc = oSheet.createSearchDescriptor
		oSearchDesc.SearchString = "test"
		oSearchDesc.searchWords = True
		oResult = oRange.findAll(oSearchDesc)
		If NOT isNull(oResult) Then
			For each cellRange in oResult
				RangeAddress = cellRange.RangeAddress
				nStartRow = RangeAddress.StartRow
				nEndRow = RangeAddress.EndRow
				ErgebnisLinks = oSheet.getCellRangeByPosition(0,nStartRow,Ende,nEndRow)
				ErgebnisLinks.CharFontName="ComicSansif"
				ErgebnisLinks.CharHeight="20"
				ErgebnisLinks.charcolor=&Hfa00fa
				ErgebnisLinks.cellbackcolor=&H0000ff
			Next cellRange
		End If
	Next i
	Do While oDoc.hasControllersLocked
		oDoc.unlockControllers
	Loop
Benutzeravatar
MikeRo
****
Beiträge: 153
Registriert: Mi, 20.01.2010 10:16

Re: Bedingte Formatierung macht Probleme.

Beitrag von MikeRo »

Super Danke! :)

So ich habe den Code mal weiter verändert und angepasst.

Code: Alles auswählen

Dim oLinie as new com.sun.star.table.BorderLine
with oLinie
	.Color = rgb(255, 59, 0)
	.outerLineWidth = 150
End with

   Ende = 9
   oDoc = thisComponent
   oDoc.lockControllers
   For i = 0 To oDoc.Sheets.Count-1
      oSheet = oDoc.Sheets(i)
      oRange = oSheet.getCellRangeByName("A1:J6000")
      oSearchDesc = oSheet.createSearchDescriptor
      oSearchDesc.SearchString = "Ergebnis"
      oSearchDesc.searchWords = False
      oResult = oRange.findAll(oSearchDesc)
      If NOT isNull(oResult) Then
         For each cellRange in oResult
           RangeAddress = cellRange.RangeAddress
            nStartRow = RangeAddress.StartRow
            nEndRow = RangeAddress.EndRow
            Ergebnis = oSheet.getCellRangeByPosition(0,nStartRow,Ende,nEndRow)
            Ergebnis.CharFontName="Arial"
            Ergebnis.CharHeight="10"
            Ergebnis.charcolor=&H000000
            Ergebnis.cellbackcolor=&H7CFC00
            Ergebnis.NumberFormat=3 'tausenderpunkt
            Ergebnis.TopBorder = oLinie
            Ergebnis.BottomBorder = oLinie
         Next cellRange
      End If
   Next i
   Do While oDoc.hasControllersLocked
      oDoc.unlockControllers
   Loop

Folgende Probleme habe ich noch.:

Er soll genau nach Ergebnis suchen und nicht auch Gesamtergebnis mit einbeziehen.
Er soll den Border Links und Rechts nur am Anfang und am ende des bereichs machen und nicht in jeder Zelle.
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
Benutzeravatar
MikeRo
****
Beiträge: 153
Registriert: Mi, 20.01.2010 10:16

Re: Bedingte Formatierung macht Probleme.

Beitrag von MikeRo »

Ich habe schon eine Lösung gefunden, damit er nur nach Ergebnis sucht! :)

Code: Alles auswählen

Dim oLinie as new com.sun.star.table.BorderLine
with oLinie
	.Color = rgb(0, 0, 0)
	.outerLineWidth = 25
End with

   Ende = 9
   oDoc = thisComponent
   oDoc.lockControllers
   For i = 0 To oDoc.Sheets.Count-1
      oSheet = oDoc.Sheets(i)
      oRange = oSheet.getCellRangeByName("A1:J6000")
      oSearchDesc = oSheet.createSearchDescriptor
      oSearchDesc.SearchString = "Ergebnis"
      oSearchDesc.SearchCaseSensitive = True
      oResult = oRange.findAll(oSearchDesc)
      If NOT isNull(oResult) Then
         For each cellRange in oResult
           RangeAddress = cellRange.RangeAddress
            nStartRow = RangeAddress.StartRow
            nEndRow = RangeAddress.EndRow
            Ergebnis = oSheet.getCellRangeByPosition(0,nStartRow,Ende,nEndRow)
            Ergebnis.cellstyle = "Standard"
            Ergebnis.CharFontName="Arial"
            Ergebnis.CharWeight=com.sun.star.awt.FontWeight.BOLD
            Ergebnis.CharHeight="10"
            Ergebnis.charcolor=&H000000
            Ergebnis.cellbackcolor=&H7CFC00
            Ergebnis.NumberFormat=3 'tausenderpunkt
            Ergebnis.TopBorder = oLinie
            Ergebnis.BottomBorder = oLinie
         Next cellRange
      End If
   Next i
   Do While oDoc.hasControllersLocked
      oDoc.unlockControllers
   Loop
   
Jetzt Muss ich es nur noch hinbekommen, das er im Angegebenen Bereich nur der Zelle ganz links und ganz rechts einen Seitenrahmen gibt.
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
Antworten