⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 columninforecordsaggregate.java

📁 java 报表 to office文档: 本包由java语言开发
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    public void collapseColumn( short columnNumber )    {        int idx = findColumnIdx( columnNumber, 0 );        if (idx == -1)            return;        // Find the start of the group.        ColumnInfoRecord columnInfo = (ColumnInfoRecord) records.get( findStartOfColumnOutlineGroup( idx ) );        // Hide all the columns until the end of the group        columnInfo = writeHidden( columnInfo, idx, true );        // Write collapse field        setColumn( (short) ( columnInfo.getLastColumn() + 1 ), null, null, null, Boolean.TRUE);    }    public void expandColumn( short columnNumber )    {        int idx = findColumnIdx( columnNumber, 0 );        if (idx == -1)            return;        // If it is already exapanded do nothing.        if (!isColumnGroupCollapsed(idx))            return;        // Find the start of the group.        int startIdx = findStartOfColumnOutlineGroup( idx );        ColumnInfoRecord columnInfo = getColInfo( startIdx );        // Find the end of the group.        int endIdx = findEndOfColumnOutlineGroup( idx );        ColumnInfoRecord endColumnInfo = getColInfo( endIdx );        // expand:        // colapsed bit must be unset        // hidden bit gets unset _if_ surrounding groups are expanded you can determine        //   this by looking at the hidden bit of the enclosing group.  You will have        //   to look at the start and the end of the current group to determine which        //   is the enclosing group        // hidden bit only is altered for this outline level.  ie.  don't uncollapse contained groups        if (!isColumnGroupHiddenByParent( idx ))        {            for (int i = startIdx; i <= endIdx; i++)            {                if (columnInfo.getOutlineLevel() == getColInfo(i).getOutlineLevel())                    getColInfo(i).setHidden( false );            }        }        // Write collapse field        setColumn( (short) ( columnInfo.getLastColumn() + 1 ), null, null, null, Boolean.FALSE);    }    /**     * creates the ColumnInfo Record and sets it to a default column/width     * @see org.apache.poi.hssf.record.ColumnInfoRecord     * @return record containing a ColumnInfoRecord     */    public static Record createColInfo()    {        ColumnInfoRecord retval = new ColumnInfoRecord();        retval.setColumnWidth(( short ) 2275);        // was:       retval.setOptions(( short ) 6);        retval.setOptions(( short ) 2);        retval.setXFIndex(( short ) 0x0f);        return retval;    }    public void setColumn(short column, Short width, Integer level, Boolean hidden, Boolean collapsed)    {        ColumnInfoRecord ci = null;        int              k  = 0;        for (k = 0; k < records.size(); k++)        {            ci = ( ColumnInfoRecord ) records.get(k);            if ((ci.getFirstColumn() <= column)                    && (column <= ci.getLastColumn()))            {                break;            }            ci = null;        }        if (ci != null)        {            boolean widthChanged = width != null && ci.getColumnWidth() != width.shortValue();            boolean levelChanged = level != null && ci.getOutlineLevel() != level.intValue();            boolean hiddenChanged = hidden != null && ci.getHidden() != hidden.booleanValue();            boolean collapsedChanged = collapsed != null && ci.getCollapsed() != collapsed.booleanValue();            boolean columnChanged = widthChanged || levelChanged || hiddenChanged || collapsedChanged;            if (!columnChanged)            {                // do nothing...nothing changed.            }            else if ((ci.getFirstColumn() == column)                     && (ci.getLastColumn() == column))            {                               // if its only for this cell then                setColumnInfoFields( ci, width, level, hidden, collapsed );            }            else if ((ci.getFirstColumn() == column)                     || (ci.getLastColumn() == column))            {                // okay so the width is different but the first or last column == the column we'return setting                // we'll just divide the info and create a new one                if (ci.getFirstColumn() == column)                {                    ci.setFirstColumn(( short ) (column + 1));                }                else                {                    ci.setLastColumn(( short ) (column - 1));                }                ColumnInfoRecord nci = ( ColumnInfoRecord ) createColInfo();                nci.setFirstColumn(column);                nci.setLastColumn(column);                nci.setOptions(ci.getOptions());                nci.setXFIndex(ci.getXFIndex());                setColumnInfoFields( nci, width, level, hidden, collapsed );                insertColumn(k, nci);            }            else            {                //split to 3 records                short lastcolumn = ci.getLastColumn();                ci.setLastColumn(( short ) (column - 1));                ColumnInfoRecord nci = ( ColumnInfoRecord ) createColInfo();                nci.setFirstColumn(column);                nci.setLastColumn(column);                nci.setOptions(ci.getOptions());                nci.setXFIndex(ci.getXFIndex());                setColumnInfoFields( nci, width, level, hidden, collapsed );                insertColumn(++k, nci);                nci = ( ColumnInfoRecord ) createColInfo();                nci.setFirstColumn((short)(column+1));                nci.setLastColumn(lastcolumn);                nci.setOptions(ci.getOptions());                nci.setXFIndex(ci.getXFIndex());                nci.setColumnWidth(ci.getColumnWidth());                insertColumn(++k, nci);            }        }        else        {            // okay so there ISN'T a column info record that cover's this column so lets create one!            ColumnInfoRecord nci = ( ColumnInfoRecord ) createColInfo();            nci.setFirstColumn(column);            nci.setLastColumn(column);            setColumnInfoFields( nci, width, level, hidden, collapsed );            insertColumn(k, nci);        }    }    /**     * Sets all non null fields into the <code>ci</code> parameter.     */    private void setColumnInfoFields( ColumnInfoRecord ci, Short width, Integer level, Boolean hidden, Boolean collapsed )    {        if (width != null)            ci.setColumnWidth(width.shortValue());        if (level != null)            ci.setOutlineLevel( level.shortValue() );        if (hidden != null)            ci.setHidden( hidden.booleanValue() );        if (collapsed != null)            ci.setCollapsed( collapsed.booleanValue() );    }    public int findColumnIdx(int column, int fromIdx)    {        if (column < 0)            throw new IllegalArgumentException( "column parameter out of range: " + column );        if (fromIdx < 0)            throw new IllegalArgumentException( "fromIdx parameter out of range: " + fromIdx );        ColumnInfoRecord ci;        for (int k = fromIdx; k < records.size(); k++)        {            ci = ( ColumnInfoRecord ) records.get(k);            if ((ci.getFirstColumn() <= column)                    && (column <= ci.getLastColumn()))            {                return k;            }            ci = null;        }        return -1;    }    public void collapseColInfoRecords( int columnIdx )    {        if (columnIdx == 0)            return;        ColumnInfoRecord previousCol = (ColumnInfoRecord) records.get( columnIdx - 1);        ColumnInfoRecord currentCol = (ColumnInfoRecord) records.get( columnIdx );        boolean adjacentColumns = previousCol.getLastColumn() == currentCol.getFirstColumn() - 1;        if (!adjacentColumns)            return;        boolean columnsMatch =                previousCol.getXFIndex() == currentCol.getXFIndex() &&                previousCol.getOptions() == currentCol.getOptions() &&                previousCol.getColumnWidth() == currentCol.getColumnWidth();        if (columnsMatch)        {            previousCol.setLastColumn( currentCol.getLastColumn() );            records.remove( columnIdx );        }    }    /**     * Creates an outline group for the specified columns.     * @param fromColumn    group from this column (inclusive)     * @param toColumn      group to this column (inclusive)     * @param indent        if true the group will be indented by one level,     *                      if false indenting will be removed by one level.     */    public void groupColumnRange(short fromColumn, short toColumn, boolean indent)    {        // Set the level for each column        int fromIdx = 0;        for (int i = fromColumn; i <= toColumn; i++)        {            int level = 1;            int columnIdx = findColumnIdx( i, Math.max(0,fromIdx) );            if (columnIdx != -1)            {                level = ((ColumnInfoRecord)records.get( columnIdx )).getOutlineLevel();                if (indent) level++; else level--;                level = Math.max(0, level);                level = Math.min(7, level);                fromIdx = columnIdx - 1; // subtract 1 just in case this column is collapsed later.            }            setColumn((short)i, null, new Integer(level), null, null);            columnIdx = findColumnIdx( i, Math.max(0, fromIdx ) );            collapseColInfoRecords( columnIdx );        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -