first commit
This commit is contained in:
460
hrmsEjb/jxl/read/biff/SheetImpl.java
Normal file
460
hrmsEjb/jxl/read/biff/SheetImpl.java
Normal file
@@ -0,0 +1,460 @@
|
||||
package jxl.read.biff;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import jxl.Cell;
|
||||
import jxl.CellType;
|
||||
import jxl.CellView;
|
||||
import jxl.Hyperlink;
|
||||
import jxl.Image;
|
||||
import jxl.LabelCell;
|
||||
import jxl.Range;
|
||||
import jxl.Sheet;
|
||||
import jxl.SheetSettings;
|
||||
import jxl.WorkbookSettings;
|
||||
import jxl.biff.CellReferenceHelper;
|
||||
import jxl.biff.EmptyCell;
|
||||
import jxl.biff.FormattingRecords;
|
||||
import jxl.biff.Type;
|
||||
import jxl.biff.WorkspaceInformationRecord;
|
||||
import jxl.biff.drawing.Chart;
|
||||
import jxl.biff.drawing.DrawingData;
|
||||
import jxl.biff.drawing.DrawingGroupObject;
|
||||
import jxl.format.CellFormat;
|
||||
|
||||
public class SheetImpl implements Sheet {
|
||||
private File excelFile;
|
||||
|
||||
private SSTRecord sharedStrings;
|
||||
|
||||
private BOFRecord sheetBof;
|
||||
|
||||
private BOFRecord workbookBof;
|
||||
|
||||
private FormattingRecords formattingRecords;
|
||||
|
||||
private String name;
|
||||
|
||||
private int numRows;
|
||||
|
||||
private int numCols;
|
||||
|
||||
private Cell[][] cells;
|
||||
|
||||
private int startPosition;
|
||||
|
||||
private ColumnInfoRecord[] columnInfos;
|
||||
|
||||
private RowRecord[] rowRecords;
|
||||
|
||||
private ArrayList rowProperties;
|
||||
|
||||
private ArrayList columnInfosArray;
|
||||
|
||||
private ArrayList sharedFormulas;
|
||||
|
||||
private ArrayList hyperlinks;
|
||||
|
||||
private ArrayList charts;
|
||||
|
||||
private ArrayList drawings;
|
||||
|
||||
private ArrayList images;
|
||||
|
||||
private DataValidation dataValidation;
|
||||
|
||||
private Range[] mergedCells;
|
||||
|
||||
private boolean columnInfosInitialized;
|
||||
|
||||
private boolean rowRecordsInitialized;
|
||||
|
||||
private boolean nineteenFour;
|
||||
|
||||
private WorkspaceInformationRecord workspaceOptions;
|
||||
|
||||
private boolean hidden;
|
||||
|
||||
private PLSRecord plsRecord;
|
||||
|
||||
private ButtonPropertySetRecord buttonPropertySet;
|
||||
|
||||
private SheetSettings settings;
|
||||
|
||||
private int[] rowBreaks;
|
||||
|
||||
private WorkbookParser workbook;
|
||||
|
||||
private WorkbookSettings workbookSettings;
|
||||
|
||||
SheetImpl(File f, SSTRecord sst, FormattingRecords fr, BOFRecord sb, BOFRecord wb, boolean nf, WorkbookParser wp) throws BiffException {
|
||||
this.excelFile = f;
|
||||
this.sharedStrings = sst;
|
||||
this.formattingRecords = fr;
|
||||
this.sheetBof = sb;
|
||||
this.workbookBof = wb;
|
||||
this.columnInfosArray = new ArrayList();
|
||||
this.sharedFormulas = new ArrayList();
|
||||
this.hyperlinks = new ArrayList();
|
||||
this.rowProperties = new ArrayList(10);
|
||||
this.columnInfosInitialized = false;
|
||||
this.rowRecordsInitialized = false;
|
||||
this.nineteenFour = nf;
|
||||
this.workbook = wp;
|
||||
this.workbookSettings = this.workbook.getSettings();
|
||||
this.startPosition = f.getPos();
|
||||
if (this.sheetBof.isChart())
|
||||
this.startPosition -= this.sheetBof.getLength() + 4;
|
||||
Record r = null;
|
||||
int bofs = 1;
|
||||
while (bofs >= 1) {
|
||||
r = f.next();
|
||||
if (r.getCode() == Type.EOF.value)
|
||||
bofs--;
|
||||
if (r.getCode() == Type.BOF.value)
|
||||
bofs++;
|
||||
}
|
||||
}
|
||||
|
||||
public Cell getCell(String loc) {
|
||||
return getCell(CellReferenceHelper.getColumn(loc), CellReferenceHelper.getRow(loc));
|
||||
}
|
||||
|
||||
public Cell getCell(int column, int row) {
|
||||
EmptyCell emptyCell;
|
||||
if (this.cells == null)
|
||||
readSheet();
|
||||
Cell c = this.cells[row][column];
|
||||
if (c == null) {
|
||||
emptyCell = new EmptyCell(column, row);
|
||||
this.cells[row][column] = (Cell)emptyCell;
|
||||
}
|
||||
return (Cell)emptyCell;
|
||||
}
|
||||
|
||||
public Cell findCell(String contents) {
|
||||
Cell cell = null;
|
||||
boolean found = false;
|
||||
for (int i = 0; i < getRows() && !found; i++) {
|
||||
Cell[] row = getRow(i);
|
||||
for (int j = 0; j < row.length && !found; j++) {
|
||||
if (row[j].getContents().equals(contents)) {
|
||||
cell = row[j];
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return cell;
|
||||
}
|
||||
|
||||
public LabelCell findLabelCell(String contents) {
|
||||
LabelCell cell = null;
|
||||
boolean found = false;
|
||||
for (int i = 0; i < getRows() && !found; i++) {
|
||||
Cell[] row = getRow(i);
|
||||
for (int j = 0; j < row.length && !found; j++) {
|
||||
if ((row[j].getType() == CellType.LABEL || row[j].getType() == CellType.STRING_FORMULA) && row[j].getContents().equals(contents)) {
|
||||
cell = (LabelCell)row[j];
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return cell;
|
||||
}
|
||||
|
||||
public int getRows() {
|
||||
if (this.cells == null)
|
||||
readSheet();
|
||||
return this.numRows;
|
||||
}
|
||||
|
||||
public int getColumns() {
|
||||
if (this.cells == null)
|
||||
readSheet();
|
||||
return this.numCols;
|
||||
}
|
||||
|
||||
public Cell[] getRow(int row) {
|
||||
if (this.cells == null)
|
||||
readSheet();
|
||||
boolean found = false;
|
||||
int col = this.numCols - 1;
|
||||
while (col >= 0 && !found) {
|
||||
if (this.cells[row][col] != null) {
|
||||
found = true;
|
||||
continue;
|
||||
}
|
||||
col--;
|
||||
}
|
||||
Cell[] c = new Cell[col + 1];
|
||||
for (int i = 0; i <= col; i++)
|
||||
c[i] = getCell(i, row);
|
||||
return c;
|
||||
}
|
||||
|
||||
public Cell[] getColumn(int col) {
|
||||
if (this.cells == null)
|
||||
readSheet();
|
||||
boolean found = false;
|
||||
int row = this.numRows - 1;
|
||||
while (row >= 0 && !found) {
|
||||
if (this.cells[row][col] != null) {
|
||||
found = true;
|
||||
continue;
|
||||
}
|
||||
row--;
|
||||
}
|
||||
Cell[] c = new Cell[row + 1];
|
||||
for (int i = 0; i <= row; i++)
|
||||
c[i] = getCell(col, i);
|
||||
return c;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
final void setName(String s) {
|
||||
this.name = s;
|
||||
}
|
||||
|
||||
public boolean isHidden() {
|
||||
return this.hidden;
|
||||
}
|
||||
|
||||
public ColumnInfoRecord getColumnInfo(int col) {
|
||||
if (!this.columnInfosInitialized) {
|
||||
Iterator i = this.columnInfosArray.iterator();
|
||||
ColumnInfoRecord cir = null;
|
||||
while (i.hasNext()) {
|
||||
cir = i.next();
|
||||
int startcol = Math.max(0, cir.getStartColumn());
|
||||
int endcol = Math.min(this.columnInfos.length - 1, cir.getEndColumn());
|
||||
for (int c = startcol; c <= endcol; c++)
|
||||
this.columnInfos[c] = cir;
|
||||
if (endcol < startcol)
|
||||
this.columnInfos[startcol] = cir;
|
||||
}
|
||||
this.columnInfosInitialized = true;
|
||||
}
|
||||
return (col < this.columnInfos.length) ? this.columnInfos[col] : null;
|
||||
}
|
||||
|
||||
public ColumnInfoRecord[] getColumnInfos() {
|
||||
ColumnInfoRecord[] infos = new ColumnInfoRecord[this.columnInfosArray.size()];
|
||||
for (int i = 0; i < this.columnInfosArray.size(); i++)
|
||||
infos[i] = this.columnInfosArray.get(i);
|
||||
return infos;
|
||||
}
|
||||
|
||||
final void setHidden(boolean h) {
|
||||
this.hidden = h;
|
||||
}
|
||||
|
||||
final void clear() {
|
||||
this.cells = (Cell[][])null;
|
||||
this.mergedCells = null;
|
||||
this.columnInfosArray.clear();
|
||||
this.sharedFormulas.clear();
|
||||
this.hyperlinks.clear();
|
||||
this.columnInfosInitialized = false;
|
||||
if (!this.workbookSettings.getGCDisabled())
|
||||
System.gc();
|
||||
}
|
||||
|
||||
final void readSheet() {
|
||||
if (!this.sheetBof.isWorksheet()) {
|
||||
this.numRows = 0;
|
||||
this.numCols = 0;
|
||||
this.cells = new Cell[0][0];
|
||||
}
|
||||
SheetReader reader = new SheetReader(this.excelFile, this.sharedStrings, this.formattingRecords, this.sheetBof, this.workbookBof, this.nineteenFour, this.workbook, this.startPosition, this);
|
||||
reader.read();
|
||||
this.numRows = reader.getNumRows();
|
||||
this.numCols = reader.getNumCols();
|
||||
this.cells = reader.getCells();
|
||||
this.rowProperties = reader.getRowProperties();
|
||||
this.columnInfosArray = reader.getColumnInfosArray();
|
||||
this.hyperlinks = reader.getHyperlinks();
|
||||
this.charts = reader.getCharts();
|
||||
this.drawings = reader.getDrawings();
|
||||
this.dataValidation = reader.getDataValidation();
|
||||
this.mergedCells = reader.getMergedCells();
|
||||
this.settings = reader.getSettings();
|
||||
this.settings.setHidden(this.hidden);
|
||||
this.rowBreaks = reader.getRowBreaks();
|
||||
this.workspaceOptions = reader.getWorkspaceOptions();
|
||||
this.plsRecord = reader.getPLS();
|
||||
this.buttonPropertySet = reader.getButtonPropertySet();
|
||||
reader = null;
|
||||
if (!this.workbookSettings.getGCDisabled())
|
||||
System.gc();
|
||||
if (this.columnInfosArray.size() > 0) {
|
||||
ColumnInfoRecord cir = this.columnInfosArray.get(this.columnInfosArray.size() - 1);
|
||||
this.columnInfos = new ColumnInfoRecord[cir.getEndColumn() + 1];
|
||||
} else {
|
||||
this.columnInfos = new ColumnInfoRecord[0];
|
||||
}
|
||||
}
|
||||
|
||||
public Hyperlink[] getHyperlinks() {
|
||||
Hyperlink[] hl = new Hyperlink[this.hyperlinks.size()];
|
||||
for (int i = 0; i < this.hyperlinks.size(); i++)
|
||||
hl[i] = this.hyperlinks.get(i);
|
||||
return hl;
|
||||
}
|
||||
|
||||
public Range[] getMergedCells() {
|
||||
if (this.mergedCells == null)
|
||||
return new Range[0];
|
||||
return this.mergedCells;
|
||||
}
|
||||
|
||||
public RowRecord[] getRowProperties() {
|
||||
RowRecord[] rp = new RowRecord[this.rowProperties.size()];
|
||||
for (int i = 0; i < rp.length; i++)
|
||||
rp[i] = this.rowProperties.get(i);
|
||||
return rp;
|
||||
}
|
||||
|
||||
public DataValidation getDataValidation() {
|
||||
return this.dataValidation;
|
||||
}
|
||||
|
||||
RowRecord getRowInfo(int r) {
|
||||
if (!this.rowRecordsInitialized) {
|
||||
this.rowRecords = new RowRecord[getRows()];
|
||||
Iterator i = this.rowProperties.iterator();
|
||||
int rownum = 0;
|
||||
RowRecord rr = null;
|
||||
while (i.hasNext()) {
|
||||
rr = i.next();
|
||||
rownum = rr.getRowNumber();
|
||||
if (rownum < this.rowRecords.length)
|
||||
this.rowRecords[rownum] = rr;
|
||||
}
|
||||
this.rowRecordsInitialized = true;
|
||||
}
|
||||
return this.rowRecords[r];
|
||||
}
|
||||
|
||||
public final int[] getRowPageBreaks() {
|
||||
return this.rowBreaks;
|
||||
}
|
||||
|
||||
public final Chart[] getCharts() {
|
||||
Chart[] ch = new Chart[this.charts.size()];
|
||||
for (int i = 0; i < ch.length; i++)
|
||||
ch[i] = this.charts.get(i);
|
||||
return ch;
|
||||
}
|
||||
|
||||
public final DrawingGroupObject[] getDrawings() {
|
||||
DrawingGroupObject[] dr = new DrawingGroupObject[this.drawings.size()];
|
||||
dr = (DrawingGroupObject[])this.drawings.toArray((Object[])dr);
|
||||
return dr;
|
||||
}
|
||||
|
||||
public boolean isProtected() {
|
||||
return this.settings.isProtected();
|
||||
}
|
||||
|
||||
public WorkspaceInformationRecord getWorkspaceOptions() {
|
||||
return this.workspaceOptions;
|
||||
}
|
||||
|
||||
public SheetSettings getSettings() {
|
||||
return this.settings;
|
||||
}
|
||||
|
||||
WorkbookParser getWorkbook() {
|
||||
return this.workbook;
|
||||
}
|
||||
|
||||
public CellFormat getColumnFormat(int col) {
|
||||
CellView cv = getColumnView(col);
|
||||
return cv.getFormat();
|
||||
}
|
||||
|
||||
public int getColumnWidth(int col) {
|
||||
return getColumnView(col).getSize() / 256;
|
||||
}
|
||||
|
||||
public CellView getColumnView(int col) {
|
||||
ColumnInfoRecord cir = getColumnInfo(col);
|
||||
CellView cv = new CellView();
|
||||
if (cir != null) {
|
||||
cv.setDimension(cir.getWidth() / 256);
|
||||
cv.setSize(cir.getWidth());
|
||||
cv.setHidden(cir.getHidden());
|
||||
cv.setFormat((CellFormat)this.formattingRecords.getXFRecord(cir.getXFIndex()));
|
||||
} else {
|
||||
cv.setDimension(this.settings.getDefaultColumnWidth() / 256);
|
||||
cv.setSize(this.settings.getDefaultColumnWidth());
|
||||
}
|
||||
return cv;
|
||||
}
|
||||
|
||||
public int getRowHeight(int row) {
|
||||
return getRowView(row).getDimension();
|
||||
}
|
||||
|
||||
public CellView getRowView(int row) {
|
||||
RowRecord rr = getRowInfo(row);
|
||||
CellView cv = new CellView();
|
||||
if (rr != null) {
|
||||
cv.setDimension(rr.getRowHeight());
|
||||
cv.setSize(rr.getRowHeight());
|
||||
cv.setHidden(rr.isCollapsed());
|
||||
} else {
|
||||
cv.setDimension(this.settings.getDefaultRowHeight());
|
||||
cv.setSize(this.settings.getDefaultRowHeight());
|
||||
}
|
||||
return cv;
|
||||
}
|
||||
|
||||
public BOFRecord getSheetBof() {
|
||||
return this.sheetBof;
|
||||
}
|
||||
|
||||
public BOFRecord getWorkbookBof() {
|
||||
return this.workbookBof;
|
||||
}
|
||||
|
||||
public PLSRecord getPLS() {
|
||||
return this.plsRecord;
|
||||
}
|
||||
|
||||
public ButtonPropertySetRecord getButtonPropertySet() {
|
||||
return this.buttonPropertySet;
|
||||
}
|
||||
|
||||
public int getNumberOfImages() {
|
||||
if (this.images == null)
|
||||
initializeImages();
|
||||
return this.images.size();
|
||||
}
|
||||
|
||||
public Image getDrawing(int i) {
|
||||
if (this.images == null)
|
||||
initializeImages();
|
||||
return this.images.get(i);
|
||||
}
|
||||
|
||||
private void initializeImages() {
|
||||
if (this.images != null)
|
||||
return;
|
||||
this.images = new ArrayList();
|
||||
DrawingGroupObject[] dgos = getDrawings();
|
||||
for (int i = 0; i < dgos.length; i++) {
|
||||
if (dgos[i] instanceof jxl.biff.drawing.Drawing)
|
||||
this.images.add(dgos[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public DrawingData getDrawingData() {
|
||||
SheetReader reader = new SheetReader(this.excelFile, this.sharedStrings, this.formattingRecords, this.sheetBof, this.workbookBof, this.nineteenFour, this.workbook, this.startPosition, this);
|
||||
reader.read();
|
||||
return reader.getDrawingData();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user