namerecord.java

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

JAVA
677
字号
	 * @return number of bytes written	 */	public int serialize( int offset, byte[] data ) {		int field_7_length_custom_menu = field_14_custom_menu_text.length();		int field_8_length_description_text = field_15_description_text.length();		int field_9_length_help_topic_text = field_16_help_topic_text.length();		int field_10_length_status_bar_text = field_17_status_bar_text.length();		int rawNameSize = getNameRawSize();				int formulaTotalSize = Ptg.getEncodedSize(field_13_name_definition);		int dataSize = 15 // 4 shorts + 7 bytes			+ rawNameSize			+ field_7_length_custom_menu			+ field_8_length_description_text			+ field_9_length_help_topic_text			+ field_10_length_status_bar_text			+ formulaTotalSize;				LittleEndian.putShort(data, 0 + offset, sid);		LittleEndian.putUShort(data, 2 + offset, dataSize);		// size defined below		LittleEndian.putShort(data, 4 + offset, getOptionFlag());		LittleEndian.putByte(data, 6 + offset, getKeyboardShortcut());		LittleEndian.putByte(data, 7 + offset, getNameTextLength());		// Note -		LittleEndian.putUShort(data, 8 + offset, Ptg.getEncodedSizeWithoutArrayData(field_13_name_definition));		LittleEndian.putUShort(data, 10 + offset, field_5_externSheetIndex_plus1);		LittleEndian.putUShort(data, 12 + offset, field_6_sheetNumber);		LittleEndian.putByte(data, 14 + offset, field_7_length_custom_menu);		LittleEndian.putByte(data, 15 + offset, field_8_length_description_text);		LittleEndian.putByte(data, 16 + offset, field_9_length_help_topic_text);		LittleEndian.putByte(data, 17 + offset, field_10_length_status_bar_text);		LittleEndian.putByte(data, 18 + offset, field_11_nameIsMultibyte ? 1 : 0);		int pos = 19 + offset;		if (isBuiltInName()) {			//can send the builtin name directly in			LittleEndian.putByte(data, pos,  field_12_built_in_code);		} else {			String nameText = field_12_name_text;			if (field_11_nameIsMultibyte) {    			StringUtil.putUnicodeLE(nameText, data, pos);     		} else {    			StringUtil.putCompressedUnicode(nameText, data, pos);    		}		}		pos += rawNameSize;		Ptg.serializePtgs(field_13_name_definition,  data, pos);		pos += formulaTotalSize;				StringUtil.putCompressedUnicode( getCustomMenuText(), data, pos);		pos += field_7_length_custom_menu;		StringUtil.putCompressedUnicode( getDescriptionText(), data, pos);		pos += field_8_length_description_text;		StringUtil.putCompressedUnicode( getHelpTopicText(), data, pos);		pos += field_9_length_help_topic_text;		StringUtil.putCompressedUnicode( getStatusBarText(), data, pos);		return 4 + dataSize;	}	private int getNameRawSize() {		if (isBuiltInName()) {			return 1;		} 		int nChars = field_12_name_text.length();		if(field_11_nameIsMultibyte) {			return 2 * nChars;		} 		return nChars;	}	public int getRecordSize(){		return 4 // sid + size			+ 15 // 4 shorts + 7 bytes			+ getNameRawSize()			+ field_14_custom_menu_text.length()			+ field_15_description_text.length()			+ field_16_help_topic_text.length()			+ field_17_status_bar_text.length()			+ Ptg.getEncodedSize(field_13_name_definition);	}	/** gets the extern sheet number	 * @return extern sheet index	 */	public int getExternSheetNumber(){		if (field_13_name_definition.length < 1) {			return 0;		}		Ptg ptg = field_13_name_definition[0];		if (ptg.getClass() == Area3DPtg.class){			return ((Area3DPtg) ptg).getExternSheetIndex();		}		if (ptg.getClass() == Ref3DPtg.class){			return ((Ref3DPtg) ptg).getExternSheetIndex();		}		return 0;	}	/** sets the extern sheet number	 * @param externSheetNumber extern sheet number	 */	public void setExternSheetNumber(short externSheetNumber){		Ptg ptg;		if (field_13_name_definition.length < 1){			ptg = createNewPtg();			field_13_name_definition = new Ptg[] {				ptg,			};		} else {			ptg = field_13_name_definition[0];		}		if (ptg.getClass() == Area3DPtg.class){			((Area3DPtg) ptg).setExternSheetIndex(externSheetNumber);		} else if (ptg.getClass() == Ref3DPtg.class){			((Ref3DPtg) ptg).setExternSheetIndex(externSheetNumber);		}	}	private static Ptg createNewPtg(){		return new Area3DPtg("A1:A1", 0); // TODO - change to not be partially initialised	}	/** gets the reference , the area only (range)	 * @return area reference	 */	public String getAreaReference(HSSFWorkbook book){		return HSSFFormulaParser.toFormulaString(book, field_13_name_definition);	}	/** sets the reference , the area only (range)	 * @param ref area reference	 */	public void setAreaReference(String ref){		//Trying to find if what ptg do we need		RangeAddress ra = new RangeAddress(ref);		Ptg oldPtg;		if (field_13_name_definition.length < 1){			oldPtg = createNewPtg();		} else {			//Trying to find extern sheet index			oldPtg = field_13_name_definition[0];		}		List temp = new ArrayList();		int externSheetIndex = 0;		if (oldPtg.getClass() == Area3DPtg.class){			externSheetIndex =  ((Area3DPtg) oldPtg).getExternSheetIndex();		} else if (oldPtg.getClass() == Ref3DPtg.class){			externSheetIndex =  ((Ref3DPtg) oldPtg).getExternSheetIndex();		}		if (ra.hasRange()) {			// Is it contiguous or not?			AreaReference[] refs = AreaReference.generateContiguous(ref);			// Add the area reference(s)			for(int i=0; i<refs.length; i++) {				Ptg ptg = new Area3DPtg(refs[i].formatAsString(), externSheetIndex);				temp.add(ptg);			}			// And then a union if we had more than one area			if(refs.length > 1) {				Ptg ptg = UnionPtg.instance;				temp.add(ptg);			}		} else {			Ref3DPtg ptg = new Ref3DPtg(ra.getFromCell(), externSheetIndex);			temp.add(ptg);		}		Ptg[] ptgs = new Ptg[temp.size()];		temp.toArray(ptgs);		field_13_name_definition = ptgs;	}	/**	 * called by the constructor, should set class level fields.  Should throw	 * runtime exception for bad/icomplete data.	 *	 * @param in the RecordInputstream to read the record from	 */	public NameRecord(RecordInputStream in) {		field_1_option_flag                 = in.readShort();		field_2_keyboard_shortcut           = in.readByte();		int field_3_length_name_text        = in.readByte();		int field_4_length_name_definition  = in.readShort();		field_5_externSheetIndex_plus1      = in.readShort();		field_6_sheetNumber                 = in.readUShort();		int field_7_length_custom_menu      = in.readUByte();		int field_8_length_description_text = in.readUByte();		int field_9_length_help_topic_text  = in.readUByte();		int field_10_length_status_bar_text = in.readUByte();		//store the name in byte form if it's a built-in name		field_11_nameIsMultibyte = (in.readByte() != 0);		if (isBuiltInName()) {			field_12_built_in_code = in.readByte();		} else {			if (field_11_nameIsMultibyte) {				field_12_name_text = in.readUnicodeLEString(field_3_length_name_text);			} else {				field_12_name_text = in.readCompressedUnicode(field_3_length_name_text);			}		}		field_13_name_definition = Ptg.readTokens(field_4_length_name_definition, in);		//Who says that this can only ever be compressed unicode???		field_14_custom_menu_text = in.readCompressedUnicode(field_7_length_custom_menu);		field_15_description_text = in.readCompressedUnicode(field_8_length_description_text);		field_16_help_topic_text  = in.readCompressedUnicode(field_9_length_help_topic_text);		field_17_status_bar_text  = in.readCompressedUnicode(field_10_length_status_bar_text);	}	/**	 * return the non static version of the id for this record.	 */	public short getSid() {		return sid;	}	/*	  20 00	  00	  01	  1A 00 // sz = 0x1A = 26	  00 00	  01 00	  00	  00	  00	  00	  00 // unicode flag	  07 // name	  29 17 00 3B 00 00 00 00 FF FF 00 00 02 00 3B 00 //{ 26	  00 07 00 07 00 00 00 FF 00 10                   //  }	  20 00	  00	  01	  0B 00 // sz = 0xB = 11	  00 00	  01 00	  00	  00	  00	  00	  00 // unicode flag	  07 // name	  3B 00 00 07 00 07 00 00 00 FF 00   // { 11 }  */	/*	  18, 00,	  1B, 00,	  20, 00,	  00,	  01,	  0B, 00,	  00,	  00,	  00,	  00,	  00,	  07,	  3B 00 00 07 00 07 00 00 00 FF 00 ]	 */	public String toString() {		StringBuffer sb = new StringBuffer();		sb.append("[NAME]\n");		sb.append("    .option flags           = ").append(HexDump.shortToHex(field_1_option_flag)).append("\n");		sb.append("    .keyboard shortcut      = ").append(HexDump.byteToHex(field_2_keyboard_shortcut)).append("\n");		sb.append("    .length of the name     = ").append(getNameTextLength()).append("\n");		sb.append("    .extSheetIx(1-based, 0=Global)= ").append( field_5_externSheetIndex_plus1 ).append("\n");		sb.append("    .sheetTabIx             = ").append(field_6_sheetNumber ).append("\n");		sb.append("    .Menu text length       = ").append(field_14_custom_menu_text.length()).append("\n");		sb.append("    .Description text length= ").append(field_15_description_text.length()).append("\n");		sb.append("    .Help topic text length = ").append(field_16_help_topic_text.length()).append("\n");		sb.append("    .Status bar text length = ").append(field_17_status_bar_text.length()).append("\n");		sb.append("    .NameIsMultibyte        = ").append(field_11_nameIsMultibyte).append("\n");		sb.append("    .Name (Unicode text)    = ").append( getNameText() ).append("\n");		sb.append("    .Formula (nTokens=").append(field_13_name_definition.length).append("):") .append("\n");		for (int i = 0; i < field_13_name_definition.length; i++) {			Ptg ptg = field_13_name_definition[i];			sb.append("       " + ptg.toString()).append(ptg.getRVAType()).append("\n");		}		sb.append("    .Menu text       = ").append(field_14_custom_menu_text).append("\n");		sb.append("    .Description text= ").append(field_15_description_text).append("\n");		sb.append("    .Help topic text = ").append(field_16_help_topic_text).append("\n");		sb.append("    .Status bar text = ").append(field_17_status_bar_text).append("\n");		sb.append("[/NAME]\n");		return sb.toString();	}	/**Creates a human readable name for built in types	 * @return Unknown if the built-in name cannot be translated	 */	private static String translateBuiltInName(byte name)	{		switch (name)		{			case NameRecord.BUILTIN_AUTO_ACTIVATE :     return "Auto_Activate";			case NameRecord.BUILTIN_AUTO_CLOSE :        return "Auto_Close";			case NameRecord.BUILTIN_AUTO_DEACTIVATE :   return "Auto_Deactivate";			case NameRecord.BUILTIN_AUTO_OPEN :         return "Auto_Open";			case NameRecord.BUILTIN_CONSOLIDATE_AREA :  return "Consolidate_Area";			case NameRecord.BUILTIN_CRITERIA :          return "Criteria";			case NameRecord.BUILTIN_DATABASE :          return "Database";			case NameRecord.BUILTIN_DATA_FORM :         return "Data_Form";			case NameRecord.BUILTIN_PRINT_AREA :        return "Print_Area";			case NameRecord.BUILTIN_PRINT_TITLE :       return "Print_Titles";			case NameRecord.BUILTIN_RECORDER :          return "Recorder";			case NameRecord.BUILTIN_SHEET_TITLE :       return "Sheet_Title";			case NameRecord.BUILTIN_FILTER_DB  :        return "_FilterDatabase";		}		return "Unknown";	}}

⌨️ 快捷键说明

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