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

📄 sheetreader.java

📁 一个非常有用的操作MCRSOFT EXCEL文件的工具。可以用JAVA方便的新建
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/***********************************************************************      Copyright (C) 2002 Andrew Khan** 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***************************************************************************/package jxl.read.biff;import java.util.ArrayList;import java.util.Iterator;import java.util.HashMap;import common.Assert;import common.Logger; import jxl.Cell;import jxl.DateCell;import jxl.CellType;import jxl.Range;import jxl.SheetSettings;import jxl.WorkbookSettings;import jxl.CellReferenceHelper;import jxl.HeaderFooter;import jxl.CellFeatures;import jxl.biff.Type;import jxl.biff.FormattingRecords;import jxl.biff.ContinueRecord;import jxl.biff.WorkspaceInformationRecord;import jxl.biff.drawing.Chart;import jxl.format.PaperSize;import jxl.format.PageOrientation;import jxl.biff.drawing.ObjRecord;import jxl.biff.drawing.MsoDrawingRecord;import jxl.biff.drawing.Drawing;import jxl.biff.drawing.Comment;import jxl.biff.drawing.DrawingData;import jxl.biff.drawing.TextObjectRecord;import jxl.biff.drawing.NoteRecord;/** * Reads the sheet.  This functionality was originally part of the * SheetImpl class, but was separated out in order to simplify the former * class */final class SheetReader{  /**   * The logger   */  private static Logger logger = Logger.getLogger(SheetReader.class);  /**   * The excel file   */  private File excelFile;  /**   * A handle to the shared string table   */  private SSTRecord sharedStrings;  /**   * A handle to the sheet BOF record, which indicates the stream type   */  private BOFRecord sheetBof;  /**   * A handle to the workbook BOF record, which indicates the stream type   */  private BOFRecord workbookBof;  /**   * A handle to the formatting records   */  private FormattingRecords formattingRecords;  /**   * The  number of rows   */  private int numRows;  /**   * The number of columns   */  private int numCols;  /**   * The cells   */  private Cell[][] cells;  /**   * The start position in the stream of this sheet   */  private int startPosition;  /**   * The list of non-default row properties   */  private ArrayList rowProperties;  /**   * An array of column info records.  They are held this way before   * they are transferred to the more convenient array   */  private ArrayList columnInfosArray;  /**   * A list of shared formula groups   */  private ArrayList sharedFormulas;  /**   * A list of hyperlinks on this page   */  private ArrayList hyperlinks;  /**   * A list of merged cells on this page   */  private Range[] mergedCells;  /**   * The list of data validations on this page   */  private DataValidation dataValidation;  /**   * The list of charts on this page   */  private ArrayList charts;  /**   * The list of drawings on this page   */  private ArrayList drawings;  /**   * The drawing data for the drawings   */  private DrawingData drawingData;  /**   * Indicates whether or not the dates are based around the 1904 date system   */  private boolean nineteenFour;  /**   * The PLS print record   */  private PLSRecord plsRecord;  /**   * The property set record associated with this workbook   */  private ButtonPropertySetRecord buttonPropertySet;  /**   * The workspace options   */  private WorkspaceInformationRecord workspaceOptions;  /**   * The horizontal page breaks contained on this sheet   */  private int[] rowBreaks;  /**   * The sheet settings   */  private SheetSettings settings;  /**   * The workbook settings   */  private WorkbookSettings workbookSettings;  /**   * A handle to the workbook which contains this sheet.  Some of the records   * need this in order to reference external sheets   */  private WorkbookParser workbook;  /**   * A handle to the sheet   */  private SheetImpl sheet;  /**   * Constructor   *   * @param fr the formatting records   * @param sst the shared string table   * @param f the excel file   * @param sb the bof record which indicates the start of the sheet   * @param wb the bof record which indicates the start of the sheet   * @param wp the workbook which this sheet belongs to   * @param sp the start position of the sheet bof in the excel file   * @param sh the sheet   * @param nf 1904 date record flag   * @exception BiffException   */  SheetReader(File f,              SSTRecord sst,              FormattingRecords fr,              BOFRecord sb,              BOFRecord wb,              boolean nf,              WorkbookParser wp,              int sp,              SheetImpl sh)  {    excelFile = f;    sharedStrings = sst;    formattingRecords = fr;    sheetBof = sb;    workbookBof = wb;    columnInfosArray = new ArrayList();    sharedFormulas = new ArrayList();    hyperlinks = new ArrayList();    rowProperties = new ArrayList(10);    charts = new ArrayList();    drawings = new ArrayList();    nineteenFour = nf;    workbook = wp;    startPosition = sp;    sheet = sh;    settings = new SheetSettings();    workbookSettings = workbook.getSettings();  }  /**   * Adds the cell to the array   *   * @param cell the cell to add   */  private void addCell(Cell cell)  {    // Sometimes multiple cells (eg. MULBLANK) can exceed the    // column/row boundaries.  Ignore these    if (cell.getRow() < numRows && cell.getColumn() < numCols)    {      if (cells[cell.getRow()][cell.getColumn()] != null)      {        StringBuffer sb = new StringBuffer();        CellReferenceHelper.getCellReference          (cell.getColumn(), cell.getRow(), sb);        logger.warn("Cell " + sb.toString() +                      " already contains data");      }      cells[cell.getRow()][cell.getColumn()] = cell;    }    else    {      logger.warn("Cell " +                   CellReferenceHelper.getCellReference                                   (cell.getColumn(), cell.getRow()) +                  " exceeds defined cell boundaries in Dimension record "+                  "(" + numCols + "x" + numRows + ")");    }  }  /**   * Reads in the contents of this sheet   */  final void read()  {    Record r = null;    BaseSharedFormulaRecord sharedFormula = null;    boolean sharedFormulaAdded = false;    boolean cont = true;    // Set the position within the file    excelFile.setPos(startPosition);    // Handles to the last drawing and obj records    MsoDrawingRecord msoRecord = null;    ObjRecord objRecord = null;    // A handle to window2 record    Window2Record window2Record = null;    // A handle to printgridlines record    PrintGridLinesRecord printGridLinesRecord = null;    // A handle to printheaders record    PrintHeadersRecord printHeadersRecord = null;    // Hash map of comments, indexed on objectId.  As each corresponding    // note record is encountered, these are removed from the array    HashMap comments = new HashMap();    while (cont)    {      r = excelFile.next();      if (r.getType() == Type.UNKNOWN && r.getCode() == 0)      {        logger.warn("Biff code zero found");        // Try a dimension record        if (r.getLength() == 0xa)        {          logger.warn("Biff code zero found - trying a dimension record.");          r.setType(Type.DIMENSION);        }        else        {          logger.warn("Biff code zero found - Ignoring.");        }      }      if (r.getType() == Type.DIMENSION)      {        DimensionRecord dr = null;        if (workbookBof.isBiff8())        {          dr = new DimensionRecord(r);        }        else        {          dr = new DimensionRecord(r, DimensionRecord.biff7);        }        numRows = dr.getNumberOfRows();        numCols = dr.getNumberOfColumns();        cells = new Cell[numRows][numCols];      }      else if (r.getType() == Type.LABELSST)      {        LabelSSTRecord label = new LabelSSTRecord(r,                                                  sharedStrings,                                                  formattingRecords,                                                  sheet);        addCell(label);      }      else if (r.getType() == Type.RK || r.getType() == Type.RK2)      {        RKRecord rkr = new RKRecord(r, formattingRecords, sheet);        if (formattingRecords.isDate(rkr.getXFIndex()))        {          DateCell dc = new DateRecord            (rkr, rkr.getXFIndex(), formattingRecords, nineteenFour, sheet);          addCell(dc);        }        else        {          addCell(rkr);        }      }      else if (r.getType() == Type.HLINK)      {        HyperlinkRecord hr = new HyperlinkRecord(r, sheet, workbookSettings);        hyperlinks.add(hr);      }      else if (r.getType() == Type.MERGEDCELLS)      {        MergedCellsRecord  mc = new MergedCellsRecord(r, sheet);        if (mergedCells == null)        {          mergedCells = mc.getRanges();        }        else        {          Range[] newMergedCells =            new Range[mergedCells.length + mc.getRanges().length];          System.arraycopy(mergedCells, 0, newMergedCells, 0,                           mergedCells.length);          System.arraycopy(mc.getRanges(),                           0,                           newMergedCells, mergedCells.length,                           mc.getRanges().length);          mergedCells = newMergedCells;        }      }      else if (r.getType() == Type.MULRK)      {        MulRKRecord mulrk = new MulRKRecord(r);        // Get the individual cell records from the multiple record        int num = mulrk.getNumberOfColumns();        int ixf = 0;        for (int i = 0; i < num; i++)        {          ixf = mulrk.getXFIndex(i);          NumberValue nv = new NumberValue            (mulrk.getRow(),             mulrk.getFirstColumn() + i,             RKHelper.getDouble(mulrk.getRKNumber(i)),             ixf,             formattingRecords,             sheet);          if (formattingRecords.isDate(ixf))          {            DateCell dc = new DateRecord(nv, ixf, formattingRecords,                                         nineteenFour, sheet);            addCell(dc);          }          else          {            nv.setNumberFormat(formattingRecords.getNumberFormat(ixf));

⌨️ 快捷键说明

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