cfrulerecord.java

来自「EXCEL read and write」· Java 代码 · 共 594 行 · 第 1/2 页

JAVA
594
字号
/* ====================================================================   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 org.apache.poi.hssf.model.HSSFFormulaParser;import org.apache.poi.hssf.record.cf.BorderFormatting;import org.apache.poi.hssf.record.cf.FontFormatting;import org.apache.poi.hssf.record.cf.PatternFormatting;import org.apache.poi.hssf.record.formula.Ptg;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.util.BitField;import org.apache.poi.util.BitFieldFactory;import org.apache.poi.util.LittleEndian;/** * Conditional Formatting Rule Record. * @author Dmitriy Kumshayev */public final class CFRuleRecord extends Record {	public static final short sid = 0x01B1;	public static final class ComparisonOperator {		public static final byte NO_COMPARISON = 0;		public static final byte BETWEEN       = 1;		public static final byte NOT_BETWEEN   = 2;		public static final byte EQUAL         = 3;		public static final byte NOT_EQUAL     = 4;		public static final byte GT            = 5;		public static final byte LT            = 6;		public static final byte GE            = 7;		public static final byte LE            = 8;	}	private byte  field_1_condition_type;	public static final byte CONDITION_TYPE_CELL_VALUE_IS = 1;	public static final byte CONDITION_TYPE_FORMULA = 2;	private byte  field_2_comparison_operator;	private int   field_5_options;	private static final BitField modificationBits = bf(0x003FFFFF); // Bits: font,align,bord,patt,prot	private static final BitField alignHor      = bf(0x00000001); // 0 = Horizontal alignment modified	private static final BitField alignVer      = bf(0x00000002); // 0 = Vertical alignment modified	private static final BitField alignWrap     = bf(0x00000004); // 0 = Text wrapped flag modified	private static final BitField alignRot      = bf(0x00000008); // 0 = Text rotation modified	private static final BitField alignJustLast = bf(0x00000010); // 0 = Justify last line flag modified	private static final BitField alignIndent   = bf(0x00000020); // 0 = Indentation modified	private static final BitField alignShrin    = bf(0x00000040); // 0 = Shrink to fit flag modified	private static final BitField notUsed1      = bf(0x00000080); // Always 1	private static final BitField protLocked    = bf(0x00000100); // 0 = Cell locked flag modified	private static final BitField protHidden    = bf(0x00000200); // 0 = Cell hidden flag modified	private static final BitField bordLeft      = bf(0x00000400); // 0 = Left border style and colour modified	private static final BitField bordRight     = bf(0x00000800); // 0 = Right border style and colour modified	private static final BitField bordTop       = bf(0x00001000); // 0 = Top border style and colour modified	private static final BitField bordBot       = bf(0x00002000); // 0 = Bottom border style and colour modified	private static final BitField bordTlBr      = bf(0x00004000); // 0 = Top-left to bottom-right border flag modified	private static final BitField bordBlTr      = bf(0x00008000); // 0 = Bottom-left to top-right border flag modified	private static final BitField pattStyle     = bf(0x00010000); // 0 = Pattern style modified	private static final BitField pattCol       = bf(0x00020000); // 0 = Pattern colour modified	private static final BitField pattBgCol     = bf(0x00040000); // 0 = Pattern background colour modified	private static final BitField notUsed2      = bf(0x00380000); // Always 111	private static final BitField undocumented  = bf(0x03C00000); // Undocumented bits	private static final BitField fmtBlockBits  = bf(0x7C000000); // Bits: font,align,bord,patt,prot	private static final BitField font          = bf(0x04000000); // 1 = Record contains font formatting block	private static final BitField align         = bf(0x08000000); // 1 = Record contains alignment formatting block	private static final BitField bord          = bf(0x10000000); // 1 = Record contains border formatting block	private static final BitField patt          = bf(0x20000000); // 1 = Record contains pattern formatting block	private static final BitField prot          = bf(0x40000000); // 1 = Record contains protection formatting block	private static final BitField alignTextDir  = bf(0x80000000); // 0 = Text direction modified	private static BitField bf(int i) {		return BitFieldFactory.getInstance(i);	}	private short field_6_not_used;	private FontFormatting fontFormatting;	private byte  field_8_align_text_break;	private byte  field_9_align_text_rotation_angle;	private short field_10_align_indentation;	private short field_11_relative_indentation;	private short field_12_not_used;		private BorderFormatting borderFormatting;	private PatternFormatting patternFormatting;		private Ptg[] field_17_formula1;	private Ptg[] field_18_formula2;		/** Creates new CFRuleRecord */	private CFRuleRecord(byte conditionType, byte comparisonOperation)	{		field_1_condition_type=conditionType;		field_2_comparison_operator=comparisonOperation;		// Set modification flags to 1: by default options are not modified		field_5_options = modificationBits.setValue(field_5_options, -1);		// Set formatting block flags to 0 (no formatting blocks)		field_5_options = fmtBlockBits.setValue(field_5_options, 0);		field_5_options = undocumented.clear(field_5_options);		field_6_not_used = (short)0x8002; // Excel seems to write this value, but it doesn't seem to care what it reads		fontFormatting=null;		field_8_align_text_break = 0;		field_9_align_text_rotation_angle = 0;		field_10_align_indentation = 0;		field_11_relative_indentation = 0;		field_12_not_used = 0;		borderFormatting=null;		patternFormatting=null;		field_17_formula1=null;		field_18_formula2=null;	}		private CFRuleRecord(byte conditionType, byte comparisonOperation, Ptg[] formula1, Ptg[] formula2) {		this(conditionType, comparisonOperation); 		field_1_condition_type = CONDITION_TYPE_CELL_VALUE_IS;		field_2_comparison_operator = comparisonOperation;		field_17_formula1 = formula1;		field_18_formula2 = formula2;	}	/**	 * Creates a new comparison operation rule	 */	public static CFRuleRecord create(HSSFWorkbook workbook, String formulaText) {		Ptg[] formula1 = parseFormula(formulaText, workbook);		return new CFRuleRecord(CONDITION_TYPE_FORMULA, ComparisonOperator.NO_COMPARISON,				formula1, null);	}	/**	 * Creates a new comparison operation rule	 */	public static CFRuleRecord create(HSSFWorkbook workbook, byte comparisonOperation,			String formulaText1, String formulaText2) {		Ptg[] formula1 = parseFormula(formulaText1, workbook);		Ptg[] formula2 = parseFormula(formulaText2, workbook);		return new CFRuleRecord(CONDITION_TYPE_CELL_VALUE_IS, comparisonOperation, formula1, formula2);	}	public CFRuleRecord(RecordInputStream in) {		field_1_condition_type = in.readByte();		field_2_comparison_operator = in.readByte();		int field_3_formula1_len = in.readUShort();		int field_4_formula2_len = in.readUShort();		field_5_options = in.readInt();		field_6_not_used = in.readShort();		if (containsFontFormattingBlock()) {			fontFormatting = new FontFormatting(in);		}		if (containsBorderFormattingBlock()) {			borderFormatting = new BorderFormatting(in);		}		if (containsPatternFormattingBlock()) {			patternFormatting = new PatternFormatting(in);		}		if (field_3_formula1_len > 0) {			field_17_formula1 = Ptg.readTokens(field_3_formula1_len, in);		}		if (field_4_formula2_len > 0) {			field_18_formula2 = Ptg.readTokens(field_4_formula2_len, in);		}	}	public byte getConditionType()	{		return field_1_condition_type;	}	public boolean containsFontFormattingBlock()	{		return getOptionFlag(font);	}	public void setFontFormatting(FontFormatting fontFormatting)	{		this.fontFormatting = fontFormatting;		setOptionFlag(fontFormatting != null, font);	}	public FontFormatting getFontFormatting()	{		if( containsFontFormattingBlock())		{			return fontFormatting;		}		else		{			return null;		}	}		public boolean containsAlignFormattingBlock()	{		return getOptionFlag(align);	}	public void setAlignFormattingUnchanged()	{		setOptionFlag(false,align);	}		public boolean containsBorderFormattingBlock()	{		return getOptionFlag(bord);	}	public void setBorderFormatting(BorderFormatting borderFormatting)	{		this.borderFormatting = borderFormatting;		setOptionFlag(borderFormatting != null, bord);	}	public BorderFormatting getBorderFormatting()	{		if( containsBorderFormattingBlock())		{			return borderFormatting;		}		else		{			return null;		}	}		public boolean containsPatternFormattingBlock()	{		return getOptionFlag(patt);	}	public void setPatternFormatting(PatternFormatting patternFormatting)	{		this.patternFormatting = patternFormatting;		setOptionFlag(patternFormatting!=null, patt);	}	public PatternFormatting getPatternFormatting()	{		if( containsPatternFormattingBlock())		{			return patternFormatting;		}		else		{			return null;		}	}		public boolean containsProtectionFormattingBlock()	{		return getOptionFlag(prot);	}	public void setProtectionFormattingUnchanged()	{		setOptionFlag(false,prot);	}		public void setComparisonOperation(byte operation)	{		field_2_comparison_operator = operation;	}	public byte getComparisonOperation()	{		return field_2_comparison_operator;	}		/**	 * get the option flags	 *	 * @return bit mask	 */	public int getOptions()	{		return field_5_options;	}		private boolean isModified(BitField field)	{

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?