Example #1
0
        /// <summary>
        /// 生成编号
        /// </summary>
        /// <param name="entitys"></param>
        /// <returns></returns>
        public async Task MakeNumberAsync(params IHaveNumber[] entitys)
        {
            if (entitys.Length == 0)
            {
                return;
            }

            var          typeName = entitys[0].GetType().Name;
            NumberOption opt      = await GetNumberOptionAsync(typeName);

            NumberRecord record = await GetNumberRecordAsync(typeName, opt);

            foreach (var item in entitys)
            {
                /*自增序列号*/
                record.Serial++;
                DateTime?dt = DateTime.Now;
                string   dtTemp = "", serial = (record.Serial + record.PrevSerial).ToString().PadLeft(opt.SerialLength, '0');

                /*取日期字段格式化*/
                if (opt.TaskDate)
                {
                    if (!opt.DateField.IsNullOrWhiteSpace())
                    {
                        dt = (DateTime?)item.GetValue(opt.DateField);
                    }

                    dt ??= DateTime.Now;
                    dtTemp = dt.Value.ToString(opt.FmtDate.ToString());
                }
                item.Number = $"{opt.Prefix}{dtTemp}{serial}{opt.Suffix}";
            }
        }
Example #2
0
        public void TestHeaderFooter_bug46840()
        {
            int          rowIx = 5;
            int          colIx = 6;
            NumberRecord nr    = new NumberRecord();

            nr.Row    = (rowIx);
            nr.Column = ((short)colIx);
            nr.Value  = (3.0);

            NPOI.HSSF.Record.Record[] recs =
            {
                BOFRecord.CreateSheetBOF(),
                new HeaderRecord("&LSales Figures"),
                new FooterRecord("&LJanuary"),
                new HeaderFooterRecord(HexRead.ReadFromString("9C 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C4 60 00 00 00 00 00 00 00 00")),
                new DimensionsRecord(),
                new WindowTwoRecord(),
                new UserSViewBegin(HexRead.ReadFromString("ED 77 3B 86 BC 3F 37 4C A9 58 60 23 43 68 54 4B 01 00 00 00 64 00 00 00 40 00 00 00 02 00 00 00 3D 80 04 00 00 00 00 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 3F FF FF 01 00")),
                new HeaderRecord("&LSales Figures"),
                new FooterRecord("&LJanuary"),
                new HeaderFooterRecord(HexRead.ReadFromString("9C 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C4 60 00 00 00 00 00 00 00 00")),
                new UserSViewEnd(HexRead.ReadFromString("01, 00")),

                EOFRecord.instance,
            };
            RecordStream  rs = new RecordStream(Arrays.AsList(recs), 0);
            InternalSheet sheet;

            try
            {
                sheet = InternalSheet.CreateSheet(rs);
            }
            catch (Exception e)
            {
                if (e.Message.Equals("two Page Settings Blocks found in the same sheet"))
                {
                    throw new AssertionException("Identified bug 46480");
                }
                throw e;
            }

            TestCases.HSSF.UserModel.RecordInspector.RecordCollector rv = new TestCases.HSSF.UserModel.RecordInspector.RecordCollector();
            sheet.VisitContainedRecords(rv, rowIx);
            NPOI.HSSF.Record.Record[] outRecs = rv.Records;
            Assert.AreEqual(13, outRecs.Length);
        }
Example #3
0
        public void TestMissingDims()
        {
            int          rowIx = 5;
            int          colIx = 6;
            NumberRecord nr    = new NumberRecord();

            nr.Row    = (rowIx);
            nr.Column = ((short)colIx);
            nr.Value  = (3.0);

            List <Record> inRecs = new List <Record>();

            inRecs.Add(BOFRecord.CreateSheetBOF());
            inRecs.Add(new RowRecord(rowIx));
            inRecs.Add(nr);
            inRecs.Add(CreateWindow2Record());
            inRecs.Add(EOFRecord.instance);
            InternalSheet sheet;

            try
            {
                sheet = CreateSheet(inRecs);
            }
            catch (Exception e)
            {
                if ("DimensionsRecord was not found".Equals(e.Message))
                {
                    throw new AssertionException("Identified bug 46206");
                }
                throw e;
            }

            RecordInspector.RecordCollector rv = new RecordInspector.RecordCollector();
            sheet.VisitContainedRecords(rv, rowIx);
            Record[] outRecs = rv.Records;
            Assert.AreEqual(8, outRecs.Length);
            DimensionsRecord dims = (DimensionsRecord)outRecs[5];

            Assert.AreEqual(rowIx, dims.FirstRow);
            Assert.AreEqual(rowIx, dims.LastRow);
            Assert.AreEqual(colIx, dims.FirstCol);
            Assert.AreEqual(colIx, dims.LastCol);
        }
