public abstract class Sheet extends Object implements Cloneable, Storable
Sheet及其子类视为数据源,它本身除了收集数据外并不输出任何格式的文件,
它必须与输出协议搭配使用才会输出相应格式的文件。如与XMLWorksheetWriter输出协议搭配时,
每个Sheet对应一个Excel工作表和sheet.xml文件。
工作表对应的输出协议为IWorksheetWriter,它会循环调用nextBlock()
方法获取数据并写入磁盘直到RowBlock.isEOF()返回EOF标记为止,整个过程只有一个
RowBlock行块常驻内存,一个RowBlock行块默认包含32个Row行,这样可以保证
较小的内存开销。
当前支持的数据源有ListSheet,ListMapSheet,TemplateSheet,StatementSheet
和ResultSetSheet5种,前三种较为常用,后两种可实现将数据库查询结果直接导出到Excel
省掉转Java实体的中间环节。继承Sheet并实现抽象方法resetBlockData()可以扩展新的数据源,
你需要在该方法中获取数据并使用ICellValueAndStyle转换器将数据转换为输出协议允许的结构。
ListSheet及其子类支持超大数据导出,理论上导出数据行无上限,当超过Worksheet行数限制时
将会在下一个位置插入一个与当前Sheet一样的工作表,然后将剩余数据写到新插入的工作表中,
分页是自动触发的无需额外设置。超大数据导出时建议使用ListSheet.more()方法分批查询数据,
返回空数组或null时结束。
每个Worksheet都可以设置一个onProgress(java.util.function.BiConsumer<org.ttzero.excel.entity.Sheet, java.lang.Integer>)窗口来观察导出进度,通过此窗口可以记录每个
RowBlock导出时间然后预估整体的导出时间。
能被直接导出的类型包含Java定义的简单类型、包装类型以及时间类型,除此之外的其它类型均会调用toString
后直接输出,所以自定义类型或枚举可以覆写toString方法转为可读的字符串,或者使用
ConversionProcessor动态转换将不可读的状态值1,2,3转换为
可读的文字”申请中“,“二申中”,“通过”等,对于未知的类型还可以实现ICellValueAndStyle转换器并覆写
ICellValueAndStyle.unknownType(org.ttzero.excel.entity.Row, org.ttzero.excel.reader.Cell, java.lang.Object, org.ttzero.excel.entity.Column, java.lang.Class<?>)方法进行转换
关于扩展属性:随着功能越加越多,在Sheet中定义的属性也越来越多,这样无限添加可不是个好主意,
所以在v0.5.0引入了一个Map类型的扩展属性extProp,通过putExtProp(java.lang.String, java.lang.Object)
和getExtPropValue(java.lang.String)方法添加和读取扩展属性,一般情况下在数据源中添加属性,在输出协议中读取属性,
像合并单元格、冻结首行都是通过扩展参数实现。
ListSheet,
ListMapSheet,
TemplateSheet,
ResultSetSheet,
StatementSheet,
CSVSheet,
SimpleSheet| 限定符和类型 | 字段和说明 |
|---|---|
protected int |
autoSize
自适应列宽标记,优先级从小到大为 0: 未设置 1: 自适应列宽 2: 固定宽度
|
protected ICellValueAndStyle |
cellValueAndStyle
转换器,将外部数据转换为Worksheet输出协议需要的数据类型并设置单元格样式
|
protected Column[] |
columns
表头
|
protected Comments |
comments
表头批注
|
protected int |
copyCount
记录自动分页的“复制”工作表数量
|
protected boolean |
copySheet
标记是否为自动分页的“复制”工作表
|
protected Map<String,Object> |
extProp
扩展属性
|
protected int |
extPropMark
扩展参数的位标志。
|
protected boolean |
headerReady
标记表头是否已采集,默认情况下会进行收集-排序-多表头合并等过程后状态才为"ready"
|
protected double |
headerRowHeight
指定表头行高
|
protected int |
headStyle
统一的表头样式,优先级低Column独立设置的样式
|
protected int |
headStyleIndex
兜底的表头样式索引,优先级低Column独立设置的样式
|
protected boolean |
hidden
标记是否“隐藏”
|
protected int |
id
工作表ID,与当前工作表在工作薄中的下标一致
|
protected org.slf4j.Logger |
LOGGER
LOGGER
|
protected String |
name
工作表名称
|
protected int |
nonHeader
忽略表头 -1 未设置, 0 输出表头, 1 忽略表头
|
protected BiConsumer<Sheet,Integer> |
progressConsumer
导出进度窗口,默认情况下RowBlock每刷新一次就会更新一次进度,也就是每32行通知一次
|
protected RelManager |
relManager
关系管理器
|
protected RowBlock |
rowBlock
|
protected Double |
rowHeight
指定数据行高
|
protected int |
rows
统计已写入数据行数,不包含表头
|
protected IWorksheetWriter |
sheetWriter
工作表输出协议
|
protected boolean |
shouldClose
标记是否需要关闭,自动分页情况下最后一个worksheet页需要关闭资源,因为所有的数据都是从最原始
的工作表获取,所以只有写完数据之后才能关闭。
|
protected Boolean |
showGridLines
是否显示"网格线",默认显示
|
protected long |
startCoordinate
指定起始行列,高48位保存Row,低16位保存Col(zero base)
|
protected Watermark |
watermark
水印
|
protected double |
width
默认列宽
|
protected Workbook |
workbook
工作薄
|
protected Fill |
zebraFill
斑马线填充样式,斑马线从表头以下的第2行开始每隔一行进行一次填充
|
protected int |
zebraFillStyle
斑马线样式索引
|
| 构造器和说明 |
|---|
Sheet()
实例化工作表,未指定工作表名称时默认以
'Sheet'+id命名 |
Sheet(Column... columns)
实例化工作表并指定表头信息
|
Sheet(String name)
实例化工作表并指定工作表名称
|
Sheet(String name,
Column... columns)
实例化工作表并指定工作表名称和表头信息
|
Sheet(String name,
Watermark watermark,
Column... columns)
已过时。
使用场景极少,后续版本将删除
|
| 限定符和类型 | 方法和说明 |
|---|---|
Sheet |
addRel(Relationship rel)
添加关联,当工作表需要引入其它资源时必须将其添加进关联关系中,关联关系由
RelManager管理。 |
void |
afterSheetAccess(Path workSheetPath)
当输出协议输出完成时调用此方法输出关联
|
void |
afterSheetDataWriter(int total)
当输出协议写完sheetData时调用
|
Sheet |
autoSize()
标记当前工作表自适应列宽,此优先级低于使用
Column.setWidth(double)指定列宽 |
int |
buildHeadStyle(String fontColor,
String fillBgColor)
使用默认样式并修改文字颜色和充填色创建统一表头样式
|
protected void |
calculateRealColIndex()
计算列的实际行号,Excel行号从1开始,计算后的值将重置
Column.getColNum()属性,
该属性将最终输出到Excel文件col属性中 |
Sheet |
cancelZebraLine()
取消斑马线,如果在工作薄Workbook设置了全局斑马线可使用此方法取消当前工作表Worksheet的斑马线
|
void |
checkColumnLimit()
Check the limit of columns
|
Sheet |
clone()
深拷贝当前工作表,分页时使用
|
void |
close()
回闭连接,回收资源,删除临时文件等
|
Comments |
createComments()
创建批注对象,一般由各工作表输出协议创建,外部用户勿用
|
int |
defaultHeadStyle()
获取默认的表头样式值
|
int |
defaultHeadStyleIndex()
获取默认的表头样式索引
|
Sheet |
defaultZebraLine()
设置默认斑马线,默认填充色HEX值为
E9EAEC |
Relationship |
findRel(String key)
通过相对位置模糊匹配查找关联关系
|
Sheet |
fixedSize()
设置当前工作表使用固定列宽,将默认使用
getDefaultWidth()返回的宽度 |
Sheet |
fixedSize(double width)
设置当前工作表使用固定列宽并指定宽度,此方法会对入参进行重算,当宽度为'零'时效果相当于隐藏该列
|
Column[] |
getAndSortHeaderColumns()
获取表头,Worksheet工作表输出协议调用此方法来获取表头信息
此方法先调用内部
getHeaderColumns()获取基础信息,然后对其进行排序,列反转,
合并等深加工处理 |
int |
getAutoSize()
获取工作表的全局自适应列宽标记
|
ICellValueAndStyle |
getCellValueAndStyle()
获取数据转换器
|
Column[] |
getColumns()
获取表头,对于非外部传入的表头,只有要执行导出的时候通过行数据进行反射或读取Meta元数据获取,
在此之前该接口将返回
null |
Comments |
getComments()
获取批注
Comments |
protected String |
getCopySheetName()
当数据行超过工作表限制时触发分页,复制得到新的工作表命名为原工作表名+页码数
|
double |
getDefaultWidth()
获取默认列宽,如果未在Column上特殊指定宽度时该宽度将应用于每一列
|
Map<String,Object> |
getExtPropAsMap()
获取所有扩展参数
注意:对返回值进行修改可能会影响原始值,添加/删除无影响
|
Object |
getExtPropValue(String key)
根据key获取扩展参数
|
String |
getFileName()
获取当前工作表的文件名
|
int |
getForceExport()
获取强制导出标识,只对
ListSheet生效,用于 |
protected Column[] |
getHeaderColumns()
获取表头,子类覆写此方法创建表头
|
double |
getHeaderRowHeight()
获取表头行高,默认20.5
|
int |
getHeadStyle()
获取统一的表头样式值
|
int |
getHeadStyleIndex()
获取统一的表头样式索引
|
int |
getId()
获取工作表ID,与当前工作表在工作薄中的下标一致,一般与其它资源关联使用
|
String |
getName()
获取当前工作表的表名
注意:仅返回实例化Worksheet时指定的表名或通过
setName(java.lang.String)方法设置的表名,
对于未指定的表名的工作表受分页和Workbook.insertSheet(int, Sheet)插入指定位置
影响只能在最终执行输出时确定位置,在此之前表名均返回null |
int |
getNonHeader()
获取忽略表头标识
|
BiConsumer<Sheet,Integer> |
getProgressConsumer()
获取进度观察者
|
RelManager |
getRelManager()
获取当前工作表的关系管理器
|
int |
getRowBlockSize()
获取
RowBlock行块的大小,创建行块时会调用此方法获取行块大小,
子类可覆写该方法指定其它值 |
Double |
getRowHeight()
获取数据行高
|
protected int |
getRowLimit()
获取工作表数据行上限,超过上限时触发分页,默认情况下此值由各输出协议决定
|
IWorksheetWriter |
getSheetWriter()
获取工作表输出协议
IWorksheetWriter |
int |
getStartColNum()
获取工作表的起始列号(从1开始),这里是行号也就是打开Excel顶部看到的列号(A),
此列号将决定从哪一列开始写数据
|
int |
getStartRowIndex()
已过时。
方法名容易引起误解,使用
getStartRowNum() 替换 |
int |
getStartRowNum()
获取工作表的起始行号(从1开始),这里是行号也就是打开Excel左侧看到的行号,
此行号将决定从哪一行开始写数据
|
Watermark |
getWatermark()
获取水印
|
Watermark |
getWaterMark()
已过时。
|
Workbook |
getWorkbook()
获取当前工作表对应的工作薄
|
Fill |
getZebraFill()
获取当前工作表的斑马线填充样式,如果当前工作表未设置则从全局工作薄中获取
|
int |
getZebraFillStyle()
获取斑马线样式值,它返回的是全局样式中斑马线填充样式的值,全局第
n个填充返回 n<<INDEX_FILL,
更多参考Styles.addFill(org.ttzero.excel.entity.style.Fill) |
boolean |
hasHeaderColumns()
是否包含表头
|
Sheet |
hidden()
隐藏工作表
|
Sheet |
hideGridLines()
设置隐藏“网格线”
|
Sheet |
ignoreHeader()
忽略表头,调用此方法后表头将不会输出到Excel中,注意这里不是隐藏
|
protected void |
insert(Column[] columns,
int n,
int k) |
static char[] |
int2Col(int n)
列下标转为Excel列标识,Excel列标识由大写字母
A-Z组合,Z后为AA如此循环,最大下标XFD
数字 | Excel列
-------+---------
1 | A
10 | J
26 | Z
27 | AA
28 | AB
53 | BA
16_384 | XFD
|
boolean |
isAutoSize()
是否全局自适应列宽,此值使用
autoSize()==1判断 |
boolean |
isHidden()
工作表是否隐藏
|
boolean |
isScrollToVisibleArea()
是否滚动到可视区,当起始行列不在
A1时,如果返回true则打开Excel文件时
自动将首行首列滚动左上角第一个位置,如果返回false时打开Excel文件左上角可视区为A1 |
boolean |
isShowGridLines()
是否显示“网格线”
|
protected void |
markExtProp()
标记扩展参数(非必要操作)
|
protected void |
mergeHeaderCellsIfEquals()
合并表头
|
RowBlock |
nextBlock()
获取下一段
RowBlock行块数据,工作表输出协议通过此方法循环获取行数据并落盘,
行块被设计为一个滑行窗口,下游输出协议只能获取一个窗口的数据默认包含32行。 |
Sheet |
onProgress(BiConsumer<Sheet,Integer> progressConsumer)
添加进度观察者,在数据较大的导出过程中添加观察者打印进度可避免被误解为程序假死
new ListSheet<>().onProgress((sheet, row) -> {
System.out.println(sheet + " write " + row + " rows");
})
|
protected void |
paging()
分批拉取数据
|
Sheet |
putAllExtProp(Map<String,Object> m)
批量添加扩展参数,key存在时覆盖原值
|
Sheet |
putExtProp(String key,
Object value)
添加扩展参数,key存在时覆盖原值
|
Sheet |
putExtPropIfAbsent(String key,
Object value)
添加扩展参数,如果key不存在则添加,存在时忽略
|
protected abstract void |
resetBlockData()
你需要覆写本方法获取行数据并将Java对象或自定义行数据通过
ICellValueAndStyle.reset(org.ttzero.excel.entity.Row, org.ttzero.excel.reader.Cell, java.lang.Object, org.ttzero.excel.entity.Column)转换器将数据转换为输出协议允许的结构,
ICellValueAndStyle#reset方法除转换数据外还添单元格样式 |
protected void |
resetCommonProperties(Column[] columns) |
protected void |
reverseHeadColumn()
反转表头
|
protected int |
search(Column[] columns,
int n,
int k) |
Sheet |
setCellValueAndStyle(ICellValueAndStyle cellValueAndStyle)
设置数据转换器,用于将Java对象转为各工作表输出协议可接受的数据结构,一般会将每个单元格的值输出为
Cell对象,
它与Sheet数据源中的Java类型完全分离,使得下游的输出协议有统一输入源。 |
Sheet |
setColumns(Column... columns)
设置表头,无数据时依然会导出该表头
|
Sheet |
setColumns(List<Column> columns)
设置表头,无数据时依然会导出该表头
|
Sheet |
setHeaderRowHeight(double headerRowHeight)
设置表头行高,其优化级低于
Column.setHeaderHeight(double)设置的值
可接受负数和零,负数等价与未设置默认行高为13.5,零效果等价于隐藏,但不能通过右建“取消隐藏” |
Sheet |
setHeadStyle(Font font,
Fill fill,
Border border)
已过时。
可能因为Style未初始化出现
NPE,目前最可靠的只有setHeadStyle(int) |
Sheet |
setHeadStyle(Font font,
Fill fill,
Border border,
int vertical,
int horizontal)
已过时。
可能因为Style未初始化出现
NPE,目前最可靠的只有setHeadStyle(int) |
Sheet |
setHeadStyle(int style)
设置统一的表头样式值
|
Sheet |
setHeadStyle(NumFmt numFmt,
Font font,
Fill fill,
Border border,
int vertical,
int horizontal)
已过时。
可能因为Style未初始化出现
NPE,目前最可靠的只有setHeadStyle(int) |
Sheet |
setHeadStyleIndex(int styleIndex)
设置统一的表头样式索引
|
Sheet |
setId(int id)
设置工作表ID,请不要在外部随意修改,否则打开文件异常
|
Sheet |
setName(String name)
设置工作表表名,使用Office打开文件时它将显示在底部的Tab栏
注意:内部不会检查重名,所以请在外部保证在一个工作薄下所有工作表名唯一,否则打开文件异常
|
Sheet |
setRowHeight(double rowHeight)
设置数据行高,未指定或负数时默认行高为
13.5 |
Sheet |
setSheetWriter(IWorksheetWriter sheetWriter)
设置输出协议,必须与对应的
IWorkbookWriter工作薄输出协议一起使用 |
Sheet |
setStartCoordinate(int startRowNum)
指定起始行,行号必须大于0
|
Sheet |
setStartCoordinate(int startRowNum,
boolean scrollToVisibleArea)
指定起始行,行号必须大于0
|
Sheet |
setStartCoordinate(int startRowNum,
int startColNum)
指定起始行号和列号,行号必须大于0
|
Sheet |
setStartCoordinate(int startRowNum,
int startColNum,
boolean scrollToVisibleArea)
指定起始行号和列号,行号必须大于0
默认情况下左上角一定是
A1,如果scrollToVisibleArea=true则打开文件时StartRowIndex
将会显示在窗口的第一行 |
Sheet |
setStartCoordinate(String coordinate)
指定起始坐标
|
Sheet |
setStartCoordinate(String coordinate,
boolean scrollToVisibleArea)
指定起始坐标
|
Sheet |
setStartRowIndex(int startRowNum)
已过时。
方法名容易引起误解,使用
setStartCoordinate(int)替代 |
Sheet |
setStartRowIndex(int startRowNum,
boolean scrollToVisibleArea)
已过时。
方法名容易引起误解, 使用
setStartCoordinate(int, boolean)替代 |
Sheet |
setWatermark(Watermark watermark)
设置水印,优先级高于Workbook中的全局水印
|
Sheet |
setWaterMark(Watermark watermark)
已过时。
|
Sheet |
setWorkbook(Workbook workbook)
设置工作薄,一般在调用
Workbook.addSheet(org.ttzero.excel.entity.Sheet)时设置工作薄,Workbook包含
样式、共享字符区、资源类型等全局配置,为了方便读取所以每个worksheet均包含Workbook句柄 |
Sheet |
setZebraLine(Fill fill)
设置斑马线填充样式,为了不影响正常阅读建议使用浅色,默认无斑马线
|
Sheet |
showGridLines()
设置显示“网格线”
|
int |
size()
获取已写入的数据行数,这里不包含表头行
注意:由于数据行经由
RowBlock行块统一处理,所以这里的已写入只表示写入到
RowBlock行块的数据并非实际已导出的行数,精准的已导出行可以通过Workbook.onProgress(java.util.function.BiConsumer<org.ttzero.excel.entity.Sheet, java.lang.Integer>)监听获取 |
protected void |
sortColumns(Column[] columns)
列排序,首先会根据用户指定的
colIndex进行一次排序,未指定colIndex的列排在最后,
然后将尾部没有colIndex的列插入到数组前方不连续的空白位,如果有重复的colIndex则按
列在当前数组中的顺序依次排序
示例:现有A:1,B,C:4,D,E五列,其中A的colIndex=1,C的colIndex=4
第一轮按colIndex排序后结果为 => A:1,C:4,B,D,E
第二轮将尾部没有colIndex的BDE列插入到前方空白位,A在第1列它前方可以插入B,
A:1和C:4之间有2,3两个空白位,将DE分别插入到2,3位,现在结果为 => B:0,A:1,D:2,E:3,C:4 |
static String |
toCoordinate(int row,
int col)
将行列坐标转换为 Excel 样式的单元格地址
|
void |
writeTo(Path path)
落盘,将工作表写到指定路径
|
protected final org.slf4j.Logger LOGGER
protected Workbook workbook
protected String name
protected Column[] columns
protected Watermark watermark
protected RelManager relManager
protected int id
protected Comments comments
protected int autoSize
protected double width
protected int rows
protected boolean hidden
protected int headStyleIndex
protected int headStyle
protected int zebraFillStyle
protected Fill zebraFill
protected boolean copySheet
protected int copyCount
protected RowBlock rowBlock
protected IWorksheetWriter sheetWriter
protected boolean headerReady
protected boolean shouldClose
protected ICellValueAndStyle cellValueAndStyle
protected int nonHeader
protected int extPropMark
protected Boolean showGridLines
protected double headerRowHeight
protected Double rowHeight
protected long startCoordinate
protected BiConsumer<Sheet,Integer> progressConsumer
public Sheet()
'Sheet'+id命名public Sheet(String name)
name - 工作表名称public Sheet(Column... columns)
columns - 表头信息public Sheet(String name, Column... columns)
name - 工作表名称columns - 表头信息@Deprecated public Sheet(String name, Watermark watermark, Column... columns)
name - 工作表名称watermark - 水印columns - 表头信息public int getId()
public Sheet setId(int id)
id - 工作表IDpublic Sheet setSheetWriter(IWorksheetWriter sheetWriter)
IWorkbookWriter工作薄输出协议一起使用sheetWriter - 工作表输出协议IWorksheetWriterpublic IWorksheetWriter getSheetWriter()
IWorksheetWriterpublic Sheet setCellValueAndStyle(ICellValueAndStyle cellValueAndStyle)
Cell对象,
它与Sheet数据源中的Java类型完全分离,使得下游的输出协议有统一输入源。
除了数据转换外,该转换器还兼具采集样式,采集样式时会先从表头Column.getCellStyle(java.lang.Class<?>)中获取初始样式,
如果该列有动态样式则会将该初始样式做为入参传入StyleProcessor
动态样式处理器以制定动态样式,如果设置有工作表级的样式处理器则会将动态样式的结果做为入参继续调工作表级
样式处理器制定最终的样式
cellValueAndStyle - 数据转换器public ICellValueAndStyle getCellValueAndStyle()
ICellValueAndStylepublic Sheet setWorkbook(Workbook workbook)
Workbook.addSheet(org.ttzero.excel.entity.Sheet)时设置工作薄,Workbook包含
样式、共享字符区、资源类型等全局配置,为了方便读取所以每个worksheet均包含Workbook句柄workbook - 工作薄Workbookpublic double getDefaultWidth()
public Sheet autoSize()
Column.setWidth(double)指定列宽public int getAutoSize()
public boolean isAutoSize()
autoSize()==1判断public Sheet fixedSize()
getDefaultWidth()返回的宽度public Sheet fixedSize(double width)
width - 列宽public Sheet setZebraLine(Fill fill)
fill - 斑马线填充 Fillpublic Sheet cancelZebraLine()
public int getZebraFillStyle()
n个填充返回 n<<INDEX_FILL,
更多参考Styles.addFill(org.ttzero.excel.entity.style.Fill)public Sheet defaultZebraLine()
E9EAECpublic String getName()
注意:仅返回实例化Worksheet时指定的表名或通过 setName(java.lang.String)方法设置的表名,
对于未指定的表名的工作表受分页和Workbook.insertSheet(int, Sheet)插入指定位置
影响只能在最终执行输出时确定位置,在此之前表名均返回null
nullpublic Sheet setName(String name)
注意:内部不会检查重名,所以请在外部保证在一个工作薄下所有工作表名唯一,否则打开文件异常
name - 工作表表名,最多31个字符超过时截取前31个字符public Comments createComments()
Comments实体,与工作表一一对应public boolean isShowGridLines()
public Sheet showGridLines()
public Sheet hideGridLines()
public double getHeaderRowHeight()
public Sheet setHeaderRowHeight(double headerRowHeight)
Column.setHeaderHeight(double)设置的值
可接受负数和零,负数等价与未设置默认行高为13.5,零效果等价于隐藏,但不能通过右建“取消隐藏”
headerRowHeight - 指定表头行高,建议表头行高比数据行大public Double getRowHeight()
null时使用默认行高public Sheet setRowHeight(double rowHeight)
13.5rowHeight - 指定数据行高@Deprecated public int getStartRowIndex()
getStartRowNum() 替换public int getStartRowNum()
public int getStartColNum()
public boolean isScrollToVisibleArea()
A1时,如果返回true则打开Excel文件时
自动将首行首列滚动左上角第一个位置,如果返回false时打开Excel文件左上角可视区为A1true将首行首列滚动到左上角第一个位置,否则A1将为左上角第一个位置@Deprecated public Sheet setStartRowIndex(int startRowNum)
setStartCoordinate(int)替代startRowNum - 起始行号(从1开始)@Deprecated public Sheet setStartRowIndex(int startRowNum, boolean scrollToVisibleArea)
setStartCoordinate(int, boolean)替代默认情况下左上角一定是A1,如果scrollToVisibleArea=true则打开文件时StartRowIndex
将会显示在窗口的第一行
startRowNum - 起始行号(从1开始)scrollToVisibleArea - 是否滚动起始行到窗口左上角public Sheet setStartCoordinate(String coordinate)
coordinate - 单元格位置字符串 A1public Sheet setStartCoordinate(String coordinate, boolean scrollToVisibleArea)
coordinate - 单元格位置字符串 A1scrollToVisibleArea - 是否滚动起始行到窗口左上角public Sheet setStartCoordinate(int startRowNum)
startRowNum - 起始行号(从1开始)public Sheet setStartCoordinate(int startRowNum, boolean scrollToVisibleArea)
startRowNum - 起始行号(从1开始)scrollToVisibleArea - 是否滚动起始行到窗口左上角public Sheet setStartCoordinate(int startRowNum, int startColNum)
startRowNum - 起始行号(从1开始)startColNum - 起始列号(从1开始)public Sheet setStartCoordinate(int startRowNum, int startColNum, boolean scrollToVisibleArea)
默认情况下左上角一定是A1,如果scrollToVisibleArea=true则打开文件时StartRowIndex
将会显示在窗口的第一行
startRowNum - 起始行号(从1开始)startColNum - 起始列号(从1开始)scrollToVisibleArea - 是否滚动起始行到窗口左上角public Column[] getColumns()
nullpublic Sheet onProgress(BiConsumer<Sheet,Integer> progressConsumer)
new ListSheet<>().onProgress((sheet, row) -> {
System.out.println(sheet + " write " + row + " rows");
})progressConsumer - 进度消费窗口public BiConsumer<Sheet,Integer> getProgressConsumer()
nullprotected Column[] getHeaderColumns()
public Column[] getAndSortHeaderColumns()
此方法先调用内部getHeaderColumns()获取基础信息,然后对其进行排序,列反转,
合并等深加工处理
protected void resetCommonProperties(Column[] columns)
protected void sortColumns(Column[] columns)
colIndex进行一次排序,未指定colIndex的列排在最后,
然后将尾部没有colIndex的列插入到数组前方不连续的空白位,如果有重复的colIndex则按
列在当前数组中的顺序依次排序
示例:现有A:1,B,C:4,D,E五列,其中A的colIndex=1,C的colIndex=4
第一轮按colIndex排序后结果为 => A:1,C:4,B,D,E
第二轮将尾部没有colIndex的BDE列插入到前方空白位,A在第1列它前方可以插入B,
A:1和C:4之间有2,3两个空白位,将DE分别插入到2,3位,现在结果为 => B:0,A:1,D:2,E:3,C:4
columns - 表头信息protected int search(Column[] columns, int n, int k)
protected void insert(Column[] columns, int n, int k)
protected void calculateRealColIndex()
Column.getColNum()属性,
该属性将最终输出到Excel文件col属性中public Sheet setColumns(Column... columns)
columns - 表头数组public Sheet setColumns(List<Column> columns)
columns - 表头数组public Sheet setWatermark(Watermark watermark)
watermark - 水印对象 Watermark@Deprecated public Watermark getWaterMark()
@Deprecated public Sheet setWaterMark(Watermark watermark)
public boolean isHidden()
public Sheet hidden()
public int getForceExport()
ListSheet生效,用于public void close()
throws IOException
IOException - if I/O error occurpublic void writeTo(Path path) throws IOException
writeTo 在接口中 Storablepath - 指定保存路径IOException - if I/O error occurprotected void paging()
public Sheet addRel(Relationship rel)
RelManager管理。
例如:向工作表添加图片时,图片由media统一存放,工作表中只需要加入图片的关联关系,通过rId值找到图片。 除了图片外,像批注,公式,图表等都属于外部资源
rel - 关联关系 Relationshippublic Relationship findRel(String key)
key - 要查询的关联keynullpublic RelManager getRelManager()
RelManagerpublic String getFileName()
@Deprecated public Sheet setHeadStyle(Font font, Fill fill, Border border)
NPE,目前最可靠的只有setHeadStyle(int)font - 字体fill - 填充色border - 边框@Deprecated public Sheet setHeadStyle(Font font, Fill fill, Border border, int vertical, int horizontal)
NPE,目前最可靠的只有setHeadStyle(int)font - 字体fill - 填充色border - 边框vertical - 垂直对齐horizontal - 水平对齐@Deprecated public Sheet setHeadStyle(NumFmt numFmt, Font font, Fill fill, Border border, int vertical, int horizontal)
NPE,目前最可靠的只有setHeadStyle(int)numFmt - 格式化font - 字体fill - 填充色border - 边框vertical - 垂直对齐horizontal - 水平对齐public Sheet setHeadStyle(int style)
style - 样式值,0表示默认样式public Sheet setHeadStyleIndex(int styleIndex)
styleIndex - 样式索引,索引从0开始,负数表示未设置样式public int getHeadStyle()
public int getHeadStyleIndex()
public int buildHeadStyle(String fontColor, String fillBgColor)
public int defaultHeadStyle()
public int defaultHeadStyleIndex()
public int size()
注意:由于数据行经由RowBlock行块统一处理,所以这里的已写入只表示写入到
RowBlock行块的数据并非实际已导出的行数,精准的已导出行可以通过Workbook.onProgress(java.util.function.BiConsumer<org.ttzero.excel.entity.Sheet, java.lang.Integer>)监听获取
public RowBlock nextBlock()
RowBlock行块数据,工作表输出协议通过此方法循环获取行数据并落盘,
行块被设计为一个滑行窗口,下游输出协议只能获取一个窗口的数据默认包含32行。public int getRowBlockSize()
RowBlock行块的大小,创建行块时会调用此方法获取行块大小,
子类可覆写该方法指定其它值public void afterSheetDataWriter(int total)
total - 已写数据行public void afterSheetAccess(Path workSheetPath) throws IOException
workSheetPath - 当前工作表保存路径IOException - if I/O error occurprotected String getCopySheetName()
public void checkColumnLimit()
public boolean hasHeaderColumns()
public static char[] int2Col(int n)
A-Z组合,Z后为AA如此循环,最大下标XFD
数字 | Excel列 -------+--------- 1 | A 10 | J 26 | Z 27 | AA 28 | AB 53 | BA 16_384 | XFD
n - 列下标public static String toCoordinate(int row, int col)
row - 行号,从1开始col - 列号,从1开始A1、B2等public Sheet ignoreHeader()
public int getNonHeader()
protected int getRowLimit()
public Sheet putExtProp(String key, Object value)
key - 扩展参数Keyvalue - 值public Sheet putExtPropIfAbsent(String key, Object value)
key - 扩展参数Keyvalue - 值public Sheet putAllExtProp(Map<String,Object> m)
m - 扩展参数public Object getExtPropValue(String key)
key - 扩展参数Keynullpublic Map<String,Object> getExtPropAsMap()
注意:对返回值进行修改可能会影响原始值,添加/删除无影响
protected void markExtProp()
protected void reverseHeadColumn()
protected void mergeHeaderCellsIfEquals()
protected abstract void resetBlockData()
ICellValueAndStyle.reset(org.ttzero.excel.entity.Row, org.ttzero.excel.reader.Cell, java.lang.Object, org.ttzero.excel.entity.Column)转换器将数据转换为输出协议允许的结构,
ICellValueAndStyle#reset方法除转换数据外还添单元格样式Copyright © 2025. All rights reserved.