📄 sheetwriter.java
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi
// Source File Name: SheetWriter.java
package jxl.write.biff;
import common.Assert;
import common.Logger;
import java.io.IOException;
import java.util.*;
import jxl.*;
import jxl.biff.*;
import jxl.biff.drawing.*;
import jxl.format.*;
import jxl.write.*;
// Referenced classes of package jxl.write.biff:
// BOFRecord, IndexRecord, CalcModeRecord, CalcCountRecord,
// RefModeRecord, IterationRecord, DeltaRecord, SaveRecalcRecord,
// PrintHeadersRecord, PrintGridLinesRecord, GridSetRecord, GuttersRecord,
// DefaultRowHeightRecord, HorizontalPageBreaksRecord, VerticalPageBreaksRecord, HeaderRecord,
// FooterRecord, HorizontalCentreRecord, VerticalCentreRecord, LeftMarginRecord,
// RightMarginRecord, TopMarginRecord, BottomMarginRecord, SetupRecord,
// ProtectRecord, ScenarioProtectRecord, ObjectProtectRecord, PasswordRecord,
// DefaultColumnWidth, ColumnInfoRecord, DimensionRecord, DBCellRecord,
// Window2Record, PaneRecord, SelectionRecord, Weird1Record,
// SCLRecord, EOFRecord, CellXFRecord, CellValue,
// File, WritableSheetImpl, WritableWorkbookImpl, Styles,
// RowRecord, MergedCells, PLSRecord, ButtonPropertySetRecord
final class SheetWriter
{
private static Logger logger;
private File outputFile;
private RowRecord rows[];
private int numRows;
private int numCols;
private HeaderRecord header;
private FooterRecord footer;
private SheetSettings settings;
private WorkbookSettings workbookSettings;
private ArrayList rowBreaks;
private ArrayList columnBreaks;
private ArrayList hyperlinks;
private ArrayList validatedCells;
private DataValidation dataValidation;
private MergedCells mergedCells;
private PLSRecord plsRecord;
private ButtonPropertySetRecord buttonPropertySet;
private WorkspaceInformationRecord workspaceOptions;
private TreeSet columnFormats;
private SheetDrawingWriter drawingWriter;
private boolean chartOnly;
private WritableSheetImpl sheet;
static Class class$jxl$write$biff$SheetWriter; /* synthetic field */
public SheetWriter(File of, WritableSheetImpl wsi, WorkbookSettings ws)
{
outputFile = of;
sheet = wsi;
workspaceOptions = new WorkspaceInformationRecord();
workbookSettings = ws;
chartOnly = false;
drawingWriter = new SheetDrawingWriter(ws);
}
public void write()
throws IOException
{
Assert.verify(rows != null);
if(chartOnly)
{
drawingWriter.write(outputFile);
return;
}
BOFRecord bof = new BOFRecord(BOFRecord.sheet);
outputFile.write(bof);
int numBlocks = numRows / 32;
if(numRows - numBlocks * 32 != 0)
numBlocks++;
int indexPos = outputFile.getPos();
IndexRecord indexRecord = new IndexRecord(0, numRows, numBlocks);
outputFile.write(indexRecord);
if(settings.getAutomaticFormulaCalculation())
{
CalcModeRecord cmr = new CalcModeRecord(CalcModeRecord.automatic);
outputFile.write(cmr);
} else
{
CalcModeRecord cmr = new CalcModeRecord(CalcModeRecord.manual);
outputFile.write(cmr);
}
CalcCountRecord ccr = new CalcCountRecord(100);
outputFile.write(ccr);
RefModeRecord rmr = new RefModeRecord();
outputFile.write(rmr);
IterationRecord itr = new IterationRecord(false);
outputFile.write(itr);
DeltaRecord dtr = new DeltaRecord(0.001D);
outputFile.write(dtr);
SaveRecalcRecord srr = new SaveRecalcRecord(settings.getRecalculateFormulasBeforeSave());
outputFile.write(srr);
PrintHeadersRecord phr = new PrintHeadersRecord(settings.getPrintHeaders());
outputFile.write(phr);
PrintGridLinesRecord pglr = new PrintGridLinesRecord(settings.getPrintGridLines());
outputFile.write(pglr);
GridSetRecord gsr = new GridSetRecord(true);
outputFile.write(gsr);
GuttersRecord gutr = new GuttersRecord();
outputFile.write(gutr);
DefaultRowHeightRecord drhr = new DefaultRowHeightRecord(settings.getDefaultRowHeight(), settings.getDefaultRowHeight() != 255);
outputFile.write(drhr);
workspaceOptions.setFitToPages(settings.getFitToPages());
outputFile.write(workspaceOptions);
if(rowBreaks.size() > 0)
{
int rb[] = new int[rowBreaks.size()];
for(int i = 0; i < rb.length; i++)
rb[i] = ((Integer)rowBreaks.get(i)).intValue();
HorizontalPageBreaksRecord hpbr = new HorizontalPageBreaksRecord(rb);
outputFile.write(hpbr);
}
if(columnBreaks.size() > 0)
{
int rb[] = new int[columnBreaks.size()];
for(int i = 0; i < rb.length; i++)
rb[i] = ((Integer)columnBreaks.get(i)).intValue();
VerticalPageBreaksRecord hpbr = new VerticalPageBreaksRecord(rb);
outputFile.write(hpbr);
}
HeaderRecord header = new HeaderRecord(settings.getHeader().toString());
outputFile.write(header);
FooterRecord footer = new FooterRecord(settings.getFooter().toString());
outputFile.write(footer);
HorizontalCentreRecord hcr = new HorizontalCentreRecord(settings.isHorizontalCentre());
outputFile.write(hcr);
VerticalCentreRecord vcr = new VerticalCentreRecord(settings.isVerticalCentre());
outputFile.write(vcr);
if(settings.getLeftMargin() != settings.getDefaultWidthMargin())
{
MarginRecord mr = new LeftMarginRecord(settings.getLeftMargin());
outputFile.write(mr);
}
if(settings.getRightMargin() != settings.getDefaultWidthMargin())
{
MarginRecord mr = new RightMarginRecord(settings.getRightMargin());
outputFile.write(mr);
}
if(settings.getTopMargin() != settings.getDefaultHeightMargin())
{
MarginRecord mr = new TopMarginRecord(settings.getTopMargin());
outputFile.write(mr);
}
if(settings.getBottomMargin() != settings.getDefaultHeightMargin())
{
MarginRecord mr = new BottomMarginRecord(settings.getBottomMargin());
outputFile.write(mr);
}
if(plsRecord != null)
outputFile.write(plsRecord);
SetupRecord setup = new SetupRecord(settings);
outputFile.write(setup);
if(settings.isProtected())
{
ProtectRecord pr = new ProtectRecord(settings.isProtected());
outputFile.write(pr);
ScenarioProtectRecord spr = new ScenarioProtectRecord(settings.isProtected());
outputFile.write(spr);
ObjectProtectRecord opr = new ObjectProtectRecord(settings.isProtected());
outputFile.write(opr);
if(settings.getPassword() != null)
{
PasswordRecord pw = new PasswordRecord(settings.getPassword());
outputFile.write(pw);
} else
if(settings.getPasswordHash() != 0)
{
PasswordRecord pw = new PasswordRecord(settings.getPasswordHash());
outputFile.write(pw);
}
}
indexRecord.setDataStartPosition(outputFile.getPos());
DefaultColumnWidth dcw = new DefaultColumnWidth(settings.getDefaultColumnWidth());
outputFile.write(dcw);
jxl.write.WritableCellFormat normalStyle = sheet.getWorkbook().getStyles().getNormalStyle();
jxl.write.WritableCellFormat defaultDateFormat = sheet.getWorkbook().getStyles().getDefaultDateFormat();
ColumnInfoRecord cir = null;
Iterator colit = columnFormats.iterator();
do
{
if(!colit.hasNext())
break;
cir = (ColumnInfoRecord)colit.next();
if(cir.getColumn() < 256)
outputFile.write(cir);
XFRecord xfr = cir.getCellFormat();
if(xfr != normalStyle && cir.getColumn() < 256)
{
Cell cells[] = getColumn(cir.getColumn());
int i = 0;
while(i < cells.length)
{
if(cells[i] != null && (cells[i].getCellFormat() == normalStyle || cells[i].getCellFormat() == defaultDateFormat))
((WritableCell)cells[i]).setCellFormat(xfr);
i++;
}
}
} while(true);
DimensionRecord dr = new DimensionRecord(numRows, numCols);
outputFile.write(dr);
for(int block = 0; block < numBlocks; block++)
{
DBCellRecord dbcell = new DBCellRecord(outputFile.getPos());
int blockRows = Math.min(32, numRows - block * 32);
boolean firstRow = true;
for(int i = block * 32; i < block * 32 + blockRows; i++)
{
if(rows[i] == null)
continue;
rows[i].write(outputFile);
if(firstRow)
{
dbcell.setCellOffset(outputFile.getPos());
firstRow = false;
}
}
for(int i = block * 32; i < block * 32 + blockRows; i++)
if(rows[i] != null)
{
dbcell.addCellRowPosition(outputFile.getPos());
rows[i].writeCells(outputFile);
}
indexRecord.addBlockPosition(outputFile.getPos());
dbcell.setPosition(outputFile.getPos());
outputFile.write(dbcell);
}
if(!workbookSettings.getDrawingsDisabled())
drawingWriter.write(outputFile);
Window2Record w2r = new Window2Record(settings);
outputFile.write(w2r);
if(settings.getHorizontalFreeze() != 0 || settings.getVerticalFreeze() != 0)
{
PaneRecord pr = new PaneRecord(settings.getHorizontalFreeze(), settings.getVerticalFreeze());
outputFile.write(pr);
SelectionRecord sr = new SelectionRecord(SelectionRecord.upperLeft, 0, 0);
outputFile.write(sr);
if(settings.getHorizontalFreeze() != 0)
{
sr = new SelectionRecord(SelectionRecord.upperRight, settings.getHorizontalFreeze(), 0);
outputFile.write(sr);
}
if(settings.getVerticalFreeze() != 0)
{
sr = new SelectionRecord(SelectionRecord.lowerLeft, 0, settings.getVerticalFreeze());
outputFile.write(sr);
}
if(settings.getHorizontalFreeze() != 0 && settings.getVerticalFreeze() != 0)
{
sr = new SelectionRecord(SelectionRecord.lowerRight, settings.getHorizontalFreeze(), settings.getVerticalFreeze());
outputFile.write(sr);
}
Weird1Record w1r = new Weird1Record();
outputFile.write(w1r);
} else
{
SelectionRecord sr = new SelectionRecord(SelectionRecord.upperLeft, 0, 0);
outputFile.write(sr);
}
if(settings.getZoomFactor() != 100)
{
SCLRecord sclr = new SCLRecord(settings.getZoomFactor());
outputFile.write(sclr);
}
mergedCells.write(outputFile);
Iterator hi = hyperlinks.iterator();
WritableHyperlink hlr = null;
for(; hi.hasNext(); outputFile.write(hlr))
hlr = (WritableHyperlink)hi.next();
if(buttonPropertySet != null)
outputFile.write(buttonPropertySet);
if(dataValidation != null || validatedCells.size() > 0)
writeDataValidation();
EOFRecord eof = new EOFRecord();
outputFile.write(eof);
outputFile.setData(indexRecord.getData(), indexPos + 4);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -