Apache POI(HSSF) Conditional Formatting

Status
Nicht offen für weitere Antworten.
C

carsten123

Gast
Hi,

ich erzeuge mittels HSSF Excel-Sheets. Die darin enthaltenen Zellen besitzen eine Bedingte Formatierung. So lange sich die Bedingte Formatierung auf den Werte der Zelle selbst beschränkt ist alles super.
Wenn ich jedoch als Bedingung nur eine Formel verwende klappt es nicht, das heißt die Datei wird geschrieben und man kann sie auch mit Excel öffnen, will man sich aber die Bedingte-Formatierung über "Format"->"Bedingte Formatierung" anschauen, erscheint nicht das kleine Fester, das sonst immer erscheint und auch die Formatierung an sich Funktioniert nicht.

Hier mein Quelltext:

Code:
HSSFConditionalFormattingRule rule4 = formating.createConditionalFormattingRule("$A$5<$A$6");
HSSFPatternFormatting patternFmt4 = rule4.createPatternFormatting();
patternFmt4.setFillBackgroundColor(HSSFColor.VIOLET.index);

Region [] regions2 =
		 {
		     new Region(3,(short)3,3,(short)3)
		 };
		 
 formating.addConditionalFormatting(regions2, rule4);

in der API steht zur Funktion "createConditionalFormattingRule()" folgendes:

"A factory method allowing to create a conditional formatting rule with a formula.
The formatting rules are applied by Excel when the value of the formula not equal to 0.

TODO - formulas containing cell references are currently not parsed properly "

Aber die API ist meiner Meinung noch veraltet und nicht aktuell (ist mir an anderen Stellen aufgefallen). Ich benutze Apache POI 3.1.

Wieß vielleicht jemand wie es richtig funktioniern könnte, oder ist die Implementierung wirklich fehlerhaft?

Gruß carsten
 
C

carsten123

Gast
so und jetzt noch eine Quellcode-Snippet wie das ganze mit der Bedingten Formatierung aus HSSF heraus funktioniert, damit nicht alle einen ganzen Tag lang rum Probieren müssen ;):


Code:
package Foo;

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.hssf.record.CFRuleRecord.ComparisonOperator;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFConditionalFormatting;
import org.apache.poi.hssf.usermodel.HSSFConditionalFormattingRule;
import org.apache.poi.hssf.usermodel.HSSFPatternFormatting;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFSheetConditionalFormatting;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.Region;


public class foo{
    public static void main(String[] args){

	// Workbook anlegen
	HSSFWorkbook workbook = new HSSFWorkbook();
	//Sheet erstellen
	HSSFSheet sheet = workbook.createSheet("TestSheet");
	HSSFRow row = sheet.createRow(0);
	HSSFCell cell = row.createCell((short)0);
	

	
	HSSFSheetConditionalFormatting formating = sheet.getSheetConditionalFormatting();
	
	//Formatregel bestimmen
	//Regel lautet: wenn der Zelleninhalt kleiner 8 ist
	HSSFConditionalFormattingRule rule1 = formating.createConditionalFormattingRule(
		    ComparisonOperator.LT, 
		    8+"", // muss hier ein String sein
		    null   
	);
	
	//Art der Formatierung bestimmen	 
	HSSFPatternFormatting patternFmt1 = rule1.createPatternFormatting();
	patternFmt1.setFillBackgroundColor(HSSFColor.LIGHT_GREEN.index);
	
	//Bereich bestimmen in dem diese Regel gueltig ist
	Region [] regions ={
		     new Region(1,(short)1,1,(short)1)
		 };	 
		 
	//Regel zum Sheet hinzufuegen
	formating.addConditionalFormatting(regions, rule1);		

	//xls-Datei schreiben
	try {
	    FileOutputStream out = new FileOutputStream(new File("testaus.xls"));
	    workbook.write(out);
	    
	} catch (Exception e) {
	    e.printStackTrace();
	}
    }		
}

ich hoffe, dass das manchen n bissl weiterhilft
 
J

JohnDoe2000

Gast
Hallo zusammen,

sorry, dass ich auf so einen alten Beitrag antworte aber genau dieser Beitrag hat mir sehr gut weitergeholfen. Nun habe ich allerdings ein weiteres Problem, was die bedingte Formatierung angeht:

Ich würde gern den aus Excel "Zellwert ist" Vergleich in einer Cond.Formatting mit HSSF umsetzen. Hier ein Beispiel. Ich werde gern alle Zellen mit einer Bedingten Formatierung formatieren und sollte in einer Zelle ein "a" (ohne Anführungszeichen) stehen, dann soll die Farbe der Zelle geändert werden.

Ich habe folgenden Ansatz (der für Integer auch super funktioniert) ausprobiert:

