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

📄 hssfsheet.java

📁 Office格式转换代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation.  All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, *    if any, must include the following acknowledgment: *       "This product includes software developed by the *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowledgment may appear in the software itself, *    if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and *    "Apache POI" must not be used to endorse or promote products *    derived from this software without prior written permission. For *    written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", *    "Apache POI", nor may "Apache" appear in their name, without *    prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. *//* * HSSFSheet.java * * Created on September 30, 2001, 3:40 PM */package org.apache.poi.hssf.usermodel;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.TreeMap;import org.apache.poi.hssf.model.Sheet;import org.apache.poi.hssf.model.Workbook;import org.apache.poi.hssf.record.CellValueRecordInterface;import org.apache.poi.hssf.record.HCenterRecord;import org.apache.poi.hssf.record.Record;import org.apache.poi.hssf.record.RowRecord;import org.apache.poi.hssf.record.SCLRecord;import org.apache.poi.hssf.record.VCenterRecord;import org.apache.poi.hssf.record.WSBoolRecord;import org.apache.poi.hssf.record.WindowTwoRecord;import org.apache.poi.hssf.util.Region;import org.apache.poi.util.POILogFactory;import org.apache.poi.util.POILogger;/** * High level representation of a worksheet. * @author  Andrew C. Oliver (acoliver at apache dot org) * @author  Glen Stampoultzis (glens at apache.org) * @author  Libin Roman (romal at vistaportal.com) * @author  Shawn Laubach (slaubach at apache dot org) (Just a little) */public class HSSFSheet{    private static final int DEBUG = POILogger.DEBUG;    /* Constants for margins */    public static final short LeftMargin = Sheet.LeftMargin;    public static final short RightMargin = Sheet.RightMargin;    public static final short TopMargin = Sheet.TopMargin;    public static final short BottomMargin = Sheet.BottomMargin;    public static final byte PANE_LOWER_RIGHT = (byte)0;    public static final byte PANE_UPPER_RIGHT = (byte)1;    public static final byte PANE_LOWER_LEFT = (byte)2;    public static final byte PANE_UPPER_LEFT = (byte)3;    /**     * Used for compile-time optimization.  This is the initial size for the collection of     * rows.  It is currently set to 20.  If you generate larger sheets you may benefit     * by setting this to a higher number and recompiling a custom edition of HSSFSheet.     */    public final static int INITIAL_CAPACITY = 20;    /**     * reference to the low level Sheet object     */    private Sheet sheet;    private TreeMap rows;    private Workbook book;    private int firstrow;    private int lastrow;    private static POILogger log = POILogFactory.getLogger(HSSFSheet.class);    /**     * Creates new HSSFSheet   - called by HSSFWorkbook to create a sheet from     * scratch.  You should not be calling this from application code (its protected anyhow).     *     * @param book - lowlevel Workbook object associated with the sheet.     * @see org.apache.poi.hssf.usermodel.HSSFWorkbook#createSheet()     */    protected HSSFSheet(Workbook book)    {        sheet = Sheet.createSheet();        rows = new TreeMap();   // new ArrayList(INITIAL_CAPACITY);        this.book = book;    }    /**     * Creates an HSSFSheet representing the given Sheet object.  Should only be     * called by HSSFWorkbook when reading in an exisiting file.     *     * @param book - lowlevel Workbook object associated with the sheet.     * @param sheet - lowlevel Sheet object this sheet will represent     * @see org.apache.poi.hssf.usermodel.HSSFWorkbook#createSheet()     */    protected HSSFSheet(Workbook book, Sheet sheet)    {        this.sheet = sheet;        rows = new TreeMap();        this.book = book;        setPropertiesFromSheet(sheet);    }    HSSFSheet cloneSheet(Workbook book) {      return new HSSFSheet(book, sheet.cloneSheet());    }    /**     * used internally to set the properties given a Sheet object     */    private void setPropertiesFromSheet(Sheet sheet)    {        int sloc = sheet.getLoc();        RowRecord row = sheet.getNextRow();        while (row != null)        {            createRowFromRecord(row);            row = sheet.getNextRow();        }        sheet.setLoc(sloc);        CellValueRecordInterface cval = sheet.getNextValueRecord();        long timestart = System.currentTimeMillis();        log.log(DEBUG, "Time at start of cell creating in HSSF sheet = ",                new Long(timestart));        HSSFRow lastrow = null;        while (cval != null)        {            long cellstart = System.currentTimeMillis();            HSSFRow hrow = lastrow;            if ( ( lastrow == null ) || ( lastrow.getRowNum() != cval.getRow() ) )            {                hrow = getRow( cval.getRow() );            }            if ( hrow != null )            {                lastrow = hrow;                log.log( DEBUG, "record id = " + Integer.toHexString( ( (Record) cval ).getSid() ) );                hrow.createCellFromRecord( cval );                cval = sheet.getNextValueRecord();                log.log( DEBUG, "record took ",                        new Long( System.currentTimeMillis() - cellstart ) );            }            else            {                cval = null;            }        }        log.log(DEBUG, "total sheet cell creation took ",                new Long(System.currentTimeMillis() - timestart));    }    /**     * Create a new row within the sheet and return the high level representation     *     * @param rownum  row number     * @return High level HSSFRow object representing a row in the sheet     * @see org.apache.poi.hssf.usermodel.HSSFRow     * @see #removeRow(HSSFRow)     */    //public HSSFRow createRow(short rownum)    public HSSFRow createRow(int rownum)    {        HSSFRow row = new HSSFRow(book, sheet, rownum);        addRow(row, true);        return row;    }    /**     * Used internally to create a high level Row object from a low level row object.     * USed when reading an existing file     * @param row  low level record to represent as a high level Row and add to sheet     * @return HSSFRow high level representation     */    private HSSFRow createRowFromRecord(RowRecord row)    {        HSSFRow hrow = new HSSFRow(book, sheet, row);        addRow(hrow, false);        return hrow;    }    /**     * Remove a row from this sheet.  All cells contained in the row are removed as well     *     * @param row   representing a row to remove.     */    public void removeRow(HSSFRow row)    {        sheet.setLoc(sheet.getDimsLoc());        if (rows.size() > 0)        {            rows.remove(row);            if (row.getRowNum() == getLastRowNum())            {                lastrow = findLastRow(lastrow);            }            if (row.getRowNum() == getFirstRowNum())            {                firstrow = findFirstRow(firstrow);            }            Iterator iter = row.cellIterator();            while (iter.hasNext())            {                HSSFCell cell = (HSSFCell) iter.next();                sheet.removeValueRecord(row.getRowNum(),                        cell.getCellValueRecord());            }            sheet.removeRow(row.getRowRecord());        }    }    /**     * used internally to refresh the "last row" when the last row is removed.     */    private int findLastRow(int lastrow)    {        int rownum = lastrow - 1;        HSSFRow r = getRow(rownum);        while (r == null && rownum >= 0)        {            r = getRow(--rownum);        }        return rownum;    }    /**     * used internally to refresh the "first row" when the first row is removed.     */    private int findFirstRow(int firstrow)    {        int rownum = firstrow + 1;        HSSFRow r = getRow(rownum);        while (r == null && rownum <= getLastRowNum())        {            r = getRow(++rownum);        }        if (rownum > getLastRowNum())            return -1;        return rownum;    }    /**     * add a row to the sheet     *     * @param addLow whether to add the row to the low level model - false if its already there     */    private void addRow(HSSFRow row, boolean addLow)    {        rows.put(row, row);        if (addLow)        {            sheet.addRow(row.getRowRecord());        }        if (row.getRowNum() > getLastRowNum())        {            lastrow = row.getRowNum();        }        if (row.getRowNum() < getFirstRowNum())        {            firstrow = row.getRowNum();        }    }    /**     * Returns the logical row (not physical) 0-based.  If you ask for a row that is not     * defined you get a null.  This is to say row 4 represents the fifth row on a sheet.     * @param rownum  row to get     * @return HSSFRow representing the rownumber or null if its not defined on the sheet     */    public HSSFRow getRow(int rownum)    {        HSSFRow row = new HSSFRow();        //row.setRowNum((short) rownum);        row.setRowNum( rownum);        return (HSSFRow) rows.get(row);    }    /**     * Returns the number of phsyically defined rows (NOT the number of rows in the sheet)     */    public int getPhysicalNumberOfRows()    {        return rows.size();    }    /**     * gets the first row on the sheet     * @return the number of the first logical row on the sheet     */    public int getFirstRowNum()    {        return firstrow;    }    /**     * gets the last row on the sheet     * @return last row contained n this sheet.     */    public int getLastRowNum()    {        return lastrow;    }    /**     * set the width (in units of 1/256th of a character width)     * @param column - the column to set (0-based)     * @param width - the width in units of 1/256th of a character width

⌨️ 快捷键说明

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