Documentação do HotXLS

Método SetThemeColor (Interior)

Define a cor de preenchimento (primeiro plano) da célula em um dos 12 slots de cor de tema do Office com um ajuste de tonalidade opcional. Complemento de Interior.Color para chamadores que desejam endereçar cores de tema do Office diretamente (para que o Excel possa retonar a célula com a paleta de temas da pasta de trabalho) em vez de fixar um RGB fixo. Disponível desde v2.61.0 (backlog de gráfico onda D fase 4)

Sintaxe

procedure SetThemeColor(ThemeIdx: Word; Tint: Double);

Parâmetros

ThemeIdx — slot de tema baseado em 0: 0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..accent6, 10=hlink, 11=foHlink. Corresponde à ordem padrão de tema do Office usada pelo lado XLSX
Tint — ajuste de mais claro/mais escuro no intervalo -1.0 .. +1.0. 0.0 usa a cor base do slot de tema; valores negativos escurecem (luminância HSL em direção a 0), valores positivos clareiam (luminância HSL em direção a 1). O leitor HotXLS codifica isso como um inteiro com sinal Q15 no campo FullColorExt.nTintShade do registro XFExt

Observações

O setter percorre dois caminhos para que a mesma célula seja renderizada corretamente tanto no Excel 2007+ quanto no Excel 2003:
Células definidas via SetThemeColor fazem round-trip no carregamento: Interior.Color retorna o RGB resolvido (tema + tonalidade aplicados pela paleta de tema BIFF) para que os chamadores sempre vejam um valor LongWord concreto
Paletas de temas personalizadas definidas no Excel via Layout de Página → Cores sobrevivem ao carregamento e salvamento pelo registro Theme BIFF8 ($0892), portanto qualquer referência SetThemeColor do lado do chamador resolve pelo tema real da pasta de trabalho em vez do esquema padrão do Office

Exemplo

Preenche a linha de cabeçalho com accent1 e marca células de aviso com um acento vermelho 50% mais claro (accent2 + 0,5 de tonalidade)

var
  Header   : IXLSRange;
  Warnings : IXLSRange;
begin
  Header := Workbook.Sheets[1].Range['A1', 'G1'];
  Header.Interior.SetThemeColor(4, 0.0);   // accent1, base shade

  Warnings := Workbook.Sheets[1].Range['G2', 'G20'];
  Warnings.Interior.SetThemeColor(5, 0.5);   // accent2, 50% lighter

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

Veja também