Пример #1
0
        public void TestRead()
        {
            String hex =
                    "21 02 25 00 01 00 01 00 01 01 00 00 00 00 00 00 " +
                    "17 00 65 00 00 01 00 02 C0 02 C0 65 00 00 01 00 " +
                    "03 C0 03 C0 04 62 01 07 00";
            byte[] data = HexRead.ReadFromString(hex);
            RecordInputStream in1 = TestcaseRecordInputStream.Create(data);
            ArrayRecord r1 = new ArrayRecord(in1);
            CellRangeAddress8Bit range = r1.Range;
            Assert.AreEqual(1, range.FirstColumn);
            Assert.AreEqual(1, range.LastColumn);
            Assert.AreEqual(1, range.FirstRow);
            Assert.AreEqual(1, range.LastRow);

            Ptg[] ptg = r1.FormulaTokens;
            Assert.AreEqual(FormulaRenderer.ToFormulaString(null, ptg), "MAX(C1:C2-D1:D2)");

            //construct a new ArrayRecord with the same contents as r1
            Ptg[] fmlaPtg = FormulaParser.Parse("MAX(C1:C2-D1:D2)", null, FormulaType.ARRAY, 0);
            ArrayRecord r2 = new ArrayRecord(Formula.Create(fmlaPtg), new CellRangeAddress8Bit(1, 1, 1, 1));
            byte[] ser = r2.Serialize();
            //serialize and check that the data is the same as in r1
            Assert.AreEqual(HexDump.ToHex(data), HexDump.ToHex(ser));


        }
Пример #2
0
 private SharedValueManager(SharedFormulaRecord[] sharedFormulaRecords,
         ArrayRecord[] arrayRecords, TableRecord[] tableRecords)
 {
     _sfrs = sharedFormulaRecords;
     _arrayRecords = arrayRecords;
     _tableRecords = tableRecords;
 }
Пример #3
0
 /**
  * @param recs list of sheet records (possibly contains records for other parts of the Excel file)
  * @param startIx index of first row/cell record for current sheet
  * @param endIx one past index of last row/cell record for current sheet.  It is important 
  * that this code does not inadvertently collect <tt>SharedFormulaRecord</tt>s from any other
  * sheet (which could happen if endIx is chosen poorly).  (see bug 44449) 
  */
 public static SharedValueManager Create(SharedFormulaRecord[] sharedFormulaRecords,
         ArrayRecord[] arrayRecords, TableRecord[] tableRecords)
 {
     if (sharedFormulaRecords.Length + arrayRecords.Length + tableRecords.Length < 1)
     {
         return EMPTY;
     }
     return new SharedValueManager(sharedFormulaRecords, arrayRecords, tableRecords);
 }
Пример #4
0
        public override Object Clone()
        {
            ArrayRecord rec = new ArrayRecord(_formula.Copy(), Range);

            // they both seem unused, but clone them nevertheless to have an exact copy
            rec._options       = _options;
            rec._field3notUsed = _field3notUsed;

            return(rec);
        }
Пример #5
0
        /**
         * Also collects any loose MergeCellRecords and puts them in the supplied
         * mergedCellsTable
         */
        public RowBlocksReader(RecordStream rs)
        {
            ArrayList plainRecords = new ArrayList();
            ArrayList shFrmRecords = new ArrayList();
            ArrayList arrayRecords = new ArrayList();
            ArrayList tableRecords = new ArrayList();
            ArrayList mergeCellRecords = new ArrayList();

            while (!RecordOrderer.IsEndOfRowBlock(rs.PeekNextSid()))
            {
                // End of row/cell records for the current sheet
                // Note - It is important that this code does not inadvertently add any sheet 
                // records from a subsequent sheet.  For example, if SharedFormulaRecords 
                // are taken from the wrong sheet, this could cause bug 44449.
                if (!rs.HasNext())
                {
                    throw new InvalidOperationException("Failed to find end of row/cell records");

                }
                Record rec = rs.GetNext();
                IList dest;
                switch (rec.Sid)
                {
                    case MergeCellsRecord.sid: 
                        dest = mergeCellRecords; 
                        break;
                    case SharedFormulaRecord.sid: 
                        dest = shFrmRecords; 
                        break;
                    case ArrayRecord.sid: 
                        dest = arrayRecords; 
                        break;
                    case TableRecord.sid: 
                        dest = tableRecords; 
                        break;
                    default: dest = plainRecords;
                        break;
                }
                dest.Add(rec);
            }
            SharedFormulaRecord[] sharedFormulaRecs = new SharedFormulaRecord[shFrmRecords.Count];
            ArrayRecord[] arrayRecs = new ArrayRecord[arrayRecords.Count];
            TableRecord[] tableRecs = new TableRecord[tableRecords.Count];
            sharedFormulaRecs = (SharedFormulaRecord[])shFrmRecords.ToArray(typeof(SharedFormulaRecord));
            arrayRecs = (ArrayRecord[])arrayRecords.ToArray(typeof(ArrayRecord));
            tableRecs = (TableRecord[])tableRecords.ToArray(typeof(TableRecord));

            _plainRecords = plainRecords;
            _sfm = SharedValueManager.Create(sharedFormulaRecs, arrayRecs, tableRecs);
            _mergedCellsRecords = new MergeCellsRecord[mergeCellRecords.Count];
            _mergedCellsRecords = (MergeCellsRecord[])mergeCellRecords.ToArray(typeof(MergeCellsRecord));
        }
        public void SetArrayFormula(CellRangeAddress r, Ptg[] ptgs)
        {

            ArrayRecord arr = new ArrayRecord(NPOI.SS.Formula.Formula.Create(ptgs), new CellRangeAddress8Bit(r.FirstRow, r.LastRow, r.FirstColumn, r.LastColumn));
            _sharedValueManager.AddArrayRecord(arr);
        }
Пример #7
0
        public override Object Clone()
        {
            ArrayRecord rec = new ArrayRecord(_formula.Copy(), Range);

            // they both seem unused, but clone them nevertheless to have an exact copy
            rec._options = _options;
            rec._field3notUsed = _field3notUsed;

            return rec;
        }