本地数据透视表缓存生命周期与原生布局
版本 2.384.94 新增共享缓存视图、本地非 OLAP 数据透视表 Slicer 的创建与显式移除、分组缓存重建,以及一个有界的原生布局元数据生成器
共享视图与 Slicer 创建
SecondPivot := Sheet.AddPivotTable(FirstPivot.Cache, 20, 1, 'SecondView');
Cache := Workbook.CreatePivotSlicerCache(FirstPivot, 'Category');
if Cache.ConnectPivotTable(SecondPivot) <> 1 then
raise Exception.Create('The second view could not be connected');
Slicer := Sheet.Slicers.Add(Cache, 1, 6, 8, 8);
TXLSXWorksheet.AddPivotTable(ACache: TXLSPivotCache; DestRow, DestCol: Integer; const Name: WideString): TXLSPivotTable 为本工作簿持有的缓存创建另一个视图;附加视图之前会校验所有权、几何与名称
TXLSXWorkbook.CreatePivotSlicerCache(ATable: TXLSPivotTable; const AFieldName: WideString): TXLSXSlicerCache 创建或安全地复用一个受支持的源字段缓存,TXLSXSlicerCache.ConnectPivotTable(ATable: TXLSPivotTable): Integer 连接既有的本地共享缓存视图
TXLSXSlicers.Add(ACache: TXLSXSlicerCache; ARow1, ACol1, ARow2, ACol2: Integer): TXLSXSlicer 用显式的含端点 1 基单元格边界创建工作表 UI;源名称、缓存部件、绘图引用与视图成员关系都会在变更前暂存
分组、计算与 OLAP 的 Slicer 源、外部缓存、不一致的导入域以及含糊的独立同字段掩码都会被拒绝;受支持的导入视图 XML 在追加新 UI 时保留无关扩展
显式移除与未来成员
if Workbook.RemoveSlicerCache(Cache, xlsxSlicerPreserveCurrentSelection) <> 1 then
raise Exception.Create('The Slicer cache could not be removed');
TXLSXSlicerRemovalMode 有 xlsxSlicerClearSelection 与 xlsxSlicerPreserveCurrentSelection 两种;TXLSXWorkbook.RemoveSlicerCache(ACache: TXLSXSlicerCache; AMode: TXLSXSlicerRemovalMode): Integer 一起移除绑定的 UI、绘图引用、原生缓存部件和连接
清除模式移除这条 Slicer 限制,同时保留独立筛选与调用方谓词;保留模式在移除 Slicer 之前把其当前限制转移到普通数据透视表成员掩码
操作成功返回 1,不受支持或不安全的绑定返回 -1;所有受影响的视图与缓存状态都会在提交前校验并暂存,同字段所有权含糊时直接拒绝而不猜测
TXLSPivotField.IncludeNewItemsInFilter: Boolean 默认为 False;保留的手动子集会排除新追加的成员,除非显式启用该策略,而不受限的字段则包含它们
因此保留的选择在源增长后仍然稳定,而清除模式会包含新的源成员;导入与编写的成员列表序列化相同的未来成员隐藏策略
既有的集合 Delete 与 Clear 操作仍会保护最后一个绑定的 Slicer 视图;当缓存与其连接的限制需要一起移除时,请使用显式的工作簿操作
固定分组缓存重建
刷新会从经过校验的基础/父级链接暂存数字、日期与显式离散分组身份,包括记录列缺失的导入派生字段;仅链接的源字段保留原始值,自身不参与分组
受支持的域保留既有成员句柄、标题与组序号;数字与日期分组对每个字段只做一次解析并使用固定的原生组项域,日期分组要求区间为 1
TXLSPivotCacheField.GroupAutoStart 与 TXLSPivotCacheField.GroupAutoEnd 默认为 True,保留导入的边界策略;需要域扩张或重新分组的新值会在变更前被拒绝
离散分组要求每个源成员都有既有映射;成环的父级、无效的类型化域、不唯一的字符串标题、计算基础、成员属性字段和不受支持的父级解析都以事务方式拒绝
普通 Make 会重建受支持的过时或缺失派生记录值,MakePreview 只在分离副本上这么做;保存时从派生原生域中省略内部占位共享项,并精确写出声明的组项索引
原生布局元数据预览
function TryXLSXGeneratePivotLayout(const Xml: WideString; Table: TXLSPivotTable; out ResultXml, Reason: WideString): Boolean;
lxPivotXml 帮助器使用精确的字段与缓存成员身份,为受支持的非空本地紧凑视图暂存 rowItems、colItems、轴元数据与位置;支持普通层次结构、默认顶部或底部分类汇总以及任一数据轴
这个仅元数据的操作要求显式 Cache.RefreshOnLoad=True;它保留未知 XML,并在分组或计算字段、自定义分类汇总、不受支持的布局或不一致的导入身份无法表示时,返回原 XML 加一个英文原因
该帮助器不重写工作表单元格,也不改变活动表标志;需要缓存工作表输出的调用方必须提供合适的写入器和单独受支持的物化操作
TXLSPivotTable.MakePreview(AWriter: TlxPivotResultWriter; ALayoutWriter: TlxPivotLayoutWriter): Integer 从分离的预览提供同步布局回调,保留原始 EvaluationSourceTable 身份
TlxPivotLayoutWriter 接收原始表、行/列轴、复制的字段索引与缓存项索引向量、TlxPivotLayoutItemKind、分类汇总类别与前缀长度;xlplikData、xlplikSubtotal 与 xlplikGrand 无需解析标题即可区分聚合身份
这些向量使用 TlxPivotLayoutIndices,仅在回调期间有效;异常向外传播,既有的 Make 与单写入器 MakePreview 行为保持可用
TXLSPivotTables._AddOwned(ATable: TXLSPivotTable) 在所有权转移前保留集合容量,并支持内部的事务性视图附加;应用通常应使用工作表编写方法
边界
版本 2.384.95 新增原生缓存工作表输出、只读交叉筛选可用性与显式历史成员清除;序列化的原生无数据显示、Timeline 编写以及更广的分组布局序列化仍保留单独的验收边界