All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.poi.hssf.record.CFRule12Record Maven / Gradle / Ivy

There is a newer version: 5.2.5
Show newest version
/* ====================================================================
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
==================================================================== */

package org.apache.poi.hssf.record;

import java.util.Arrays;

import org.apache.poi.hssf.record.cf.ColorGradientFormatting;
import org.apache.poi.hssf.record.cf.ColorGradientThreshold;
import org.apache.poi.hssf.record.cf.DataBarFormatting;
import org.apache.poi.hssf.record.cf.DataBarThreshold;
import org.apache.poi.hssf.record.cf.IconMultiStateFormatting;
import org.apache.poi.hssf.record.cf.IconMultiStateThreshold;
import org.apache.poi.hssf.record.cf.Threshold;
import org.apache.poi.hssf.record.common.ExtendedColor;
import org.apache.poi.hssf.record.common.FtrHeader;
import org.apache.poi.hssf.record.common.FutureRecord;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.formula.Formula;
import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.ss.usermodel.ConditionalFormattingThreshold.RangeType;
import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.util.HexDump;
import org.apache.poi.util.IOUtils;
import org.apache.poi.util.LittleEndianOutput;
import org.apache.poi.util.POILogger;

/**
 * Conditional Formatting v12 Rule Record (0x087A). 
 * 
 * 

This is for newer-style Excel conditional formattings, * from Excel 2007 onwards. * *

{@link CFRuleRecord} is used where the condition type is * {@link #CONDITION_TYPE_CELL_VALUE_IS} or {@link #CONDITION_TYPE_FORMULA}, * this is only used for the other types */ public final class CFRule12Record extends CFRuleBase implements FutureRecord, Cloneable { //arbitrarily selected; may need to increase private static final int MAX_RECORD_LENGTH = 100_000; public static final short sid = 0x087A; private FtrHeader futureHeader; private int ext_formatting_length; private byte[] ext_formatting_data; private Formula formula_scale; private byte ext_opts; private int priority; private int template_type; private byte template_param_length; private byte[] template_params; private DataBarFormatting data_bar; private IconMultiStateFormatting multistate; private ColorGradientFormatting color_gradient; // TODO Parse this, see #58150 private byte[] filter_data; /** Creates new CFRuleRecord */ private CFRule12Record(byte conditionType, byte comparisonOperation) { super(conditionType, comparisonOperation); setDefaults(); } private CFRule12Record(byte conditionType, byte comparisonOperation, Ptg[] formula1, Ptg[] formula2, Ptg[] formulaScale) { super(conditionType, comparisonOperation, formula1, formula2); setDefaults(); this.formula_scale = Formula.create(formulaScale); } private void setDefaults() { futureHeader = new FtrHeader(); futureHeader.setRecordType(sid); ext_formatting_length = 0; ext_formatting_data = new byte[4]; formula_scale = Formula.create(Ptg.EMPTY_PTG_ARRAY); ext_opts = 0; priority = 0; template_type = getConditionType(); template_param_length = 16; template_params = IOUtils.safelyAllocate(template_param_length, MAX_RECORD_LENGTH); } /** * Creates a new comparison operation rule * * @param sheet the sheet * @param formulaText the first formula text * * @return a new comparison operation rule */ public static CFRule12Record create(HSSFSheet sheet, String formulaText) { Ptg[] formula1 = parseFormula(formulaText, sheet); return new CFRule12Record(CONDITION_TYPE_FORMULA, ComparisonOperator.NO_COMPARISON, formula1, null, null); } /** * Creates a new comparison operation rule * * @param sheet the sheet * @param comparisonOperation the comparison operation * @param formulaText1 the first formula text * @param formulaText2 the second formula text * * @return a new comparison operation rule */ public static CFRule12Record create(HSSFSheet sheet, byte comparisonOperation, String formulaText1, String formulaText2) { Ptg[] formula1 = parseFormula(formulaText1, sheet); Ptg[] formula2 = parseFormula(formulaText2, sheet); return new CFRule12Record(CONDITION_TYPE_CELL_VALUE_IS, comparisonOperation, formula1, formula2, null); } /** * Creates a new comparison operation rule * * @param sheet the sheet * @param comparisonOperation the comparison operation * @param formulaText1 the first formula text * @param formulaText2 the second formula text * @param formulaTextScale the scale to apply for the comparison * * @return a new comparison operation rule */ public static CFRule12Record create(HSSFSheet sheet, byte comparisonOperation, String formulaText1, String formulaText2, String formulaTextScale) { Ptg[] formula1 = parseFormula(formulaText1, sheet); Ptg[] formula2 = parseFormula(formulaText2, sheet); Ptg[] formula3 = parseFormula(formulaTextScale, sheet); return new CFRule12Record(CONDITION_TYPE_CELL_VALUE_IS, comparisonOperation, formula1, formula2, formula3); } /** * Creates a new Data Bar formatting * * @param sheet the sheet * @param color the data bar color * * @return a new Data Bar formatting */ public static CFRule12Record create(HSSFSheet sheet, ExtendedColor color) { CFRule12Record r = new CFRule12Record(CONDITION_TYPE_DATA_BAR, ComparisonOperator.NO_COMPARISON); DataBarFormatting dbf = r.createDataBarFormatting(); dbf.setColor(color); dbf.setPercentMin((byte)0); dbf.setPercentMax((byte)100); DataBarThreshold min = new DataBarThreshold(); min.setType(RangeType.MIN.id); dbf.setThresholdMin(min); DataBarThreshold max = new DataBarThreshold(); max.setType(RangeType.MAX.id); dbf.setThresholdMax(max); return r; } /** * Creates a new Icon Set / Multi-State formatting * * @param sheet the sheet * @param iconSet the icon set * * @return a new Icon Set / Multi-State formatting */ public static CFRule12Record create(HSSFSheet sheet, IconSet iconSet) { Threshold[] ts = new Threshold[iconSet.num]; for (int i=0; i





© 2015 - 2024 Weber Informatics LLC | Privacy Policy