将单元格底纹填充(前景)颜色设置为 12 个 Office 主题颜色槽之一,并带可选色调调整。供希望直接寻址 Office 主题颜色(以便 Excel 可用工作簿的主题调色板重新为单元格着色)而非固定 RGB 的调用方使用,是
Interior.Color 的配套方法。自 v2.61.0(图表待办 wave D phase 4)起可用
语法
procedure SetThemeColor(ThemeIdx: Word; Tint: Double);
参数
ThemeIdx — 从 0 开始的主题槽:
0=lt1、1=dk1、2=lt2、3=dk2、
4..9=accent1..accent6、10=hlink、11=foHlink
与 XLSX 端使用的标准 Office 主题顺序一致
Tint — 规范风格的变浅/变深调整,范围为 -1.0 .. +1.0
0.0 使用主题槽的基色;负值变深(HSL 亮度趋向 0),
正值变浅(HSL 亮度趋向 1)。HotXLS 读取器将其编码为 Q15 有符号
整数,存入 XFExt 记录的 FullColorExt.nTintShade 字段
备注
该设置器走两条路径,使同一单元格在 Excel 2007+ 和 Excel 2003 中均能正确渲染:
- XF 记录上的索引 icv(旧版) — 主题 + 色调通过工作簿的 BIFF 主题调色板解析为 RGB,然后选取最接近的 56 色调色板索引。Excel 97-2003 在打开文件时看到此近似值
- XFExt $087D 上的 FullColorExt 槽(Excel 2007+) — 写入器发出一条富颜色附属记录,其中
xclrType=3(主题)、xclrValue=ThemeIdx,并由 Tint 推导出 nTintShade。Excel 2007+ 使用此记录恢复精确的主题意图,并在工作簿主题调色板更改时重新为单元格着色 — 这正是 Microsoft 在“另存为”将主题样式的 .xlsx 降级为 .xls 时所用的同一向后兼容技巧
通过
SetThemeColor 设置的单元格在加载时会往返:
Interior.Color 返回解析后的 RGB(通过 BIFF 主题调色板应用主题 + 色调),因此调用方始终看到具体的 LongWord 值
在 Excel 中通过页面布局 → 颜色设置的自定义主题调色板可通过 BIFF8 Theme($0892)记录在加载和保存时保留,因此任何调用方的 SetThemeColor 引用都会通过工作簿的实际主题(而非默认 Office 方案)解析
示例
用 accent1 填充标题行,并用变浅 50% 的红色强调色(accent2 + 0.5 色调)标记警告单元格
var
Header : IXLSRange;
Warnings : IXLSRange;
begin
Header := Workbook.Sheets[1].Range['A1', 'G1'];
Header.Interior.SetThemeColor(4, 0.0); // accent1,基色
Warnings := Workbook.Sheets[1].Range['G2', 'G20'];
Warnings.Interior.SetThemeColor(5, 0.5); // accent2,变浅 50%
Workbook.SaveAs('ThemeFills.xls', xlExcel97);
end;
参见