Java:
HSSFSheetConditionalFormatting formating = m_sheet.getSheetConditionalFormatting();
HSSFConditionalFormattingRule rule3 = formating.createConditionalFormattingRule(ComparisonOperator.EQUAL, ".", null);
HSSFPatternFormatting patternFmt3 = rule3.createPatternFormatting();
patternFmt3.setFillBackgroundColor(COLOR_MARK);
CellRangeAddress regions[] = { new CellRangeAddress (INDEX_ROW_TABLE,m_rowCount-1,0,m_dates.size()+2) };
formating.addConditionalFormatting(regions, rule3);

Allerdings bekomme ich für chars oder einen String eine Exception:

Java:
org.apache.poi.ss.formula.FormulaParseException: Specified named range 'a' does not exist in the current workbook.
	at org.apache.poi.ss.formula.FormulaParser.parseNonRange(FormulaParser.java:567)
	at org.apache.poi.ss.formula.FormulaParser.parseRangeable(FormulaParser.java:515)
	at org.apache.poi.ss.formula.FormulaParser.parseRangeExpression(FormulaParser.java:266)
	at org.apache.poi.ss.formula.FormulaParser.parseSimpleFactor(FormulaParser.java:1117)
	at org.apache.poi.ss.formula.FormulaParser.percentFactor(FormulaParser.java:1077)
	at org.apache.poi.ss.formula.FormulaParser.powerFactor(FormulaParser.java:1064)
	at org.apache.poi.ss.formula.FormulaParser.Term(FormulaParser.java:1424)
	at org.apache.poi.ss.formula.FormulaParser.additiveExpression(FormulaParser.java:1524)
	at org.apache.poi.ss.formula.FormulaParser.concatExpression(FormulaParser.java:1508)
	at org.apache.poi.ss.formula.FormulaParser.comparisonExpression(FormulaParser.java:1465)
	at org.apache.poi.ss.formula.FormulaParser.unionExpression(FormulaParser.java:1445)
	at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:1566)
	at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:174)Programm beendet.

	at org.apache.poi.hssf.model.HSSFFormulaParser.parse(HSSFFormulaParser.java:72)
	at org.apache.poi.hssf.record.CFRuleRecord.parseFormula(CFRuleRecord.java:525)
	at org.apache.poi.hssf.record.CFRuleRecord.create(CFRuleRecord.java:146)
	at org.apache.poi.hssf.usermodel.HSSFSheetConditionalFormatting.createConditionalFormattingRule(HSSFSheetConditionalFormatting.java:71)
	at XlsWriter.conditionalFormatting(XlsWriter.java:673)
	at XlsWriter.close(XlsWriter.java:761)
	at XlsWriter.<init>(XlsWriter.java:71)
	at Main.generateXls(Main.java:32)
	at Main.main(Main.java:75)

Wäre super, wenn mir jemand helfen könnte. Sitze schon etwas an dem Problem. Google wusste auch keine Antwort.

Danke für Eure Hilfe.


Gruß
John
 
J

JohnDoe2000

