コード例 #1
0
ファイル: FilePassRecord.cs プロジェクト: xewn/Npoi.Core
 private static byte[] Read(RecordInputStream in1, int size)
 {
     byte[] result = new byte[size];
     in1.ReadFully(result);
     return(result);
 }
コード例 #2
0
        /**
         * Constructs a FnGroupCount record and Sets its fields appropriately.
         * @param in the RecordInputstream to Read the record from
         */

        public FnGroupCountRecord(RecordInputStream in1)
        {
            field_1_count = in1.ReadShort();
        }
コード例 #3
0
            public StreamEncryptionInfo(RecordInputStream rs, List <Record> outputRecs)
            {
                Record rec;

                rs.NextRecord();
                int recSize = 4 + rs.Remaining;

                rec = RecordFactory.CreateSingleRecord(rs);
                outputRecs.Add(rec);
                FilePassRecord fpr = null;

                if (rec is BOFRecord)
                {
                    _hasBOFRecord = true;
                    // Fetch the next record, and see if it indicates whether
                    //  the document is encrypted or not
                    if (rs.HasNextRecord)
                    {
                        rs.NextRecord();
                        rec      = RecordFactory.CreateSingleRecord(rs);
                        recSize += rec.RecordSize;
                        outputRecs.Add(rec);
                        // Encrypted is normally BOF then FILEPASS
                        // May sometimes be BOF, WRITEPROTECT, FILEPASS
                        if (rec is WriteProtectRecord && rs.HasNextRecord)
                        {
                            rs.NextRecord();
                            rec      = RecordFactory.CreateSingleRecord(rs);
                            recSize += rec.RecordSize;
                            outputRecs.Add(rec);
                        }
                        // If it's a FILEPASS, track it specifically but
                        //  don't include it in the main stream
                        if (rec is FilePassRecord)
                        {
                            fpr = (FilePassRecord)rec;
                            outputRecs.RemoveAt(outputRecs.Count - 1);
                            // TODO - add fpr not Added to outPutRecs
                            rec = outputRecs[0];
                        }
                        else
                        {
                            // workbook not encrypted (typical case)
                            if (rec is EOFRecord)
                            {
                                // A workbook stream is never empty, so crash instead
                                // of trying to keep track of nesting level
                                throw new InvalidOperationException("Nothing between BOF and EOF");
                            }
                        }
                    }
                }
                else
                {
                    // Invalid in a normal workbook stream.
                    // However, some test cases work on sub-sections of
                    // the workbook stream that do not begin with BOF
                    _hasBOFRecord = false;
                }
                _InitialRecordsSize = recSize;
                _filePassRec        = fpr;
                _lastRecord         = rec;
            }
コード例 #4
0
        /**
         * Constructs a PasswordRev4 (PROT4REVPASS) record and Sets its fields appropriately.
         * @param in the RecordInputstream to Read the record from
         */

        public PasswordRev4Record(RecordInputStream in1)
        {
            field_1_password = in1.ReadShort();
        }
コード例 #5
0
        /**
         * Constructs a RightMargin record and Sets its fields appropriately.     *     * @param id    id must be 0x27 or an exception     *              will be throw upon validation     * @param size  size the size of the data area of the record     * @param data  data of the record (should not contain sid/len)
         */

        public RightMarginRecord(RecordInputStream in1)
        {
            field_1_margin = in1.ReadDouble();
        }
コード例 #6
0
        /**
         * Constructs a Delta record and Sets its fields appropriately.
         * @param in the RecordInputstream to Read the record from
         */

        public DeltaRecord(RecordInputStream in1)
        {
            field_1_max_change = in1.ReadDouble();
        }
コード例 #7
0
 /**
  * Constructs a Extern Sheet Sub Record record and Sets its fields appropriately.
  *
  * @param in the RecordInputstream to Read the record from
  */
 public ExternSheetSubRecord(RecordInputStream in1)
 {
     field_1_index_to_supbook             = in1.ReadShort();
     field_2_index_to_first_supbook_sheet = in1.ReadShort();
     field_3_index_to_last_supbook_sheet  = in1.ReadShort();
 }