Example #4
0
        public void TestLateHeaderFooter_bug46953()
        {
            int          rowIx = 5;
            int          colIx = 6;
            NumberRecord nr    = new NumberRecord();

            nr.Row    = (rowIx);
            nr.Column = ((short)colIx);
            nr.Value  = (3.0);

            NPOI.HSSF.Record.Record[] recs =
            {
                BOFRecord.CreateSheetBOF(),
                new HeaderRecord("&LSales Figures"),
                new FooterRecord("&LJanuary"),
                new DimensionsRecord(),
                new WindowTwoRecord(),
                new HeaderFooterRecord(HexRead.ReadFromString("9C 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C4 60 00 00 00 00 00 00 00 00")),
                EOFRecord.instance,
            };
            RecordStream  rs    = new RecordStream(Arrays.AsList(recs), 0);
            InternalSheet sheet = InternalSheet.CreateSheet(rs);

            RecordInspector.RecordCollector rv = new RecordInspector.RecordCollector();
            sheet.VisitContainedRecords(rv, 0);
            NPOI.HSSF.Record.Record[] outRecs = rv.Records;
            if (outRecs[4] == EOFRecord.instance)
            {
                throw new AssertionException("Identified bug 46953 - EOF incorrectly Appended to PSB");
            }
            Assert.AreEqual(recs.Length + 1, outRecs.Length); // +1 for index record

            Assert.AreEqual(typeof(BOFRecord), outRecs[0].GetType());
            Assert.AreEqual(typeof(IndexRecord), outRecs[1].GetType());
            Assert.AreEqual(typeof(HeaderRecord), outRecs[2].GetType());
            Assert.AreEqual(typeof(FooterRecord), outRecs[3].GetType());
            Assert.AreEqual(typeof(HeaderFooterRecord), outRecs[4].GetType());
            Assert.AreEqual(typeof(DimensionsRecord), outRecs[5].GetType());
            Assert.AreEqual(typeof(WindowTwoRecord), outRecs[6].GetType());
            Assert.AreEqual(typeof(EOFRecord), outRecs[7].GetType());
        }
Example #5
0
        public void TestSpecial()
        {
            short recType = RKRecord.sid;

            byte[] data =
            {
                0, 0, 0, 0, 21, 0, 0, 0, 0, 0
            };
            Record[] record = RecordFactory.CreateRecord(TestcaseRecordInputStream.Create(recType, data));

            Assert.AreEqual(typeof(NumberRecord).Name,
                            record[0].GetType().Name);
            NumberRecord numberRecord = (NumberRecord)record[0];

            Assert.AreEqual(0, numberRecord.Column);
            Assert.AreEqual(18, numberRecord.RecordSize);
            Assert.AreEqual(0, numberRecord.Row);
            Assert.AreEqual(515, numberRecord.Sid);
            Assert.AreEqual(0.0, numberRecord.Value, 0.001);
            Assert.AreEqual(21, numberRecord.XFIndex);
        }
