private static SCLRecord CreateSCLRecord(short numerator, short denominator) { SCLRecord r = new SCLRecord(); r.Denominator = (denominator); r.Numerator = (numerator); return(r); }
public void TestZoom() { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = (HSSFSheet)wb.CreateSheet(); Assert.AreEqual(-1, sheet.Sheet.FindFirstRecordLocBySid(SCLRecord.sid)); sheet.SetZoom(3, 4); Assert.IsTrue(sheet.Sheet.FindFirstRecordLocBySid(SCLRecord.sid) > 0); SCLRecord sclRecord = (SCLRecord)sheet.Sheet.FindFirstRecordBySid(SCLRecord.sid); Assert.AreEqual(3, sclRecord.Numerator); Assert.AreEqual(4, sclRecord.Denominator); int sclLoc = sheet.Sheet.FindFirstRecordLocBySid(SCLRecord.sid); int window2Loc = sheet.Sheet.FindFirstRecordLocBySid(WindowTwoRecord.sid); Assert.IsTrue(sclLoc == window2Loc + 1); // verify limits try { sheet.SetZoom(0, 2); Assert.Fail("Should catch Exception here"); } catch (ArgumentException e) { Assert.AreEqual("Numerator must be greater than 0 and less than 65536", e.Message); } try { sheet.SetZoom(65536, 2); Assert.Fail("Should catch Exception here"); } catch (ArgumentException e) { Assert.AreEqual("Numerator must be greater than 0 and less than 65536", e.Message); } try { sheet.SetZoom(2, 0); Assert.Fail("Should catch Exception here"); } catch (ArgumentException e) { Assert.AreEqual("Denominator must be greater than 0 and less than 65536", e.Message); } try { sheet.SetZoom(2, 65536); Assert.Fail("Should catch Exception here"); } catch (ArgumentException e) { Assert.AreEqual("Denominator must be greater than 0 and less than 65536", e.Message); } }
public void TestLoad() { SCLRecord record = new SCLRecord(TestcaseRecordInputStream.Create((short)0xa0, data)); Assert.AreEqual(3, record.Numerator); Assert.AreEqual(4, record.Denominator); Assert.AreEqual(8, record.RecordSize); }
public void TestStore() { SCLRecord record = new SCLRecord(); record.Numerator = ((short)3); record.Denominator = ((short)4); byte[] recordBytes = record.Serialize(); Assert.AreEqual(recordBytes.Length - 4, data.Length); for (int i = 0; i < data.Length; i++) { Assert.AreEqual(data[i], recordBytes[i + 4], "At offset " + i); } }
public void TestZoom() { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = (HSSFSheet)wb.CreateSheet(); Assert.AreEqual(-1, sheet.Sheet.FindFirstRecordLocBySid(SCLRecord.sid)); sheet.SetZoom(3, 4); Assert.IsTrue(sheet.Sheet.FindFirstRecordLocBySid(SCLRecord.sid) > 0); SCLRecord sclRecord = (SCLRecord)sheet.Sheet.FindFirstRecordBySid(SCLRecord.sid); Assert.AreEqual(3, sclRecord.Numerator); Assert.AreEqual(4, sclRecord.Denominator); int sclLoc = sheet.Sheet.FindFirstRecordLocBySid(SCLRecord.sid); int window2Loc = sheet.Sheet.FindFirstRecordLocBySid(WindowTwoRecord.sid); Assert.IsTrue(sclLoc == window2Loc + 1); }
public ChartFormatsAggregate(RecordStream rs, ChartRecordAggregate container) : base(RuleName_CHARTFOMATS, container) { Debug.Assert(rs.PeekNextChartSid() == ChartRecord.sid); chart = (ChartRecord)rs.GetNext(); rs.GetNext(); while (rs.PeekNextChartSid() == FrtFontListRecord.sid) { fontList.Add(new FontListAggregate(rs, this)); } Debug.Assert(rs.PeekNextChartSid() == SCLRecord.sid); scl = (SCLRecord)rs.GetNext(); plotGrowth = (PlotGrowthRecord)rs.GetNext(); if (rs.PeekNextChartSid() == FrameRecord.sid) { frame = new FrameAggregate(rs, this); } while (rs.PeekNextChartSid() == SeriesRecord.sid) { seriesFormatList.Add(new SeriesFormatAggregate(rs, this)); } while (rs.PeekNextChartSid() == DataFormatRecord.sid) { ssList.Add(new SSAggregate(rs, this)); } Debug.Assert(rs.PeekNextChartSid() == ShtPropsRecord.sid); shtProps = (ShtPropsRecord)rs.GetNext(); while (rs.PeekNextChartSid() == DefaultTextRecord.sid|| rs.PeekNextChartSid() == DataLabExtRecord.sid) { dftTextList.Add(new DFTTextAggregate(rs, this)); } Debug.Assert(rs.PeekNextChartSid() == AxesUsedRecord.sid); axesUsed = (AxesUsedRecord)rs.GetNext(); Debug.Assert(rs.PeekNextChartSid() == AxisParentRecord.sid); axisParent1 = new AxisParentAggregate(rs, this); if (rs.PeekNextChartSid() == AxisParentRecord.sid) { axisParent2 = new AxisParentAggregate(rs, this); } if (rs.PeekNextChartSid() == CrtLayout12ARecord.sid) crt12A = (CrtLayout12ARecord)rs.GetNext(); if (rs.PeekNextChartSid() == DatRecord.sid) dat = new DatAggregate(rs, container); if (rs.PeekNextChartSid() == TextRecord.sid) { while (rs.PeekNextChartSid() == TextRecord.sid) attachedLabelList.Add(new AttachedLabelAggregate(rs, this)); } if (rs.PeekNextChartSid() == CrtMlFrtRecord.sid) crtMlFrt = new CrtMlFrtAggregate(rs, container); while (rs.PeekNextChartSid() == DataLabExtRecord.sid || rs.PeekNextChartSid() == TextRecord.sid) { cfalList.Add(new ChartFormatsAttachedLabelAggregate(rs, this)); } if (rs.PeekNextChartSid() == TextPropsStreamRecord.sid) textProps = new TextPropsAggregate(rs, container); while (rs.PeekNextChartSid() == CrtMlFrtRecord.sid) { mlfrtList.Add(new CrtMlFrtAggregate(rs, container)); } Record r = rs.GetNext();//EndRecord Debug.Assert(r.GetType() == typeof(EndRecord)); }
public ChartFormatsAggregate(RecordStream rs, ChartRecordAggregate container) : base(RuleName_CHARTFOMATS, container) { Debug.Assert(rs.PeekNextChartSid() == ChartRecord.sid); chart = (ChartRecord)rs.GetNext(); rs.GetNext(); while (rs.PeekNextChartSid() == FrtFontListRecord.sid) { fontList.Add(new FontListAggregate(rs, this)); } Debug.Assert(rs.PeekNextChartSid() == SCLRecord.sid); scl = (SCLRecord)rs.GetNext(); plotGrowth = (PlotGrowthRecord)rs.GetNext(); if (rs.PeekNextChartSid() == FrameRecord.sid) { frame = new FrameAggregate(rs, this); } while (rs.PeekNextChartSid() == SeriesRecord.sid) { seriesFormatList.Add(new SeriesFormatAggregate(rs, this)); } while (rs.PeekNextChartSid() == DataFormatRecord.sid) { ssList.Add(new SSAggregate(rs, this)); } Debug.Assert(rs.PeekNextChartSid() == ShtPropsRecord.sid); shtProps = (ShtPropsRecord)rs.GetNext(); while (rs.PeekNextChartSid() == DefaultTextRecord.sid || rs.PeekNextChartSid() == DataLabExtRecord.sid) { dftTextList.Add(new DFTTextAggregate(rs, this)); } Debug.Assert(rs.PeekNextChartSid() == AxesUsedRecord.sid); axesUsed = (AxesUsedRecord)rs.GetNext(); Debug.Assert(rs.PeekNextChartSid() == AxisParentRecord.sid); axisParent1 = new AxisParentAggregate(rs, this); if (rs.PeekNextChartSid() == AxisParentRecord.sid) { axisParent2 = new AxisParentAggregate(rs, this); } if (rs.PeekNextChartSid() == CrtLayout12ARecord.sid) { crt12A = (CrtLayout12ARecord)rs.GetNext(); } if (rs.PeekNextChartSid() == DatRecord.sid) { dat = new DatAggregate(rs, container); } if (rs.PeekNextChartSid() == TextRecord.sid) { while (rs.PeekNextChartSid() == TextRecord.sid) { attachedLabelList.Add(new AttachedLabelAggregate(rs, this)); } } if (rs.PeekNextChartSid() == CrtMlFrtRecord.sid) { crtMlFrt = new CrtMlFrtAggregate(rs, container); } while (rs.PeekNextChartSid() == DataLabExtRecord.sid || rs.PeekNextChartSid() == TextRecord.sid) { cfalList.Add(new ChartFormatsAttachedLabelAggregate(rs, this)); } if (rs.PeekNextChartSid() == TextPropsStreamRecord.sid) { textProps = new TextPropsAggregate(rs, container); } while (rs.PeekNextChartSid() == CrtMlFrtRecord.sid) { mlfrtList.Add(new CrtMlFrtAggregate(rs, container)); } Record r = rs.GetNext();//EndRecord Debug.Assert(r.GetType() == typeof(EndRecord)); }
/** * Writes out this sheet. First writes out the standard sheet * information then writes out each row in turn. * Once all the rows have been written out, it retrospectively adjusts * the offset references in the file * * @exception IOException */ public void write() { Assert.verify(rows != null); // This worksheet consists of just one chart, so write it and return if (chartOnly) { drawingWriter.write(outputFile); return; } BOFRecord bof = new BOFRecord(BOFRecord.sheet); outputFile.write(bof); // Compute the number of blocks of 32 rows that will be needed int numBlocks = numRows / 32; if (numRows - numBlocks * 32 != 0) numBlocks++; int indexPos = outputFile.getPos(); // Write the index record out now in order to serve as a place holder // The bof passed in is the bof of the workbook, not this sheet IndexRecord indexRecord = new IndexRecord(0, numRows, numBlocks); outputFile.write(indexRecord); if (settings.getAutomaticFormulaCalculation()) { CalcModeRecord cmr = new CalcModeRecord(CalcModeRecord.automatic); outputFile.write(cmr); } else { CalcModeRecord cmr = new CalcModeRecord(CalcModeRecord.manual); outputFile.write(cmr); } CalcCountRecord ccr = new CalcCountRecord(0x64); outputFile.write(ccr); RefModeRecord rmr = new RefModeRecord(); outputFile.write(rmr); IterationRecord itr = new IterationRecord(false); outputFile.write(itr); DeltaRecord dtr = new DeltaRecord(0.001); outputFile.write(dtr); SaveRecalcRecord srr = new SaveRecalcRecord(settings.getRecalculateFormulasBeforeSave()); outputFile.write(srr); PrintHeadersRecord phr = new PrintHeadersRecord(settings.getPrintHeaders()); outputFile.write(phr); PrintGridLinesRecord pglr = new PrintGridLinesRecord(settings.getPrintGridLines()); outputFile.write(pglr); GridSetRecord gsr = new GridSetRecord(true); outputFile.write(gsr); GuttersRecord gutr = new GuttersRecord(); gutr.setMaxColumnOutline(maxColumnOutlineLevel + 1); gutr.setMaxRowOutline(maxRowOutlineLevel + 1); outputFile.write(gutr); DefaultRowHeightRecord drhr = new DefaultRowHeightRecord (settings.getDefaultRowHeight(), settings.getDefaultRowHeight() != SheetSettings.DEFAULT_DEFAULT_ROW_HEIGHT); outputFile.write(drhr); if (maxRowOutlineLevel > 0) workspaceOptions.setRowOutlines(true); if (maxColumnOutlineLevel > 0) workspaceOptions.setColumnOutlines(true); workspaceOptions.setFitToPages(settings.getFitToPages()); outputFile.write(workspaceOptions); if (rowBreaks.Count > 0) { int[] rb = new int[rowBreaks.Count]; for (int i = 0; i < rb.Length; i++) rb[i] = (int)rowBreaks[i]; HorizontalPageBreaksRecord hpbr = new HorizontalPageBreaksRecord(rb); outputFile.write(hpbr); } if (columnBreaks.Count > 0) { int[] rb = new int[columnBreaks.Count]; for (int i = 0; i < rb.Length; i++) rb[i] = (int)columnBreaks[i]; VerticalPageBreaksRecord hpbr = new VerticalPageBreaksRecord(rb); outputFile.write(hpbr); } HeaderRecord header = new HeaderRecord(settings.getHeader().ToString()); outputFile.write(header); FooterRecord footer = new FooterRecord(settings.getFooter().ToString()); outputFile.write(footer); HorizontalCentreRecord hcr = new HorizontalCentreRecord(settings.isHorizontalCentre()); outputFile.write(hcr); VerticalCentreRecord vcr = new VerticalCentreRecord(settings.isVerticalCentre()); outputFile.write(vcr); // Write out the margins if they don't equal the default if (settings.getLeftMargin() != settings.getDefaultWidthMargin()) { MarginRecord mr = new LeftMarginRecord(settings.getLeftMargin()); outputFile.write(mr); } if (settings.getRightMargin() != settings.getDefaultWidthMargin()) { MarginRecord mr = new RightMarginRecord(settings.getRightMargin()); outputFile.write(mr); } if (settings.getTopMargin() != settings.getDefaultHeightMargin()) { MarginRecord mr = new TopMarginRecord(settings.getTopMargin()); outputFile.write(mr); } if (settings.getBottomMargin() != settings.getDefaultHeightMargin()) { MarginRecord mr = new BottomMarginRecord(settings.getBottomMargin()); outputFile.write(mr); } if (plsRecord != null) outputFile.write(plsRecord); SetupRecord setup = new SetupRecord(settings); outputFile.write(setup); if (settings.isProtected()) { ProtectRecord pr = new ProtectRecord(settings.isProtected()); outputFile.write(pr); ScenarioProtectRecord spr = new ScenarioProtectRecord(settings.isProtected()); outputFile.write(spr); ObjectProtectRecord opr = new ObjectProtectRecord(settings.isProtected()); outputFile.write(opr); if (settings.getPassword() != null) { PasswordRecord pw = new PasswordRecord(settings.getPassword()); outputFile.write(pw); } else if (settings.getPasswordHash() != 0) { PasswordRecord pw = new PasswordRecord(settings.getPasswordHash()); outputFile.write(pw); } } indexRecord.setDataStartPosition(outputFile.getPos()); DefaultColumnWidth dcw = new DefaultColumnWidth(settings.getDefaultColumnWidth()); outputFile.write(dcw); // Get a handle to the normal styles WritableCellFormat normalStyle = sheet.getWorkbook().getStyles().getNormalStyle(); WritableCellFormat defaultDateFormat = sheet.getWorkbook().getStyles().getDefaultDateFormat(); // Write out all the column formats foreach (ColumnInfoRecord cir in columnFormats) { // Writing out the column info with index 0x100 causes excel to crash if (cir.getColumn() < 0x100) outputFile.write(cir); XFRecord xfr = cir.getCellFormat(); if (xfr != normalStyle && cir.getColumn() < 0x100) { // Make this the format for every cell in the column Cell[] cells = getColumn(cir.getColumn()); for (int i = 0; i < cells.Length; i++) { if (cells[i] != null && (cells[i].getCellFormat() == normalStyle || cells[i].getCellFormat() == defaultDateFormat)) { // The cell has no overriding format specified, so // set it to the column default ((WritableCell)cells[i]).setCellFormat(xfr); } } } } // Write out the auto filter if (autoFilter != null) autoFilter.write(outputFile); DimensionRecord dr = new DimensionRecord(numRows, numCols); outputFile.write(dr); // Write out all the rows, in blocks of 32 for (int block = 0; block < numBlocks; block++) { DBCellRecord dbcell = new DBCellRecord(outputFile.getPos()); int blockRows = System.Math.Min(32, numRows - block * 32); bool firstRow = true; // First write out all the row records for (int i = block * 32; i < block * 32 + blockRows; i++) { if (rows[i] != null) { rows[i].write(outputFile); if (firstRow) { dbcell.setCellOffset(outputFile.getPos()); firstRow = false; } } } // Now write out all the cells for (int i = block * 32; i < block * 32 + blockRows; i++) { if (rows[i] != null) { dbcell.addCellRowPosition(outputFile.getPos()); rows[i].writeCells(outputFile); } } // Now set the current file position in the index record indexRecord.addBlockPosition(outputFile.getPos()); // Set the position of the file pointer and write out the DBCell // record dbcell.setPosition(outputFile.getPos()); outputFile.write(dbcell); } // Do the drawings and charts if enabled if (!workbookSettings.getDrawingsDisabled()) drawingWriter.write(outputFile); Window2Record w2r = new Window2Record(settings); outputFile.write(w2r); // Handle the frozen panes if (settings.getHorizontalFreeze() != 0 || settings.getVerticalFreeze() != 0) { PaneRecord pr = new PaneRecord(settings.getHorizontalFreeze(),settings.getVerticalFreeze()); outputFile.write(pr); // Handle the selection record. First, there will always be a top left SelectionRecord sr = new SelectionRecord(SelectionRecord.upperLeft, 0, 0); outputFile.write(sr); // Top right if (settings.getHorizontalFreeze() != 0) { sr = new SelectionRecord(SelectionRecord.upperRight, settings.getHorizontalFreeze(), 0); outputFile.write(sr); } // Bottom left if (settings.getVerticalFreeze() != 0) { sr = new SelectionRecord(SelectionRecord.lowerLeft, 0, settings.getVerticalFreeze()); outputFile.write(sr); } // Bottom right if (settings.getHorizontalFreeze() != 0 && settings.getVerticalFreeze() != 0) { sr = new SelectionRecord(SelectionRecord.lowerRight,settings.getHorizontalFreeze(),settings.getVerticalFreeze()); outputFile.write(sr); } Weird1Record w1r = new Weird1Record(); outputFile.write(w1r); } else { // No frozen panes - just write out the selection record for the // whole sheet SelectionRecord sr = new SelectionRecord(SelectionRecord.upperLeft, 0, 0); outputFile.write(sr); } // Handle the zoom factor if (settings.getZoomFactor() != 100) { SCLRecord sclr = new SCLRecord(settings.getZoomFactor()); outputFile.write(sclr); } // Now write out all the merged cells mergedCells.write(outputFile); // Write out all the hyperlinks foreach (WritableHyperlink hlr in hyperlinks) outputFile.write(hlr); if (buttonPropertySet != null) outputFile.write(buttonPropertySet); // Write out the data validations if (dataValidation != null || validatedCells.Count > 0) writeDataValidation(); // Write out the conditional formats if (conditionalFormats != null && conditionalFormats.Count > 0) { foreach (ConditionalFormat cf in conditionalFormats) cf.write(outputFile); } EOFRecord eof = new EOFRecord(); outputFile.write(eof); // Now the various cross reference offsets have been calculated, // retrospectively set the values in the output file outputFile.setData(indexRecord.getData(), indexPos + 4); }