Gast
Hat denn wirklich keine eine Idee? Bin echt echt der Einzige, der eine Bedingung auf Zeichen und nicht Zahlen anwenden will?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Apache POI HSSF - Farbe/Rahmen etc. ohne Style-Vorlage? Allgemeine Java-Themen 4
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
T Logging mit org.apache.logging.log4j Allgemeine Java-Themen 1
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
H Apache fop -- welche Möglichkeit gibt es um den Fortschritt anzuzeigen (Progressbar) Allgemeine Java-Themen 5
H Apache fop - OutOfMemoryError Allgemeine Java-Themen 10
B Schnittstelle zwischen MySQL und Apache Allgemeine Java-Themen 8
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
F Fehlermeldung: java.lang.NoClassDefFoundError: org/apache/commons/net/ntp/NTPUDPClient Allgemeine Java-Themen 6
N Apache POI/ neue Reihe in Excel mit einem Button Allgemeine Java-Themen 2
I Apache POI Bild in Word ersetzen Allgemeine Java-Themen 15
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
L APACHE POI PIVOT TABELLEN Allgemeine Java-Themen 4
L Apache POI Datenquelle Allgemeine Java-Themen 1
S Apache POI Filtern nach bestimmten Kriterium Allgemeine Java-Themen 1
L JavaFX JavaFX Chart in Apache Poi Excel Datei Allgemeine Java-Themen 2
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
F Input/Output NullPointerException, aber wieso? [Apache POI] Allgemeine Java-Themen 11
F Input/Output NullPointerException with Apache POI Allgemeine Java-Themen 7
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
J Apache POI - No external workbook with name Allgemeine Java-Themen 5
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
MiMa Apache Tika: Warnmeldungen und Beispielcode Allgemeine Java-Themen 12
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
G Ant Probleme bei einer Installation die Apache ant+ivy verwendet Allgemeine Java-Themen 14
FrittenFritze Swing Apache Batik - Zoom an einer bestimmten Stelle Allgemeine Java-Themen 4
K Apache poi: Deprecated getCellType Allgemeine Java-Themen 3
J Apache POI Excel- Blattschutz aufheben Allgemeine Java-Themen 2
I Apache POI Word Text einfügen Allgemeine Java-Themen 26
T Geschlossen: Apache POI - Excel einlesen Allgemeine Java-Themen 0
K Apache POI Word Tabelle Zellen verbinden Allgemeine Java-Themen 4
K Apache POI Word Tabelle Spaltenbreite festlegen Allgemeine Java-Themen 7
K Apache POI Word bestimmte Textstellen bearbeiten Allgemeine Java-Themen 1
R Apache POI XSSF Allgemeine Java-Themen 2
E Apache POI Powerpoint Verlinkungen ändern Allgemeine Java-Themen 4
T xls-Datei per Apache Commons CsvParser einlesen UTF-8 Zeichen russische Zeichen Allgemeine Java-Themen 2
zer0zer0 Best Practice apache common cli - optionen für hilfe ausblenden Allgemeine Java-Themen 5
S Eclipse Apache Camel FTP: Fehlerbehandlung, wie? Allgemeine Java-Themen 2
H Excel Datei einlesen mit Apache POI Allgemeine Java-Themen 1
GianaSisters Apache POI - Hyperlink erstellen Allgemeine Java-Themen 0
reibi Apache PDFBox Allgemeine Java-Themen 0
T Mit Apache Poi Daten aus einer Excel Tabelle kopieren und in Word einfügen Allgemeine Java-Themen 1
C Was bekomme ich eine Nullpointerexception? (Apache POI) Allgemeine Java-Themen 3
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
E Apache POI-Datei lesen und umschreiben Allgemeine Java-Themen 8
G Input/Output Apache POI Excel Allgemeine Java-Themen 5
L Apache CLI: Args[] übergeben Allgemeine Java-Themen 3
P docx mit Apache POI auslesen, verändern und zurückschreiben Allgemeine Java-Themen 2
N Applet Apache Poi Wert einer Formel ausgeben Allgemeine Java-Themen 5
L Apache Common CLI Allgemeine Java-Themen 4
J Webstart (auf Apache) jnlp wird nicht geladen Allgemeine Java-Themen 2
S HTTP Apache HTTPClient Problem Allgemeine Java-Themen 4
R org.apache.http kompletter Internetausfall Allgemeine Java-Themen 7
J xlsx Dateien lesen OHNE apache POI Allgemeine Java-Themen 6
V Für was benötigt man Apache Common Allgemeine Java-Themen 3
V Apache POI Excel Datum auslesen Allgemeine Java-Themen 6
V Apache POI Excel Sheet auslesen Allgemeine Java-Themen 5
B Problem mit RegEs und org.apache.regexp.RE Allgemeine Java-Themen 5
T Apache POI Export EXCEL - [Zahlen-Werte] Allgemeine Java-Themen 1
Landei Erfahrungen mit JavaConfig oder Apache Commons Config? Allgemeine Java-Themen 3
J Apache FTPClient upload Allgemeine Java-Themen 3
A Apache License, Version 2.0 Allgemeine Java-Themen 7
S Bzip2 apache commons-compress Allgemeine Java-Themen 3
Chris81T Apache FOP 0.20-5 mit JNI von C++ Code aufrufen Allgemeine Java-Themen 8
G Apache soll mit SVN zusammenarbeiten Allgemeine Java-Themen 3
E Apache Commons - PropertyConfiguration - Autosave Allgemeine Java-Themen 2
G Servlet über apache Tomcat ansprechen Allgemeine Java-Themen 6
alexpetri DirectoryWalker apache.commons Allgemeine Java-Themen 3
S Apache Commons Net geht nicht Allgemeine Java-Themen 5
G mit Apache-Jakarta-POI auch Graphiken aus Excel einlesen? Allgemeine Java-Themen 3
T Apache Lucene Allgemeine Java-Themen 2
Q Ant und org.apache.log4j.xml.DOMConfigurator Problem Allgemeine Java-Themen 2
M Java Webserver - Tomcat alleine oder zusammen mit Apache? Allgemeine Java-Themen 3
R EXCEL Range und HSSF POI CellRangeAddress Allgemeine Java-Themen 1
R Variablen per HSSF geheime Werte von JAVA an EXCEL Allgemeine Java-Themen 2
J Zeilenumbruch - Excel Export HSSF Allgemeine Java-Themen 10
J HSSF - schreiben in und lesen aus vorhandener Datei Allgemeine Java-Themen 6
S Java Excel bestimmte Zellen auslesen (POI HSSF) Allgemeine Java-Themen 11
G Java POI HSSF Excel Datei Gruppierung und Gliederung Allgemeine Java-Themen 2
I POI HSSF: Zahlenformat mit Tausendertrennzeichen? Allgemeine Java-Themen 5
S CSV Dateien mit HSSF von POI lesen? Allgemeine Java-Themen 4
E Excel-Datei via POI-HSSF modifizieren Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben