HotXLS 文档

XlsApplyThemeColorToDrawing 函数

单元: lxHandle
将 12 个 Office 主题颜色槽位之一(外加一个可选色调)应用到绘图侧的 TXLSColorFormat — 即 FillFormat.ForeColor 和 LineFormat.ForeColor 在形状和图表元素上暴露的同一句柄。自 v2.62.0(图表积压波 D 阶段 5)起可用。v2.64.0(阶段 7)新增了工作簿级的内存侧表,因此同一进程内的后续 XlsGetDrawingThemeColor 调用可以恢复原始的主题 idx + 色调
当应用程序希望图表填充、图表线条颜色或形状填充像单元格通过 Interior.SetThemeColor

语法

procedure XlsApplyThemeColorToDrawing(
  ColorFormat: TXLSColorFormat;
  Workbook   : TXLSWorkbook;
  ThemeIdx   : Word;
  Tint       : Double);

参数

ColorFormat — 要更新的绘图颜色槽位。通常是 ForeColor of a TXLSFillFormat or TXLSLineFormat
Workbook — 宿主 TXLSWorkbook。用于解析主题调色板并保存内存侧表
ThemeIdx — 基于 0 的主题槽位 (0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — spec 风格的变亮/变暗调整,范围在 -1.0 .. +1.0

备注

该辅助函数每次调用执行两次写入:
为什么仅限单进程。 BIFF8 OfficeArt 的 4 字节 ColorRef 编码了 indexed / RGB / scheme / sysColor 变体,但不存在类似于 XFExt $087D 的可持久保存主题 idx + 色调的扩展记录。因此 Save / Open 往返的限制是文件格式结构性的,而非 HotXLS 的缺陷。重新加载后,工作簿是一个全新的 TXLSWorkbook 实例,其侧表为空, XlsGetDrawingThemeColor 返回 False,并回退到 ColorFormat.RGB
对于可通过 Save / Open 往返的单元格颜色,请改用专门的 IXLSInterior.SetThemeColor / IXLSFont.SetThemeColor / IXLSBorder.SetThemeColor 入口 — 它们利用 XFExt $087D 富颜色侧记录,使主题 idx + 色调原样通过 Excel 2007+ 往返

示例

将形状的纯色填充重新着色为 accent5 并带 25% 变暗色调,然后从工作簿侧表读回主题意图以显示在属性面板上。在 SaveAs / Open 之后侧表再次从空开始,因此需要持久意图的调用方应自行保存状态

var
  Shape    : TXLSShape;
  ThemeIdx : Word;
  Tint     : Double;
begin
  Shape := Workbook.Worksheets[1].Shapes.Items[0];
  XlsApplyThemeColorToDrawing(Shape.Fill.ForeColor, Workbook, 8, - 0.25);

  // Same process — the side-table still has the entry.
  if XlsGetDrawingThemeColor(Shape.Fill.ForeColor, Workbook, ThemeIdx, Tint)
  then
    ShowMessage(Format('theme=%d tint=%.2f', [ThemeIdx, Tint]));

  Workbook.SaveAs('ThemedShape.xls', xlExcel97);
end;

请参阅