コード例 #8
0
        /**
         * Constructs a BackupRecord and Sets its fields appropriately
         * @param in the RecordInputstream to Read the record from
         */

        public BackupRecord(RecordInputStream in1)
        {
            field_1_backup = in1.ReadShort();
        }
コード例 #9
0
ファイル: HeaderRecord.cs プロジェクト: ruo2012/Npoi.Core
        /**
         * Constructs an Header record and Sets its fields appropriately.
         * @param in the RecordInputstream to Read the record from
         */

        public HeaderRecord(RecordInputStream in1) : base(in1)
        {
        }
コード例 #10
0
ファイル: ExtSSTInfoSubRecord.cs プロジェクト: xewn/Npoi.Core
 public InfoSubRecord(RecordInputStream in1)
 {
     field_1_stream_pos        = in1.ReadInt();
     field_2_bucket_sst_offset = in1.ReadShort();
     field_3_zero = in1.ReadShort();
 }
コード例 #11
0
 public DrawingSelectionRecord(RecordInputStream in1)
     : base(in1)
 {
 }
コード例 #12
0
        /**
         * Constructs a ProtectionRev4 record and Sets its fields appropriately.
         * @param in the RecordInputstream to Read the record from
         */

        public ProtectionRev4Record(RecordInputStream in1) :
            this(in1.ReadShort())
        {
        }
コード例 #13
0
        /**
         * Constructs a PrintGridlines record and Sets its fields appropriately.
         * @param in the RecordInputstream to Read the record from
         */

        public PrintGridlinesRecord(RecordInputStream in1)
        {
            field_1_print_gridlines = in1.ReadShort();
        }
コード例 #14
0
ファイル: MulRKRecord.cs プロジェクト: ruo2012/Npoi.Core
 private RkRec(RecordInputStream in1)
 {
     xf = in1.ReadShort();
     rk = in1.ReadInt();
 }
コード例 #15
0
        /**
         * Constructs a Precision record and Sets its fields appropriately.
         * @param in the RecordInputstream to Read the record from
         */

        public PrecisionRecord(RecordInputStream in1)
        {
            field_1_precision = in1.ReadShort();
        }
コード例 #16
0
        /**
         * Constructs a SCL record and Sets its fields appropriately.
         *
         * @param in the RecordInputstream to Read the record from
         */

        public SCLRecord(RecordInputStream in1)
        {
            field_1_numerator   = in1.ReadShort();
            field_2_denominator = in1.ReadShort();
        }
コード例 #17
0
ファイル: RowDataRecord.cs プロジェクト: ruo2012/Npoi.Core
 public RowDataRecord(RecordInputStream in1)
 {
     _rawData = in1.ReadRemainder();
 }
コード例 #18
0
ファイル: TextObjectRecord.cs プロジェクト: xewn/Npoi.Core
        public TextObjectRecord(RecordInputStream in1)
        {
            field_1_options         = in1.ReadUShort();
            field_2_textOrientation = in1.ReadUShort();
            field_3_reserved4       = in1.ReadUShort();
            field_4_reserved5       = in1.ReadUShort();
            field_5_reserved6       = in1.ReadUShort();
            int field_6_textLength           = in1.ReadUShort();
            int field_7_formattingDataLength = in1.ReadUShort();

            field_8_reserved7 = in1.ReadInt();

            if (in1.Remaining > 0)
            {
                // Text Objects can have simple reference formulas
                // (This bit not mentioned in the MS document)
                if (in1.Remaining < 11)
                {
                    throw new RecordFormatException("Not enough remaining data for a link formula");
                }
                int formulaSize = in1.ReadUShort();
                _unknownPreFormulaInt = in1.ReadInt();
                Ptg[] ptgs = Ptg.ReadTokens(formulaSize, in1);
                if (ptgs.Length != 1)
                {
                    throw new RecordFormatException("Read " + ptgs.Length
                                                    + " tokens but expected exactly 1");
                }
                _linkRefPtg = (OperandPtg)ptgs[0];
                if (in1.Remaining > 0)
                {
                    _unknownPostFormulaByte = (byte)in1.ReadByte();
                }
                else
                {
                    _unknownPostFormulaByte = null;
                }
            }
            else
            {
                _linkRefPtg = null;
            }
            if (in1.Remaining > 0)
            {
                throw new RecordFormatException("Unused " + in1.Remaining + " bytes at end of record");
            }

            String text;

            if (field_6_textLength > 0)
            {
                text = ReadRawString(in1, field_6_textLength);
            }
            else
            {
                text = "";
            }
            _text = new HSSFRichTextString(text);

            if (field_7_formattingDataLength > 0)
            {
                ProcessFontRuns(in1, _text, field_7_formattingDataLength);
            }
        }
