HotXLS ドキュメント

カスタムカラーパレット

概要

Excel ワークブックは 2 つのモデルで色の書式設定を管理します。BIFF8(古典的な XLS)の古い 56 色インデックスパレットと、OpenXML (XLSX) の任意の RGB バインディングまたはテーマスロットです。HotXLS は、パレット対応付けインデックスをカスタマイズする API を提供し、これらの形式間の差異をスムーズに橋渡しします

パレットカラーのインデックス

BIFF8 形式は、書式設定の色を 8 から 63 までのインデックスエントリに対応付けます。ワークブックのカラーインターフェースを使用して既定の色定義を上書きできます

procedure SetColor(const AIndex: Integer; const AColor: TColor);

パレットインデックスを更新せずにカスタム RGB 値をセルに直接割り当てると、HotXLS は自動的にワークブックのアクティブなパレット内の最も近い色に対応付けします

決定論的なインデックスカラーの解決

IXLSWorkbook と TXLSXWorkbook は、ワークブックを変更せずにインデックスを解釈する対応する ResolveIndexedColor オーバーロードを公開しています

呼び出し側は、ソースのインデックス空間として公開 ColorIndex、BIFF の icv、OOXML の indexed のいずれかを指定します。結果はパレット、自動、システム、無効の各トークンを区別したまま保持し、具体的な色を取得できた場合にのみ正規化された ARGB 値を報告します

システムおよび自動のトークンが、暗黙的に現在のデスクトップ環境を読み取ることはありません。環境固有の RGB 出力が必要な場合は、明示的なシステムカラー リゾルバーを渡してください

使用役割(usage role)は、BIFF の罫線インデックス 0 が黒ではなく「未指定」を意味するといった、形式固有の意味を保持します

RGB 値を最も近い物理パレット エントリに対応付ける必要がある場合は、NearestIndexedColor を使用します。共有されたキャッシュ付き OKLab マッチャーが、ワークブックを変更せずに公開インデックスと物理インデックスを返します

パレット変更を計画する前に決定論的な 56 スロットのインベントリを取得するには、ScanIndexedColorUsage を使用します。スタイル、ワークシート オブジェクト、グラフ、コメント、条件付き書式からの定義と参照が、影響を受けるスロットをロック済みとしてマークします

変更を伴わないパレット計画

BuildBiffPalettePlan を使用すると、ワークブックを変更せずに、直接 RGB と解決済みテーマカラーが 56 の物理 BIFF パレット スロットにどう収まるかをプレビューできます

この計画は、ロック済みとして報告されたすべてのインデックス スロットを保護し、既存の同一色は最小の一致スロットに維持し、容量が残っている間は同一色を割り当て、一意なターゲットが空きスロットを超えた場合にのみ頻度加重の決定論的 OKLab クラスタリングを使用します

各ターゲットは、選択された公開インデックスと物理インデックス、対応付けられた ARGB 値、頻度の重み、二乗知覚距離、完全一致状態を報告します。サマリー フィールドは、完全一致の重み、加重誤差、最大誤差、変更されたスロット数、量子化が必要だったかどうかを報告します

ソース パレットのジェネレーションとハッシュにより、ApplyBiffPalettePlan はどのスロットも変更する前に、古いまたは改ざんされた計画を拒否できます。適用に成功するとキャッシュされたマッチャーが一度だけ再構築され、有効な no-op 計画はジェネレーションを変更しません

古典的なワークブックは BiffPaletteSavePolicy も公開しています。既定値は従来のパレットを保持し、明示的な最適化値は BIFF8 出力に対してのみ現在の計画を構築して適用し、保存が失敗またはキャンセルされた場合は元のパレットを復元します

リッチな RGB カラー対応付け

XLSX ワークブックはパレットの制限を回避し、24 ビット RGB 値の直接割り当てを許可します。以下のカラー変換 API を確認してください