private void CreateAutoFilterInfoRecord(HSSFSheet sheet, int insertPos, Area3DPtg ptg) { //look for the AutoFilterInfo Record Zephyr.Utils.NPOI.HSSF.Record.Record record = sheet.Sheet.FindFirstRecordBySid(AutoFilterInfoRecord.sid); AutoFilterInfoRecord info; if (record == null) { info = new AutoFilterInfoRecord(); sheet.Sheet.Records.Insert(insertPos, info); } else { info = record as AutoFilterInfoRecord; } info.NumEntries = (short)(ptg.LastColumn - ptg.FirstColumn + 1); }
private LinkedDataRecord CreateValuesLinkedDataRecord() { LinkedDataRecord r = new LinkedDataRecord(); r.LinkType = (LinkedDataRecord.LINK_TYPE_VALUES); r.ReferenceType = (LinkedDataRecord.REFERENCE_TYPE_WORKSHEET); r.IsCustomNumberFormat = (false); r.IndexNumberFmtRecord = ((short)0); Area3DPtg p = new Area3DPtg(0, 31, 0, 0, false, false, false, false, 0); r.FormulaOfLink = (new Ptg[] { p, }); return r; }
/// <summary> /// Enable filtering for a range of cells /// </summary> /// <param name="range">the range of cells to filter</param> public IAutoFilter SetAutoFilter(CellRangeAddress range) { InternalWorkbook workbook = _workbook.Workbook; int sheetIndex = _workbook.GetSheetIndex(this); NameRecord name = workbook.GetSpecificBuiltinRecord(NameRecord.BUILTIN_FILTER_DB, sheetIndex + 1); if (name == null) { name = workbook.CreateBuiltInName(NameRecord.BUILTIN_FILTER_DB, sheetIndex + 1); } // The built-in name must consist of a single Area3d Ptg. Area3DPtg ptg = new Area3DPtg(range.FirstRow, range.LastRow, range.FirstColumn, range.LastColumn, false, false, false, false, sheetIndex); name.NameDefinition = (new Ptg[] { ptg }); AutoFilterInfoRecord r = new AutoFilterInfoRecord(); // the number of columns that have AutoFilter enabled. int numcols = 1 + range.LastColumn - range.FirstColumn; r.NumEntries = (short)numcols; int idx = _sheet.FindFirstRecordLocBySid(DimensionsRecord.sid); _sheet.Records.Insert(idx, r); //create a combobox control for each column HSSFPatriarch p = (HSSFPatriarch)CreateDrawingPatriarch(); for (int col = range.FirstColumn; col <= range.LastColumn; col++) { p.CreateComboBox(new HSSFClientAnchor(0, 0, 0, 0, (short)col, range.FirstRow, (short)(col + 1), range.FirstRow + 1)); } return new HSSFAutoFilter(this); }
/// <summary> /// Sets the repeating rows and columns for a sheet (as found in /// File->PageSetup->Sheet). This Is function Is included in the workbook /// because it Creates/modifies name records which are stored at the /// workbook level. /// </summary> /// <param name="sheetIndex">0 based index to sheet.</param> /// <param name="startColumn">0 based start of repeating columns.</param> /// <param name="endColumn">0 based end of repeating columns.</param> /// <param name="startRow">0 based start of repeating rows.</param> /// <param name="endRow">0 based end of repeating rows.</param> /// <example> /// To set just repeating columns: /// workbook.SetRepeatingRowsAndColumns(0,0,1,-1-1); /// To set just repeating rows: /// workbook.SetRepeatingRowsAndColumns(0,-1,-1,0,4); /// To remove all repeating rows and columns for a sheet. /// workbook.SetRepeatingRowsAndColumns(0,-1,-1,-1,-1); /// </example> public void SetRepeatingRowsAndColumns(int sheetIndex, int startColumn, int endColumn, int startRow, int endRow) { // Check arguments if (startColumn == -1 && endColumn != -1) throw new ArgumentException("Invalid column range specification"); if (startRow == -1 && endRow != -1) throw new ArgumentException("Invalid row range specification"); if (startColumn < -1 || startColumn >= 0xFF) throw new ArgumentException("Invalid column range specification"); if (endColumn < -1 || endColumn >= 0xFF) throw new ArgumentException("Invalid column range specification"); if (startRow < -1 || startRow > 65535) throw new ArgumentException("Invalid row range specification"); if (endRow < -1 || endRow > 65535) throw new ArgumentException("Invalid row range specification"); if (startColumn > endColumn) throw new ArgumentException("Invalid column range specification"); if (startRow > endRow) throw new ArgumentException("Invalid row range specification"); HSSFSheet sheet = (HSSFSheet)GetSheetAt(sheetIndex); int externSheetIndex = Workbook.CheckExternSheet(sheetIndex); bool settingRowAndColumn = startColumn != -1 && endColumn != -1 && startRow != -1 && endRow != -1; bool removingRange = startColumn == -1 && endColumn == -1 && startRow == -1 && endRow == -1; bool IsNewRecord = false; int rowColHeaderNameIndex = FindExistingBuiltinNameRecordIdx(sheetIndex, NameRecord.BUILTIN_PRINT_TITLE); if (removingRange) { if (rowColHeaderNameIndex >= 0) { workbook.RemoveName(rowColHeaderNameIndex); } return; } NameRecord nameRecord; if (rowColHeaderNameIndex < 0) { //does a lot of the house keeping for builtin records, like setting lengths to zero etc nameRecord = workbook.CreateBuiltInName(NameRecord.BUILTIN_PRINT_TITLE, sheetIndex + 1); IsNewRecord = true; } else { nameRecord = workbook.GetNameRecord(rowColHeaderNameIndex); IsNewRecord = false; } ArrayList temp = new ArrayList(); if (settingRowAndColumn) { int exprsSize = 2 * 11 + 1; // 2 * Area3DPtg.SIZE + UnionPtg.SIZE temp.Add(new MemFuncPtg(exprsSize)); } if (startColumn >= 0) { Area3DPtg colArea = new Area3DPtg(0, MAX_ROW, startColumn, endColumn, false, false, false, false, externSheetIndex); temp.Add(colArea); } if (startRow >= 0) { Area3DPtg rowArea = new Area3DPtg(startRow, endRow, 0, MAX_COLUMN, false, false, false, false, externSheetIndex); temp.Add(rowArea); } if (settingRowAndColumn) { temp.Add(UnionPtg.instance); } Ptg[] ptgs = (Ptg[])temp.ToArray(typeof(Ptg)); nameRecord.NameDefinition = ptgs; if (IsNewRecord) { HSSFName newName = new HSSFName(this, nameRecord); names.Add(newName); } Zephyr.Utils.NPOI.SS.UserModel.IPrintSetup printSetup = sheet.PrintSetup; printSetup.ValidSettings = (false); sheet.IsActive = (true); }
/** * * @param sheetIden may be <code>null</code> * @param part1 * @param part2 may be <code>null</code> */ private ParseNode CreateAreaRefParseNode(SheetIdentifier sheetIden, SimpleRangePart part1, SimpleRangePart part2) { int extIx; if (sheetIden == null) { extIx = Int32.MinValue; } else { String sName = sheetIden.SheetID.Name; if (sheetIden.BookName == null) { extIx = _book.GetExternalSheetIndex(sName); } else { extIx = _book.GetExternalSheetIndex(sheetIden.BookName, sName); } } Ptg ptg; if (part2 == null) { CellReference cr = part1.getCellReference(); if (sheetIden == null) { ptg = new RefPtg(cr); } else { ptg = new Ref3DPtg(cr, extIx); } } else { AreaReference areaRef = CreateAreaRef(part1, part2); if (sheetIden == null) { ptg = new AreaPtg(areaRef); } else { ptg = new Area3DPtg(areaRef, extIx); } } return new ParseNode(ptg); }