public TableStylesRecord(RecordInputStream in1) { rt = in1.ReadUShort(); grbitFrt = in1.ReadUShort(); in1.ReadFully(unused); cts = in1.ReadInt(); int cchDefListStyle = in1.ReadUShort(); int cchDefPivotStyle = in1.ReadUShort(); rgchDefListStyle = in1.ReadUnicodeLEString(cchDefListStyle); rgchDefPivotStyle = in1.ReadUnicodeLEString(cchDefPivotStyle); }
/** * Constructs a WriteAccess record and Sets its fields appropriately. * @param in the RecordInputstream to Read the record from */ public WriteAccessRecord(RecordInputStream in1) { if (in1.Remaining > DATA_SIZE) { throw new RecordFormatException("Expected data size (" + DATA_SIZE + ") but got (" + in1.Remaining + ")"); } // The string is always 112 characters (padded with spaces), therefore // this record can not be continued. int nChars = in1.ReadUShort(); int is16BitFlag = in1.ReadUByte(); if (nChars > DATA_SIZE || (is16BitFlag & 0xFE) != 0) { // String header looks wrong (probably missing) // OOO doc says this is optional anyway. // reconstruct data byte[] data = new byte[3 + in1.Remaining]; LittleEndian.PutUShort(data, 0, nChars); LittleEndian.PutByte(data, 2, is16BitFlag); in1.ReadFully(data, 3, data.Length - 3); char[] data1=new char[data.Length]; for (int i = 0; i < data.Length; i++) { data1[i] = (char)data[i]; } String rawValue = new String(data1); Username = rawValue.Trim(); return; } String rawText; if ((is16BitFlag & 0x01) == 0x00) { rawText = StringUtil.ReadCompressedUnicode(in1, nChars); } else { rawText = StringUtil.ReadUnicodeLE(in1, nChars); } field_1_username = rawText.Trim(); // consume padding int padSize = in1.Remaining; while (padSize > 0) { // in some cases this seems to be garbage (non spaces) in1.ReadUByte(); padSize--; } }
public ChartEndBlockRecord(RecordInputStream in1) { rt = in1.ReadShort(); grbitFrt = in1.ReadShort(); iObjectKind = in1.ReadShort(); // Often, but not always has 6 unused bytes at the end if(in1.Available() == 0) { unused = new byte[0]; } else { unused = new byte[6]; in1.ReadFully(unused); } }
public ChartEndObjectRecord(RecordInputStream in1) { rt = in1.ReadShort(); grbitFrt = in1.ReadShort(); iObjectKind = in1.ReadShort(); reserved = new byte[6]; // The spec says that there should be 6 bytes at the // end, which must be there and must be zero // However, sometimes Excel forgets them... reserved = new byte[6]; if (in1.Available() == 0) { // They've gone missing... } else { // Read the reserved bytes in1.ReadFully(reserved); } }
private static byte[] Read(RecordInputStream in1, int size) { byte[] result = new byte[size]; in1.ReadFully(result); return result; }
/** * Read hyperlink from input stream * * @param in the stream to Read from */ public HyperlinkRecord(RecordInputStream in1) { _range = new CellRangeAddress(in1); // 16-byte GUID _guid = new GUID(in1); /* * streamVersion (4 bytes): An unsigned integer that specifies the version number * of the serialization implementation used to save this structure. This value MUST equal 2. */ int streamVersion = in1.ReadInt(); if (streamVersion != 0x00000002) { throw new RecordFormatException("Stream Version must be 0x2 but found " + streamVersion); } _linkOpts = in1.ReadInt(); if ((_linkOpts & HLINK_LABEL) != 0) { int label_len = in1.ReadInt(); _label = in1.ReadUnicodeLEString(label_len); } if ((_linkOpts & HLINK_TARGET_FRAME) != 0) { int len = in1.ReadInt(); _targetFrame = in1.ReadUnicodeLEString(len); } if ((_linkOpts & HLINK_URL) != 0 && (_linkOpts & HLINK_UNC_PATH) != 0) { _moniker = null; int nChars = in1.ReadInt(); _address = in1.ReadUnicodeLEString(nChars); } if ((_linkOpts & HLINK_URL) != 0 && (_linkOpts & HLINK_UNC_PATH) == 0) { _moniker = new GUID(in1); if (URL_MONIKER.Equals(_moniker)) { int length = in1.ReadInt(); /* * The value of <code>length<code> be either the byte size of the url field * (including the terminating NULL character) or the byte size of the url field plus 24. * If the value of this field is set to the byte size of the url field, * then the tail bytes fields are not present. */ int remaining = in1.Remaining; if (length == remaining) { int nChars = length / 2; _address = in1.ReadUnicodeLEString(nChars); } else { int nChars = (length - TAIL_SIZE) / 2; _address = in1.ReadUnicodeLEString(nChars); /* * TODO: make sense of the remaining bytes * According to the spec they consist of: * 1. 16-byte GUID: This field MUST equal * {0xF4815879, 0x1D3B, 0x487F, 0xAF, 0x2C, 0x82, 0x5D, 0xC4, 0x85, 0x27, 0x63} * 2. Serial version, this field MUST equal 0 if present. * 3. URI Flags */ _uninterpretedTail = ReadTail(URL_uninterpretedTail, in1); } } else if (FILE_MONIKER.Equals(_moniker)) { _fileOpts = in1.ReadShort(); int len = in1.ReadInt(); _shortFilename = StringUtil.ReadCompressedUnicode(in1, len); _uninterpretedTail = ReadTail(FILE_uninterpretedTail, in1); int size = in1.ReadInt(); if (size > 0) { int charDataSize = in1.ReadInt(); //From the spec: An optional unsigned integer that MUST be 3 if present int optFlags = in1.ReadUShort(); if (optFlags != 0x0003) { throw new RecordFormatException("Expected 0x3 but found " + optFlags); } _address = StringUtil.ReadUnicodeLE(in1, charDataSize / 2); } else { _address = null; } } else if (STD_MONIKER.Equals(_moniker)) { _fileOpts = in1.ReadShort(); int len = in1.ReadInt(); byte[] path_bytes = new byte[len]; in1.ReadFully(path_bytes); _address = Encoding.UTF8.GetString(path_bytes); } } if ((_linkOpts & HLINK_PLACE) != 0) { int len = in1.ReadInt(); _textMark = in1.ReadUnicodeLEString(len); } if (in1.Remaining > 0) { Console.WriteLine(HexDump.ToHex(in1.ReadRemainder())); } }