コード例 #19
0
 /// <summary>
 /// Constructs a DefaultRowHeight record and Sets its fields appropriately.
 /// </summary>
 /// <param name="in1">the RecordInputstream to Read the record from</param>
 public DefaultRowHeightRecord(RecordInputStream in1)
 {
     field_1_option_flags = in1.ReadShort();
     field_2_row_height   = in1.ReadShort();
 }
コード例 #20
0
ファイル: GridsetRecord.cs プロジェクト: xewn/Npoi.Core
        /**
         * Constructs a GridSet record and Sets its fields appropriately.
         * @param in the RecordInputstream to Read the record from
         */

        public GridsetRecord(RecordInputStream in1)
        {
            field_1_gridset_flag = in1.ReadShort();
        }
コード例 #21
0
 /**
  * @param in the RecordInputstream to Read the record from
  */
 public RefSubRecord(RecordInputStream in1)
     : this(in1.ReadShort(), in1.ReadShort(), in1.ReadShort())
 {
 }
コード例 #22
0
 /**
  * Constructs a Units record and Sets its fields appropriately.
  *
  * @param in the RecordInputstream to Read the record from
  */
 public UnitsRecord(RecordInputStream in1)
 {
     field_1_units = in1.ReadShort();
 }
コード例 #23
0
        /**
         * Constructs a CalcCountRecord and Sets its fields appropriately
         * @param in the RecordInputstream to Read the record from
         *
         */

        public CalcCountRecord(RecordInputStream in1)
        {
            field_1_iterations = in1.ReadShort();
        }
コード例 #24
0
ファイル: HyperlinkRecord.cs プロジェクト: ruo2012/Npoi.Core
        /**
         * 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
                        // but some files has 4
                        int usKeyValue = in1.ReadUShort();
                        _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()));
            }
        }
コード例 #25
0
ファイル: VCenterRecord.cs プロジェクト: xewn/Npoi.Core
        /**
         * Constructs a VCENTER record and Sets its fields appropriately.
         * @param in the RecordInputstream to Read the record from
         */

        public VCenterRecord(RecordInputStream in1)
        {
            field_1_vcenter = in1.ReadShort();
        }
コード例 #26
0
 public DrawingGroupRecord(RecordInputStream in1)
     : base(in1)
 {
 }
コード例 #27
0
ファイル: FooterRecord.cs プロジェクト: ruo2012/Npoi.Core
 /// <summary>
 /// Initializes a new instance of the <see cref="FooterRecord"/> class.
 /// </summary>
 /// <param name="in1">the RecordInputstream to Read the record from</param>
 public FooterRecord(RecordInputStream in1) : base(in1)
 {
 }
コード例 #28
0
ファイル: NumberRecord.cs プロジェクト: ruo2012/Npoi.Core
        /**
         * Constructs a Number record and Sets its fields appropriately.
         *
         * @param in the RecordInputstream to Read the record from
         */

        public NumberRecord(RecordInputStream in1) : base(in1)
        {
            field_4_value = in1.ReadDouble();
        }
コード例 #29
0
        /**
         * Constructs a WindowProtect record and Sets its fields appropriately.
         * @param in the RecordInputstream to Read the record from
         */

        public WindowProtectRecord(RecordInputStream in1)
            : this(in1.ReadUShort())
        {
        }
コード例 #30
0
ファイル: LabelSSTRecord.cs プロジェクト: ruo2012/Npoi.Core
        /**
         * Constructs an LabelSST record and Sets its fields appropriately.
         * @param in the RecordInputstream to Read the record from
         */

        public LabelSSTRecord(RecordInputStream in1)
            : base(in1)
        {
            field_4_sst_index = in1.ReadInt();
        }