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

📄 #!ediff-merge!7!!#3588tqu#

📁 jxtl API Java中Excel的生成与导入解析参考文档
💻
字号:
/***********************************************************************      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.write.biff;import jxl.biff.BuiltInName;import jxl.biff.IntegerHelper;import jxl.biff.StringHelper;import jxl.biff.Type;import jxl.biff.WritableRecordData;/** * A name record.  Simply takes the binary data from the name * record read in */class NameRecord extends WritableRecordData{  /**   * The binary data for output to file   */  private byte[] data;  /**   * The name   */  private String name;  /**   * The built in name   */  private BuiltInName builtInName;  /**   * The index into the name table   */  private int index;    /**   * The 0-based index sheet reference for a record name   *     0 is for a global reference   */  private int sheetRef = 0;  /**    * A nested class to hold range information   */  class NameRange  {    private int columnFirst;    private int rowFirst;    private int columnLast;    private int rowLast;    private int externalSheet;    NameRange(jxl.read.biff.NameRecord.NameRange nr)    {      columnFirst = nr.getFirstColumn();      rowFirst = nr.getFirstRow();      columnLast = nr.getLastColumn();      rowLast = nr.getLastRow();      externalSheet = nr.getExternalSheet();    }        /**     * Create a new range for the name record.     */    NameRange(int extSheet,               int theStartRow,               int theEndRow,              int theStartCol,               int theEndCol)    {      columnFirst = theStartCol;      rowFirst = theStartRow;      columnLast = theEndCol;      rowLast = theEndRow;      externalSheet = extSheet;    }    int getFirstColumn() {return columnFirst;}    int getFirstRow() {return rowFirst;}    int getLastColumn() {return columnLast;}    int getLastRow() {return rowLast;}    int getExternalSheet() { return externalSheet;}    byte[] getData()    {      byte[] d = new byte[10];      // Sheet index      IntegerHelper.getTwoBytes(externalSheet, d, 0);      // Starting row      IntegerHelper.getTwoBytes(rowFirst, d, 2);            // End row      IntegerHelper.getTwoBytes(rowLast, d, 4);            // Start column      IntegerHelper.getTwoBytes(columnFirst & 0xff, d, 6);      // End columns      IntegerHelper.getTwoBytes(columnLast & 0xff, d, 8);      return d;    }  }  /**   * The ranges covered by this name   */  private NameRange[] ranges;  // Constants which refer to the parse tokens after the string  private static final int cellReference = 0x3a;  private static final int areaReference = 0x3b;  private static final int subExpression = 0x29;  private static final int union         = 0x10;  /**   * Constructor - used when copying sheets   *   * @param index the index into the name table   */  public NameRecord(jxl.read.biff.NameRecord sr, int ind)  {    super(Type.NAME);    data = sr.getData();    name = sr.getName();    sheetRef = sr.getSheetRef();    index = ind;    // Copy the ranges    jxl.read.biff.NameRecord.NameRange[] r = sr.getRanges();    ranges = new NameRange[r.length];    for (int i = 0 ; i < ranges.length ; i++)    {      ranges[i] = new NameRange(r[i]);    }  }  /**   * Create a new name record with the given information.   *    * @param theName      Name to be created.   * @param theIndex     Index of this name.   * @param extSheet     External sheet index this name refers to.   * @param theStartRow  First row this name refers to.   * @param theEndRow    Last row this name refers to.   * @param theStartCol  First column this name refers to.   * @param theEndCol    Last column this name refers to.   * @param global       TRUE if this is a global name   */  NameRecord(String theName,              int theIndex,              int extSheet,              int theStartRow,              int theEndRow,              int theStartCol,              int theEndCol,             boolean global)  {     super(Type.NAME);    name = theName;    index = theIndex;    sheetRef = global ? 0 : index+1; // 0 indicates a global name, otherwise                                     // the 1-based index of the sheet    ranges = new NameRange[1];    ranges[0] = new NameRange(extSheet,                               theStartRow,                               theEndRow,                               theStartCol,                               theEndCol);  }  /**   * Create a new name record with the given information.   *    * @param theName      Name to be created.   * @param theIndex     Index of this name.   * @param extSheet     External sheet index this name refers to.   * @param theStartRow  First row this name refers to.   * @param theEndRow    Last row this name refers to.   * @param theStartCol  First column this name refers to.   * @param theEndCol    Last column this name refers to.   * @param global       TRUE if this is a global name   */  NameRecord(BuiltInName theName,              int theIndex,              int extSheet,              int theStartRow,              int theEndRow,              int theStartCol,              int theEndCol,             boolean global)  {     super(Type.NAME);    builtInName = theName;    index = theIndex;    sheetRef = global ? 0 : index + 1; // 0 indicates a global name, otherwise                                       // the 1-based index of the sheet    ranges = new NameRange[1];    ranges[0] = new NameRange(extSheet,                               theStartRow,                               theEndRow,                               theStartCol,                               theEndCol);  }  /**   * Create a new name record with the given information for 2-range entities.   *    * @param theName      Name to be created.   * @param theIndex     Index of this name.   * @param extSheet     External sheet index this name refers to.   * @param theStartRow  First row this name refers to.   * @param theEndRow    Last row this name refers to.   * @param theStartCol  First column this name refers to.   * @param theEndCol    Last column this name refers to.   * @param theStartRow2 First row this name refers to (2nd instance).   * @param theEndRow2   Last row this name refers to (2nd instance).   * @param theStartCol2 First column this name refers to (2nd instance).   * @param theEndCol2   Last column this name refers to (2nd instance).    * @param global       TRUE if this is a global name   */  NameRecord(BuiltInName theName,              int theIndex,              int extSheet,              int theStartRow,              int theEndRow,              int theStartCol,              int theEndCol,             int theStartRow2,                          int theEndRow2,              int theStartCol2,              int theEndCol2,             boolean global)  {     super(Type.NAME);    builtInName = theName;    index = theIndex;    sheetRef = global ? 0 : index + 1; // 0 indicates a global name, otherwise                                       // the 1-based index of the sheet    ranges = new NameRange[2];    ranges[0] = new NameRange(extSheet,                               theStartRow,                               theEndRow,                               theStartCol,                               theEndCol);    ranges[1] = new NameRange(extSheet,             				  theStartRow2,             				  theEndRow2,             				  theStartCol2,             				  theEndCol2);      }      /**   * Gets the binary data for output to file   *   * @return the binary data   */  public byte[] getData()  {    if (data != null)    {      // this is a copy      return data;    }    final int NAME_HEADER_LENGTH = 15;    final byte AREA_RANGE_LENGTH = 11;    final byte AREA_REFERENCE = 0x3b;    int detailLength;        if (ranges.length > 1)    {      detailLength = (ranges.length * AREA_RANGE_LENGTH) + 4;    }    else    {      detailLength = AREA_RANGE_LENGTH;    }    int length = NAME_HEADER_LENGTH + detailLength;        length += builtInName != null ? 1 : name.length();    data = new byte[length];<<<<<<< variant A<<<<<<< variant A>>>>>>> variant B======= end    <<<<<<< variant A>>>>>>> variant B======= end>>>>>>> variant B======= end    // Options    int options = 0;    if (builtInName != null)    {      options |= 0x20;    }    IntegerHelper.getTwoBytes(options, data, 0);    // Keyboard shortcut    data[2] = 0;    // Length of the name in chars    if (builtInName != null)    {      data[3] = (byte) 0x1;    }    else    {      data[3] = (byte) name.length();        }    // Size of the definitions    IntegerHelper.getTwoBytes(detailLength, data, 4);    // Sheet index    IntegerHelper.getTwoBytes(sheetRef, data, 6);    IntegerHelper.getTwoBytes(sheetRef, data, 8);    // Byte 10-13 are optional lengths [0,0,0,0]        // Byte 14 is length of name which is not used.        // The name    if (builtInName != null)    {      data[15] = (byte) builtInName.getValue();    }    else    {      StringHelper.getBytes(name, data, 15);    }    // The actual range definition.    int pos = builtInName != null ? 16 : name.length() + 15;    // If there are multiple ranges for the name, we must specify a subExpression type    // rather than areaReference and then put out multiple areaReference entries with an end byte.    if (ranges.length > 1)    {        data[pos++] = subExpression;        // Length of remaining bytes excluding itself        IntegerHelper.getTwoBytes(detailLength - 3, data, pos);        pos += 2;        byte[] rd;        for (int i = 0 ; i < ranges.length ; i++)        {            data[pos++] = areaReference;            rd = ranges[i].getData();                    System.arraycopy(rd, 0, data, pos, rd.length);            pos += rd.length;        }        data[pos] = 0x10;    }    else    {        // Range format - area        data[pos] = areaReference;        // The range data        byte[] rd = ranges[0].getData();        System.arraycopy(rd, 0, data, pos+1, rd.length);    }    return data;  }  /**   * Accessor for the name    *   * @return the name   */  public String getName()  {    return name;  }  /**   * Accessor for the index of this name in the name table   *   * @return the index of this name in the name table   */  public int getIndex()  {    return index;  }    /**   * The 0-based index sheet reference for a record name   *     0 is for a global reference   *   * @return the sheet reference for name formula   */  public int getSheetRef()  {    return sheetRef;  }    /**   * Set the index sheet reference for a record name   *     0 is for a global reference   *   */  public void setSheetRef(int i)  {    sheetRef = i;    IntegerHelper.getTwoBytes(sheetRef, data, 8);  }  /**   * Gets the array of ranges for this name   * @return the ranges   */  public NameRange[] getRanges()  {    return ranges;  }}

⌨️ 快捷键说明

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