Example #6
0
            /// <summary>
            /// Process an HSSF Record. Called when a record occurs in an HSSF file.
            /// </summary>
            /// <param name="record"></param>
            public void ProcessRecord(Record record)
            {
                String thisText = null;
                int    thisRow  = -1;

                switch (record.Sid)
                {
                case BoundSheetRecord.sid:
                    BoundSheetRecord sr = (BoundSheetRecord)record;
                    sheetNames.Add(sr.Sheetname);
                    break;

                case BOFRecord.sid:
                    BOFRecord bof = (BOFRecord)record;
                    if (bof.Type == BOFRecordType.Worksheet)
                    {
                        sheetNum++;
                        rowNum = -1;

                        if (includeSheetNames)
                        {
                            if (text.Length > 0)
                            {
                                text.Append("\n");
                            }
                            text.Append(sheetNames[sheetNum]);
                        }
                    }
                    break;

                case SSTRecord.sid:
                    sstRecord = (SSTRecord)record;
                    break;

                case FormulaRecord.sid:
                    FormulaRecord frec = (FormulaRecord)record;
                    thisRow = frec.Row;

                    if (formulasNotResults)
                    {
                        thisText = HSSFFormulaParser.ToFormulaString((HSSFWorkbook)null, frec.ParsedExpression);
                    }
                    else
                    {
                        if (frec.HasCachedResultString)
                        {
                            // Formula result is a string
                            // This is stored in the next record
                            outputNextStringValue = true;
                            nextRow = frec.Row;
                        }
                        else
                        {
                            thisText = FormatNumberDateCell(frec, frec.Value);
                        }
                    }
                    break;

                case StringRecord.sid:
                    if (outputNextStringValue)
                    {
                        // String for formula
                        StringRecord srec = (StringRecord)record;
                        thisText = srec.String;
                        thisRow  = nextRow;
                        outputNextStringValue = false;
                    }
                    break;

                case LabelRecord.sid:
                    LabelRecord lrec = (LabelRecord)record;
                    thisRow  = lrec.Row;
                    thisText = lrec.Value;
                    break;

                case LabelSSTRecord.sid:
                    LabelSSTRecord lsrec = (LabelSSTRecord)record;
                    thisRow = lsrec.Row;
                    if (sstRecord == null)
                    {
                        throw new Exception("No SST record found");
                    }
                    thisText = sstRecord.GetString(lsrec.SSTIndex).ToString();
                    break;

                case NoteRecord.sid:
                    NoteRecord nrec = (NoteRecord)record;
                    thisRow = nrec.Row;
                    // TODO: Find object to match nrec.GetShapeId()
                    break;

                case NumberRecord.sid:
                    NumberRecord numrec = (NumberRecord)record;
                    thisRow  = numrec.Row;
                    thisText = FormatNumberDateCell(numrec, numrec.Value);
                    break;

                default:
                    break;
                }

                if (thisText != null)
                {
                    if (thisRow != rowNum)
                    {
                        rowNum = thisRow;
                        if (text.Length > 0)
                        {
                            text.Append("\n");
                        }
                    }
                    else
                    {
                        text.Append("\t");
                    }
                    text.Append(thisText);
                }
            }
Example #7
0
        private Biff GetCorrectRecord(GenericBiff record, Stream stream, SstRecord sst)
        {
            Biff ret = record;
            switch (record.Id)
            {
                case (ushort)RecordType.Bof:
                    BofRecord bof = new BofRecord(record);
                    if (bof.Version < 0x0600)
                        throw new Exception("Versions below Excel 97/2000 are currently not supported.");

                    ret = bof;
                    break;
                case (ushort)RecordType.Boundsheet:
                    ret = new BoundSheetRecord(record);
                    break;
                case (ushort)RecordType.Index:
                    ret = new IndexRecord(record);
                    break;
                case (ushort)RecordType.DbCell:
                    ret = new DbCellRecord(record);
                    break;
                case (ushort)RecordType.Row:
                    ret = new RowRecord(record);
                    break;
                case (ushort)RecordType.Continue:
                    ret = new ContinueRecord(record);
                    break;
                case (ushort)RecordType.Blank:
                    ret = new BlankRecord(record);
                    break;
                case (ushort)RecordType.BoolErr:
                    ret = new BoolErrRecord(record);
                    break;
                case (ushort)RecordType.Formula:
                    ret = new FormulaRecord(record, stream);
                    break;
                case (ushort)RecordType.Label:
                    ret = new LabelRecord(record);
                    break;
                case (ushort)RecordType.LabelSst:
                    ret = new LabelSstRecord(record, sst);
                    break;
                case (ushort)RecordType.MulBlank:
                    ret = new MulBlankRecord(record);
                    break;
                case (ushort)RecordType.MulRk:
                    ret = new MulRkRecord(record);
                    break;
                case (ushort)RecordType.String:
                    ret = new StringValueRecord(record);
                    break;
                case (ushort)RecordType.Xf:
                    ret = new XfRecord(record);
                    break;
                case (ushort)RecordType.Rk:
                    ret = new RkRecord(record);
                    break;
                case (ushort)RecordType.Number:
                    ret = new NumberRecord(record);
                    break;
                case (ushort)RecordType.Array:
                    ret = new ArrayRecord(record);
                    break;
                case (ushort)RecordType.ShrFmla:
                    ret = new SharedFormulaRecord(record);
                    break;
                case (ushort)RecordType.Table:
                    ret = new TableRecord(record);
                    break;
                case (ushort)RecordType.Sst:
                    ret = new SstRecord(record, stream);
                    break;
                case (ushort)RecordType.Eof:
                    ret = new EofRecord(record);
                    break;
                case (ushort)RecordType.Font:
                    ret = new FontRecord(record);
                    break;
                case (ushort)RecordType.Format:
                    ret = new Net.SourceForge.Koogra.Excel.Records.FormatRecord(record);
                    break;
                case (ushort)RecordType.Palette:
                    ret = new PaletteRecord(record);
                    break;
                case (ushort)RecordType.Hyperlink:
                    ret = new HyperLinkRecord(record);
                    break;
            }

            return ret;
        }
