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

📄 workbookparser.java

📁 jxtl API Java中Excel的生成与导入解析参考文档
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
      return sheetName.indexOf(' ') == -1 ? sheetName :         '\'' + sheetName + '\'';    }    else if (sr.getType() == SupbookRecord.EXTERNAL)    {      // External reference - get the sheet name from the supbook record      StringBuffer sb = new StringBuffer();      java.io.File fl = new java.io.File(sr.getFileName());      sb.append("'");      sb.append(fl.getAbsolutePath());      sb.append("[");      sb.append(fl.getName());      sb.append("]");      sb.append((firstTab == 65535) ? "#REF" : sr.getSheetName(firstTab));      if (lastTab != firstTab)      {        sb.append(sr.getSheetName(lastTab));      }      sb.append("'");      return sb.toString();    }    // An unknown supbook - return unkown    return "[UNKNOWN]";  }  /**   * Gets the name of the external sheet specified by the index   *   * @param index the external sheet index   * @return the name of the external sheet   */  public String getLastExternalSheetName(int index)  {    // For biff7, the whole external reference thing works differently    // Hopefully for our purposes sheet references will all be local    if (workbookBof.isBiff7())    {      BoundsheetRecord br = (BoundsheetRecord) boundsheets.get(index);      return br.getName();    }    int supbookIndex = externSheet.getSupbookIndex(index);    SupbookRecord sr = (SupbookRecord) supbooks.get(supbookIndex);    int lastTab = externSheet.getLastTabIndex(index);    if (sr.getType() == SupbookRecord.INTERNAL)    {      // It's an internal reference - get the name from the boundsheets list       if (lastTab == 65535)       {         return "#REF";       }       else       {         BoundsheetRecord br = (BoundsheetRecord) boundsheets.get(lastTab);         return br.getName();       }    }    else if (sr.getType() == SupbookRecord.EXTERNAL)    {      // External reference - get the sheet name from the supbook record      StringBuffer sb = new StringBuffer();      java.io.File fl = new java.io.File(sr.getFileName());      sb.append("'");      sb.append(fl.getAbsolutePath());      sb.append("[");      sb.append(fl.getName());      sb.append("]");      sb.append((lastTab == 65535) ? "#REF" : sr.getSheetName(lastTab));      sb.append("'");      return sb.toString();    }    // An unknown supbook - return unkown    return "[UNKNOWN]";  }  /**   * Returns the number of sheets in this workbook   *   * @return the number of sheets in this workbook   */  public int getNumberOfSheets()  {    return sheets.size();  }  /**   * Closes this workbook, and frees makes any memory allocated available   * for garbage collection   */  public void close()  {    if (lastSheet != null)    {      lastSheet.clear();    }    excelFile.clear();    if (!settings.getGCDisabled())    {      System.gc();    }  }  /**   * Adds the sheet to the end of the array   *   * @param s the sheet to add   */  final void addSheet(Sheet s)  {    sheets.add(s);  }  /**   * Does the hard work of building up the object graph from the excel bytes   *   * @exception BiffException   * @exception PasswordException if the workbook is password protected   */  protected void parse() throws BiffException, PasswordException  {    Record r = null;    BOFRecord bof = new BOFRecord(excelFile.next());    workbookBof = bof;    bofs++;    if (!bof.isBiff8() && !bof.isBiff7())    {      throw new BiffException(BiffException.unrecognizedBiffVersion);    }    if (!bof.isWorkbookGlobals())    {      throw new BiffException(BiffException.expectedGlobals);    }    ArrayList continueRecords = new ArrayList();    ArrayList localNames = new ArrayList();    nameTable = new ArrayList();    addInFunctions = new ArrayList();    // Skip to the firs worksheet    while (bofs == 1)    {      r = excelFile.next();      if (r.getType() == Type.SST)      {        continueRecords.clear();        Record nextrec = excelFile.peek();        while (nextrec.getType() == Type.CONTINUE)        {          continueRecords.add(excelFile.next());          nextrec = excelFile.peek();        }        // cast the array        Record[] records = new Record[continueRecords.size()];        records = (Record[]) continueRecords.toArray(records);        sharedStrings = new SSTRecord(r, records, settings);      }      else if (r.getType() == Type.FILEPASS)      {        throw new PasswordException();      }      else if (r.getType() == Type.NAME)      {        NameRecord nr = null;        if (bof.isBiff8())        {          nr = new NameRecord(r, settings, namedRecords.size());                }        else        {          nr = new NameRecord(r, settings, namedRecords.size(),                              NameRecord.biff7);        }        if (nr.isGlobal())        {          namedRecords.put(nr.getName(), nr);          nameTable.add(nr);        }        else        {          localNames.add(nr);        }      }      else if (r.getType() == Type.FONT)      {        FontRecord fr = null;        if (bof.isBiff8())        {          fr = new FontRecord(r, settings);        }        else        {          fr = new FontRecord(r, settings, FontRecord.biff7);        }        fonts.addFont(fr);      }      else if (r.getType() == Type.PALETTE)      {        PaletteRecord palette = new PaletteRecord(r);        formattingRecords.setPalette(palette);      }      else if (r.getType() == Type.NINETEENFOUR)      {        NineteenFourRecord nr = new NineteenFourRecord(r);        nineteenFour = nr.is1904();      }      else if (r.getType() == Type.FORMAT)      {        FormatRecord fr = null;        if (bof.isBiff8())        {          fr = new FormatRecord(r, settings, FormatRecord.biff8);        }        else        {          fr = new FormatRecord(r, settings, FormatRecord.biff7);        }        try        {          formattingRecords.addFormat(fr);        }        catch (NumFormatRecordsException e)        {          e.printStackTrace();          // This should not happen.  Bomb out          Assert.verify(false, e.getMessage());        }      }      else if (r.getType() == Type.XF)      {        XFRecord xfr = null;        if (bof.isBiff8())        {          xfr = new XFRecord(r, settings, XFRecord.biff8);        }        else        {          xfr = new XFRecord(r, settings, XFRecord.biff7);        }        try        {          formattingRecords.addStyle(xfr);        }        catch (NumFormatRecordsException e)        {          // This should not happen.  Bomb out          Assert.verify(false, e.getMessage());        }      }      else if (r.getType() == Type.BOUNDSHEET)      {        BoundsheetRecord br = null;        if (bof.isBiff8())        {          br = new BoundsheetRecord(r);        }        else        {          br = new BoundsheetRecord(r, BoundsheetRecord.biff7);        }        if (br.isSheet())        {          boundsheets.add(br);        }        else if (br.isChart() && !settings.getDrawingsDisabled())        {          boundsheets.add(br);        }      }      else if (r.getType() == Type.EXTERNSHEET)      {        if (bof.isBiff8())        {          externSheet = new ExternalSheetRecord(r, settings);        }        else        {          externSheet = new ExternalSheetRecord(r, settings,                                                ExternalSheetRecord.biff7);        }      }      else if (r.getType() == Type.CODEPAGE)      {        CodepageRecord cr = new CodepageRecord(r);        settings.setCharacterSet(cr.getCharacterSet());      }      else if (r.getType() == Type.SUPBOOK)      {        Record nextrec = excelFile.peek();        while (nextrec.getType() == Type.CONTINUE)        {          r.addContinueRecord(excelFile.next());          nextrec = excelFile.peek();        }        SupbookRecord sr = new SupbookRecord(r, settings);        supbooks.add(sr);      }      else if (r.getType() == Type.EXTERNNAME)      {        ExternalNameRecord enr = new ExternalNameRecord(r, settings);        if (enr.isAddInFunction())        {          addInFunctions.add(enr.getName());        }      }      else if (r.getType() == Type.PROTECT)      {        ProtectRecord pr = new ProtectRecord(r);        wbProtected = pr.isProtected();      }      else if (r.getType() == Type.OBJPROJ)      {        containsMacros = true;      }      else if (r.getType() == Type.COUNTRY)      {        countryRecord = new CountryRecord(r);      }      else if (r.getType() == Type.MSODRAWINGGROUP)      {        if (!settings.getDrawingsDisabled())        {          msoDrawingGroup = new MsoDrawingGroupRecord(r);          if (drawingGroup == null)          {            drawingGroup = new DrawingGroup(Origin.READ);          }          drawingGroup.add(msoDrawingGroup);          Record nextrec = excelFile.peek();          while (nextrec.getType() == Type.CONTINUE)          {            drawingGroup.add(excelFile.next());            nextrec = excelFile.peek();          }        }      }      else if (r.getType() == Type.BUTTONPROPERTYSET)      {        buttonPropertySet = new ButtonPropertySetRecord(r);      }      else if (r.getType() == Type.EOF)      {        bofs--;      }    }    bof = null;    if (excelFile.hasNext())    {      r = excelFile.next();      if (r.getType() == Type.BOF)      {        bof = new BOFRecord(r);      }    }    // Only get sheets for which there is a corresponding Boundsheet record    while (bof != null && getNumberOfSheets() < boundsheets.size())    {      if (!bof.isBiff8() && !bof.isBiff7())      {        throw new BiffException(BiffException.unrecognizedBiffVersion);      }      if (bof.isWorksheet())      {        // Read the sheet in        SheetImpl s = new SheetImpl(excelFile,                                    sharedStrings,                                    formattingRecords,                                    bof,                                    workbookBof,                                    nineteenFour,                                    this);        BoundsheetRecord br = (BoundsheetRecord) boundsheets.get          (getNumberOfSheets());        s.setName(br.getName());        s.setHidden(br.isHidden());        addSheet(s);      }      else if (bof.isChart())      {        // Read the sheet in        SheetImpl s = new SheetImpl(excelFile,                                    sharedStrings,                                    formattingRecords,                                    bof,                                    workbookBof,

⌨️ 快捷键说明

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