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

📄 columnattributesmanager.java

📁 非常实用的java描述的excel组件
💻 JAVA
字号:
/* =================================================
 * JWorkbook : data export from Java to spreadsheets
 * =================================================
 *
 * Project Info:  http://www.jfree.org/jworkbook/index.html;
 * Project Lead:  David Gilbert (david.gilbert@object-refinery.com);
 *
 * (C) Copyright 2001-2003, by Object Refinery Limited.
 *
 * This library is free software; you can redistribute it and/or modify it under the terms
 * of the GNU Lesser General Public License as published by the Free Software Foundation;
 * either version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with this
 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 *
 * ----------------------------
 * ColumnAttributesManager.java
 * ----------------------------
 * (C) Copyright 2001, 2003, by Object Refinery Limited.
 *
 * Original Author:  David Gilbert (for Object Refinery Limited);
 * Contributor(s):   -;
 *
 * $Id$
 *
 * Changes:
 * ---------------
 * 05-Nov-2001 : Version 1 (DG);
 * 12-Feb-2002 : Implemented GnumericWriter and XLWriter (DG);
 * 07-Jul-2003 : Changed GPL --> LGPL, changed package name, updated company name (DG);
 *
 */

package org.jfree.workbook;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

/**
 * Records information about the columns in a worksheet.
 */
public class ColumnAttributesManager {

    /** The default column width. */
    protected double defaultColumnWidth;

    /** List of ColumnAttributes objects. */
    protected List attributes;

    /**
     * Constructs a new ColumnAttributesManager.
     */
    public ColumnAttributesManager() {

        this.defaultColumnWidth = Worksheet.DEFAULT_COLUMN_WIDTH;
        this.attributes = new ArrayList();

    }

    /**
     * Returns the default column width.
     * 
     * @return The default column width.
     */
    public double getDefaultColumnWidth() {
        return this.defaultColumnWidth;
    }

    /**
     * Sets the default column width.
     * 
     * @param width  the new default column width.
     */
    public void setDefaultColumnWidth(double width) {
        this.defaultColumnWidth = width;
    }

    /**
     * Sets the width of a range of columns.
     * 
     * @param startColumn  the start column (0 <= startColumn < Worksheets.MAX_COLUMNS).
     * @param endColumn  the end column (startColumn <= endColumn < Worksheets.MAX_COLUMNS).
     * @param width  the new width.
     */
    public void setColumnWidth(int startColumn, int endColumn, double width) {

        // check parameters...columns get checked later...
        if (width < 0) {
            throw new IllegalArgumentException("setColumnWidth(): width must be at least 0.");
        }

        ColumnAttributesModifier modifier = new ColumnWidthModifier(width);
        modifyColumnAttributes(modifier, startColumn, endColumn);

    }

    /**
     * General method for modifying column attributes.
     * 
     * @param modifier  the modifier.
     * @param c1  the start column.
     * @param c2  the end column.
     */
    public void modifyColumnAttributes(ColumnAttributesModifier modifier, int c1, int c2) {

        // check the columns are in valid range...
        if ((c1 < 0) || (c1 >= Worksheet.MAX_COLUMNS)) {
            throw new IllegalArgumentException(
                                    "modifyColumnAttributes(): c1 outside valid range.");
        }

        if ((c2 < 0) || (c2 >= Worksheet.MAX_COLUMNS)) {
            throw new IllegalArgumentException(
                                      "modifyColumnAttributes(): c2 outside valid range.");
        }

        if (c1 > c2) {
            throw new IllegalArgumentException("modifyColumnAttributes(): c1 > c2.");
        }

        // now iterate over existing records to restructure as required...
        List addList = new ArrayList();
        List removeList = new ArrayList();

        ColumnAttributes split1 = null;
        ColumnAttributes split2 = null;

        Iterator iterator = attributes.iterator();
        while (iterator.hasNext()) {
            ColumnAttributes existing = (ColumnAttributes) iterator.next();

            if (c1 < existing.startColumn) { // 1,2,3,4
                if (c2 < existing.startColumn) {
                    // CASE 1 : do nothing
                }
                else { // 2,3,4
                    if (c2 < existing.endColumn) {
                        // CASE 2
                        removeList.add(existing);
                        split1 = existing.getSplitToColumn(c2);
                        modifier.modifyColumnAttributes(split1);
                        split2 = existing.getSplitFromColumn(c2 + 1);
                        addList.add(split1);
                        addList.add(split2);
                    }
                    else if (c2 == existing.endColumn) {
                        // CASES 3
                        modifier.modifyColumnAttributes(existing);
                        c2 = existing.startColumn - 1;
                    }
                    else if (c2 > existing.endColumn) {
                        modifier.modifyColumnAttributes(existing);
                        c1 = existing.endColumn + 1;  // we are discarding the earlier part
                    }
                }
            }
            else {  // 5,6,7,8,9,10,11
                if (c1 == existing.startColumn) { // 5,6,7
                    if (c2 < existing.endColumn) {
                        // CASE 5
                        removeList.add(existing);
                        split1 = existing.getSplitToColumn(c2);
                        modifier.modifyColumnAttributes(split1);
                        split2 = existing.getSplitFromColumn(c2 + 1);
                        addList.add(split1);
                        addList.add(split2);
                        c1 = -1;
                        c2 = -1;
                    }
                    else {
                        if (c2 == existing.endColumn) {
                            // CASE 6
                            modifier.modifyColumnAttributes(existing);
                            c1 = -1;
                            c2 = -1;
                        }
                        else {
                            // CASE 7
                            modifier.modifyColumnAttributes(existing);
                            c1 = existing.endColumn + 1;
                        }
                    }
                }
                else { // 8,9,10,11

                    if (c2 < existing.endColumn) {
                        // CASE 8
                        removeList.add(existing);
                        split1 = existing.getSplitToColumn(c1 - 1);
                        split2 = existing.getSplitFromColumn(c2 + 1);
                        ColumnAttributes subset = existing.getSubset(c1, c2);
                        modifier.modifyColumnAttributes(subset);
                        addList.add(split1);
                        addList.add(split2);
                        addList.add(subset);
                        c1 = -1;
                        c2 = -1;
                    }
                    else if (c2 == existing.endColumn) { //9
                        removeList.add(existing);
                        split1 = existing.getSplitToColumn(c1 - 1);
                        split2 = existing.getSplitFromColumn(c1);
                        modifier.modifyColumnAttributes(split2);
                        addList.add(split1);
                        addList.add(split2);
                        c1 = -1;
                        c2 = -1;
                    }
                    else { //10,11
                        if (c1 <= existing.endColumn) {
                            removeList.add(existing);
                            split1 = existing.getSplitToColumn(c1 - 1);
                            split2 = existing.getSplitFromColumn(c1);
                            modifier.modifyColumnAttributes(split2);
                            addList.add(split1);
                            addList.add(split2);
                            c1 = existing.endColumn + 1;
                        }
                        else {
                            // CASE 11 : do nothing
                        }
                    }

                }
            }
        }

        if ((c1 >= 0) && (c2 >= 0)) {
            ColumnAttributes newAttributes = new ColumnAttributes(c1, c2);
            modifier.modifyColumnAttributes(newAttributes);
            addList.add(newAttributes);
        }

        attributes.removeAll(removeList);
        attributes.addAll(addList);
        Collections.sort(attributes);

    }

    /**
     * Returns an iterator that provides access to the attribute records.
     * 
     * @return The iterator.
     */
    public Iterator getAttributesIterator() {

        return attributes.iterator();

    }

}

⌨️ 快捷键说明

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