Example #8
0
        /// <summary>
        /// Sets the cell type. The SetValue flag indicates whether to bother about
        /// trying to preserve the current value in the new record if one is Created.
        /// The SetCellValue method will call this method with false in SetValue
        /// since it will overWrite the cell value later
        /// </summary>
        /// <param name="cellType">Type of the cell.</param>
        /// <param name="setValue">if set to <c>true</c> [set value].</param>
        /// <param name="row">The row.</param>
        /// <param name="col">The col.</param>
        /// <param name="styleIndex">Index of the style.</param>
        private void SetCellType(CellType cellType, bool setValue, int row, int col, short styleIndex)
        {
            if (cellType > CellType.Error)
            {
                throw new Exception("I have no idea what type that Is!");
            }
            switch (cellType)
            {
            case CellType.Formula:
                FormulaRecordAggregate frec = null;

                if (cellType != this.cellType)
                {
                    frec = _sheet.Sheet.RowsAggregate.CreateFormula(row, col);
                }
                else
                {
                    frec = (FormulaRecordAggregate)_record;
                }
                frec.Column = col;
                if (setValue)
                {
                    frec.FormulaRecord.Value = NumericCellValue;
                }
                frec.XFIndex = styleIndex;
                frec.Row     = row;
                _record      = frec;
                break;

            case CellType.Numeric:
                NumberRecord nrec = null;

                if (cellType != this.cellType)
                {
                    nrec = new NumberRecord();
                }
                else
                {
                    nrec = (NumberRecord)_record;
                }
                nrec.Column = col;
                if (setValue)
                {
                    nrec.Value = NumericCellValue;
                }
                nrec.XFIndex = styleIndex;
                nrec.Row     = row;
                _record      = nrec;
                break;

            case CellType.String:
                LabelSSTRecord lrec = null;

                if (cellType != this.cellType)
                {
                    lrec = new LabelSSTRecord();
                }
                else
                {
                    lrec = (LabelSSTRecord)_record;
                }
                lrec.Column  = col;
                lrec.Row     = row;
                lrec.XFIndex = styleIndex;
                if (setValue)
                {
                    String str      = ConvertCellValueToString();
                    int    sstIndex = book.Workbook.AddSSTString(new UnicodeString(str));
                    lrec.SSTIndex = (sstIndex);
                    UnicodeString us = book.Workbook.GetSSTString(sstIndex);
                    stringValue = new HSSFRichTextString();
                    stringValue.UnicodeString = us;
                }
                _record = lrec;
                break;

            case CellType.Blank:
                BlankRecord brec = null;

                if (cellType != this.cellType)
                {
                    brec = new BlankRecord();
                }
                else
                {
                    brec = (BlankRecord)_record;
                }
                brec.Column = col;

                // During construction the cellStyle may be null for a Blank cell.
                brec.XFIndex = styleIndex;
                brec.Row     = row;
                _record      = brec;
                break;

            case CellType.Boolean:
                BoolErrRecord boolRec = null;

                if (cellType != this.cellType)
                {
                    boolRec = new BoolErrRecord();
                }
                else
                {
                    boolRec = (BoolErrRecord)_record;
                }
                boolRec.Column = col;
                if (setValue)
                {
                    boolRec.SetValue(ConvertCellValueToBoolean());
                }
                boolRec.XFIndex = styleIndex;
                boolRec.Row     = row;
                _record         = boolRec;
                break;

            case CellType.Error:
                BoolErrRecord errRec = null;

                if (cellType != this.cellType)
                {
                    errRec = new BoolErrRecord();
                }
                else
                {
                    errRec = (BoolErrRecord)_record;
                }
                errRec.Column = col;
                if (setValue)
                {
                    errRec.SetValue((byte)HSSFErrorConstants.ERROR_VALUE);
                }
                errRec.XFIndex = styleIndex;
                errRec.Row     = row;
                _record        = errRec;
                break;
            }
            if (cellType != this.cellType &&
                this.cellType != CellType.Unknown)  // Special Value to indicate an Uninitialized Cell
            {
                _sheet.Sheet.ReplaceValueRecord(_record);
            }
            this.cellType = cellType;
        }
Example #9
0
        private Biff GetCorrectRecord(GenericBiff record, Stream stream, SstRecord sst)
        {
            Biff ret = record;

            switch (record.Id)
            {
            case (ushort)RecordType.Bof:
                BofRecord bof = new BofRecord(record);
                if (bof.Version < 0x0600)
                {
                    throw new Exception("Versions below Excel 97/2000 are currently not supported.");
                }

                ret = bof;
                break;

            case (ushort)RecordType.Boundsheet:
                ret = new BoundSheetRecord(record);
                break;

            case (ushort)RecordType.Index:
                ret = new IndexRecord(record);
                break;

            case (ushort)RecordType.DbCell:
                ret = new DbCellRecord(record);
                break;

            case (ushort)RecordType.Row:
                ret = new RowRecord(record);
                break;

            case (ushort)RecordType.Continue:
                ret = new ContinueRecord(record);
                break;

            case (ushort)RecordType.Blank:
                ret = new BlankRecord(record);
                break;

            case (ushort)RecordType.BoolErr:
                ret = new BoolErrRecord(record);
                break;

            case (ushort)RecordType.Formula:
                ret = new FormulaRecord(record, stream);
                break;

            case (ushort)RecordType.Label:
                ret = new LabelRecord(record);
                break;

            case (ushort)RecordType.LabelSst:
                ret = new LabelSstRecord(record, sst);
                break;

            case (ushort)RecordType.MulBlank:
                ret = new MulBlankRecord(record);
                break;

            case (ushort)RecordType.MulRk:
                ret = new MulRkRecord(record);
                break;

            case (ushort)RecordType.String:
                ret = new StringValueRecord(record);
                break;

            case (ushort)RecordType.Xf:
                ret = new XfRecord(record);
                break;

            case (ushort)RecordType.Rk:
                ret = new RkRecord(record);
                break;

            case (ushort)RecordType.Number:
                ret = new NumberRecord(record);
                break;

            case (ushort)RecordType.Array:
                ret = new ArrayRecord(record);
                break;

            case (ushort)RecordType.ShrFmla:
                ret = new SharedFormulaRecord(record);
                break;

            case (ushort)RecordType.Table:
                ret = new TableRecord(record);
                break;

            case (ushort)RecordType.Sst:
                ret = new SstRecord(record, stream);
                break;

            case (ushort)RecordType.Eof:
                ret = new EofRecord(record);
                break;

            case (ushort)RecordType.Font:
                ret = new FontRecord(record);
                break;

            case (ushort)RecordType.Format:
                ret = new Net.SourceForge.Koogra.Excel.Records.FormatRecord(record);
                break;

            case (ushort)RecordType.Palette:
                ret = new PaletteRecord(record);
                break;

            case (ushort)RecordType.Hyperlink:
                ret = new HyperLinkRecord(record);
                break;
            }

            return(ret);
        }
Example #10
0
 public LogoPositionCommand(NumberRecord numberXRecord, NumberRecord numberYRecord)
 {
     X = numberXRecord.Number;
     Y = numberYRecord.Number;
 }