HotXLS Docs

HotXLS リリースノート

HotXLS のユーザー向け機能、修正、XLS/XLSX 強化、エクスポート更新、互換性変更、ドキュメント更新のバージョン履歴です。

[Unreleased]

バージョン 2.88.111

バージョン 2.88.110

バージョン 2.88.109

バージョン 2.88.108

バージョン 2.88.107

バージョン 2.88.106

バージョン 2.88.105

バージョン 2.88.104

バージョン 2.88.103

バージョン 2.88.102

バージョン 2.88.101

バージョン 2.88.100

バージョン 2.88.99

バージョン 2.88.98

バージョン 2.88.97

バージョン 2.88.96

バージョン 2.88.95

バージョン 2.88.94

バージョン 2.88.93

バージョン 2.88.92

バージョン 2.88.91

バージョン 2.88.90

バージョン 2.88.89

バージョン 2.88.88

バージョン 2.88.87

バージョン 2.88.86

バージョン 2.88.85

バージョン 2.88.84

バージョン 2.88.83

バージョン 2.88.82

バージョン 2.88.81

バージョン 2.88.80

バージョン 2.88.79

バージョン 2.88.78

バージョン 2.88.77

バージョン 2.88.76

バージョン 2.88.75

バージョン 2.88.74

バージョン 2.88.73

バージョン 2.88.72

バージョン 2.88.71

バージョン 2.88.70

バージョン 2.88.69

バージョン 2.88.68

バージョン 2.88.67

バージョン 2.88.66

バージョン 2.88.65

バージョン 2.88.64

バージョン 2.88.63

バージョン 2.88.62

バージョン 2.88.61

バージョン 2.88.60

バージョン 2.88.59

バージョン 2.88.58

バージョン 2.88.57

バージョン 2.88.56

バージョン 2.88.55

バージョン 2.88.54

バージョン 2.88.53

バージョン 2.88.52

バージョン 2.88.51

バージョン 2.88.50

バージョン 2.88.49

バージョン 2.88.48

バージョン 2.88.47

バージョン 2.88.46

バージョン 2.88.45

バージョン 2.88.44

バージョン 2.88.43

バージョン 2.88.42

バージョン 2.88.41

バージョン 2.88.40

バージョン 2.88.39

バージョン 2.88.38

バージョン 2.88.37

バージョン 2.88.36

バージョン 2.88.35

バージョン 2.88.34

バージョン 2.88.33

バージョン 2.88.32

バージョン 2.88.31

バージョン 2.88.30

バージョン 2.88.29

バージョン 2.88.28

バージョン 2.88.27

バージョン 2.88.26

バージョン 2.88.25

バージョン 2.88.24

バージョン 2.88.23

バージョン 2.88.22

バージョン 2.88.21

バージョン 2.88.20

バージョン 2.88.19

バージョン 2.88.18

バージョン 2.88.17

バージョン 2.88.16

バージョン 2.88.15

バージョン 2.88.14

バージョン 2.88.13

バージョン 2.88.12

バージョン 2.88.11

バージョン 2.88.10

バージョン 2.88.9

バージョン 2.88.8

バージョン 2.88.7

バージョン 2.88.6

バージョン 2.88.5

バージョン 2.88.4

バージョン 2.88.3

バージョン 2.88.2

バージョン 2.88.1

バージョン 2.88.0

バージョン 2.87.4

バージョン 2.87.3

バージョン 2.87.2

バージョン 2.87.1

バージョン 2.87.0

バージョン 2.86.1

バージョン 2.86.0

バージョン 2.85.1

バージョン 2.85.0

バージョン 2.84.1

バージョン 2.84.0

バージョン 2.83.2

バージョン 2.83.1

バージョン 2.83.0

バージョン 2.82.0

バージョン 2.81.0

バージョン 2.80.1

バージョン 2.80.0

バージョン 2.70.0

バージョン 2.69.0

バージョン 2.68.0

バージョン 2.67.0

バージョン 2.66.0

バージョン 2.65.0

バージョン 2.64.0

バージョン 2.63.0

バージョン 2.62.0

バージョン 2.61.0

バージョン 2.60.0

バージョン 2.59.0

バージョン 2.58.1

バージョン 2.58.0

バージョン 2.57.0

バージョン 2.56.0

バージョン 2.55.1

バージョン 2.55.0

バージョン 2.54.1

バージョン 2.54.0

バージョン 2.53.0

バージョン 2.52.0

バージョン 2.51.0

バージョン 2.50.0

  • OpenOffice excelfileformat.pdf cross-audit pass. Eight follow-up wire-format and lifetime fixes uncovered by re-validating the BIFF8 writer / reader against the OpenOffice Microsoft Excel File Format documentation after the v2.49.0 [MS-XLS] pass. Public API is unchanged; existing applications recompile and re-save without modification.
  • Shared formulas now span the full column range (§5.94 SHAREDFMLA). The SHRFMLA record body wrote colFirst into the colLast byte, collapsing every multi-column shared formula group to a single-column group in Excel. Fill-down formulas across two or more columns now expand to the correct cells when the workbook is reopened. The reader-side colLast width was also corrected.
  • Shared formula Boolean / Error results round-trip correctly (§5.50 FORMULA). The same FormulaValue byte-layout bug fixed in v2.49.0 for standalone formulas was still present in the shared-formula writer (cells that carry a tExp token pointing at a SHRFMLA master). Cached TRUE/FALSE and #REF!/#DIV/0!/etc. values now appear as written.
  • FORMULA option flags identify shared-formula members (§5.50 FORMULA). Cells inside a shared-formula group now set the fShrFmla bit (0x0008) in the FORMULA record option flags so strict parsers recognise the tExp token as a back-reference.
  • Bold and underlined fonts identified correctly by strict readers (§5.45 FONT). The FONT option-flags word now sets bit 0 (bold) and bit 2 (underlined) in addition to the dedicated bls / uls fields.
  • CFRULE option flags carry spec-mandated constant bits (§5.16 CFRULE). When at least one formatting block is present the option-flags DWORD now ORs in bit 7 (0x00000080, "Always 1") and bits 21-19 (0x00380000, "Always 111").
  • CHOOSE() formulas read back correctly (§3.10.5 tAttrChoose). The tAttr parser previously skipped a fixed 4 bytes for every subtype; tAttrChoose ($04) is variable-length. The decoder now reads nc and advances by 6 + 2·nc bytes.
  • Data-validation and conditional-formatting teardown no longer dereferences past the tail. Two Destroy destructors (TDataValidator, TCondFormatter) walked 0..cnt on lists whose valid indices are 0..cnt-1.

バージョン 2.49.0

  • **[MS-XLS] v20250520 规范审计已通过。** 在 BIFF8 写入器、公式解码器、加密路径、图表生成器、条件格式和数据验证运行时、SST/ExtSST 索引、VBA 存储读取器以及 OLE 流打开路径等方面,修复了 16 个与数据格式和行为相关的问题。公共 API 未更改,现有代码无需修改即可重新编译。以下是主要改进。
  • **BIFF8 Formula レコードにおけるブール値とエラーの結果が、正しくやり取りされるようになりました。** [MS-XLS] §2.5.133 FormulaValue は、型タグを byte[0] に、ブール値/エラーコードを byte[1] に格納します。以前の書き込み処理では、$0001/$0002 が単語として出力され、値が byte[2] に格納されていたため、キャッシュされたブール値の式は常に False と読み込まれ、エラー式の式はすべてのアプリケーションで #NULL! と表示されていました。
  • SetColorRGBメソッドで設定されたセルの色は正しく表示されます。以前は、カラーマネージャーがRGB値に対してColorType=1(テーマ)を、テーマ値に対してColorType=2(RGB)を書き込んでおり、この2つの処理が逆になっていました。現在は、両方の設定メソッドが対応するColorTypeに基づいて処理されるように変更され、RGB値はRGB解決関数に、テーマインデックスはテーマ解決関数に渡されます。
  • **XOR 難読化および RC4 デコードの問題が修正されました。** XOR メソッド 1 のデコードループは、[MS-OFFCRYPTO] §2.3.7.3 に準拠するように変更されました (まず XOR を実行し、次に 5 ビットを右にシフトします。XorArray のインデックスは、後処理位置ではなく、エントリストリームの位置から取得します)。RC4 の `Skip` 関数は、目的のブロックに直接ジャンプするのではなく、1024 バイトごとの境界を連続的に走査し、キーストリームの状態をファイル位置に合わせて、以降の `Decrypt` 呼び出しごとに調整します。
  • **グラフシートの内部フォーマットを仕様に準拠させました。** SIIndex レコードは、numIndex=1 → 2 → 3 の順で出力されます ([MS-XLS] §2.4.262。以前は 2 → 1 → 3 で、厳密なパーサーでは拒否されていました)。DEFAULTTEXT の数は、仕様で規定されている最大値である 2 に制限されています ([MS-XLS] §2.1.7.20.1。以前は 4 でした)。Chart3DBarShape のプレースホルダーには、正しい ID である `$105F を使用しています (以前は `$1066 でした)。
  • **HLinkツールチップレコードが正しく読み込まれます。** 以前は、`HLinkTooltip` ($0800) のデータ部分のデコーダーが、オフセット2/4/6/8の位置にあるFrtRefHeaderのアンカーフィールドを読み取っていたため、アンカーと範囲の比較が一致せず、セルごとのツールチップが静かに破棄されていました。現在、ツールチップは対応するハイパーリンクに関連付けられます。また、BIFF8の範囲参照デコーダーにおいて、BIFF5/7のフォールバックにおける符号拡張パスの`FFirstColRel`/`FLastColRel`のタイプミスを修正しました。これにより、負の相対オフセットを持つ最後の列を持つ範囲の誤ったデコードが修正されました。
  • 条件付き書式設定とデータ検証の実行時エラー修正。`TCondRange`と`TDVRange`の両方で、`IsContainRow`は、範囲が単一行に縮小された場合にのみtrueを返していました(比較が逆になっていました)。これにより、複数行の範囲で、行ごとの条件付き書式/データ検証ルールのクリアが機能するようになりました。3つのデストラクタ(CondFormat、formatter、DVRangeList)は、有効なインデックスが0からcnt-1までのリストに対して、`for i := 0 to cnt`を使用していました。このオフセットエラーを修正し、長時間実行のワークロードで、まれに発生していたクラッシュを解消しました。CF12アイコンセットルールは、`ct=$06`([MS-XLS] §2.4.43のアイコンセット)を生成します(以前は`ct=$05`(フィルター)でした)。これにより、アイコンセットルールを含むワークブックを開くと、ルールがそのまま保持されるようになりました。
  • **ExtSSTの高速検索インデックスが、大規模なワークブックに対して仕様に準拠するように改善されました。** `dsst`フィールドは、[MS-XLS] §2.4.107に従って、静的なデフォルト値である8ではなく、`max((cstUnique / 128) + 1, 8)`として計算されます。これにより、約900以上のユニーク文字列を持つワークブックで、正しい`rgISSTInf`バケット配列が構築され、Excelの高速検索SSTルックアップが機能するようになりました。
  • **WriteAccess レコードは、[MS-XLS] §2.4.349 の cch <= 54 を遵守します。** `userName.cch` フィールドは、現在、実際のユーザー名長("HotXLS" の場合は 6)を保持し、残りのバイトは仕様で定義された「未使用」の末尾で埋められます。 以前は、このフィールドが cch=109 を保持しており、これは Office File Validation によって重大なフォーマット違反としてフラグが立てられていました。
  • **BIFF8 工作簿流的打开路径与规范中的拼写相匹配。** 首次尝试使用 OLE OpenStream 时,使用 'Workbook'([MS-XLS] §2.1.7.20 中规定的首字母大写),而不是全部小写,因此,在对大小写敏感的 OLE 实现中,复合文件容器可以在第一次尝试时成功打开该流。
  • **VBAモジュールリーダーは、各ストリームの最後のバイトを削除する問題を修正しました。** 以前は、ファイルの末尾へのシークに使用する長さが `trunc(l) - 1` であり、`trunc(l)` ではなく、これにより圧縮されたソースの末尾が切り捨てられ、特定のモジュールでRLEコンテナデコンプレッサーが早期に終了していました。

バージョン 2.48.10

  • HotXLS で保存された .xls ファイルは、Excel がすべてのワークブックに期待する 2 つの OLE 複合ファイル プロパティセットストリームを含むようになりました:\005SummaryInformation\005DocumentSummaryInformation。v2.48.10 以前は TRIAL ビルドのみが書き込んでいました(バナースタンプメカニズムとして);リリースビルドは Workbook ストリームが有効な BIFF8 だが OLE コンテナが標準 Office メタデータストリームを欠いている .xls ファイルを生成していました。Excel 2003 の厳密なパーサはこれを「File error: data may have been lost」状態として扱います(現代の Excel は保護ビュー「このファイルには問題があります」バナーを保持)。ストリームを追加することで BIFF8 レコードを変更せずにチャートワークブックのダイアログを解決します。
  • 2 つのストリームは Win32 の StgCreatePropSetStg + IPropertySetStorage.Create + IPropertyStorage.WriteMultiple パス経由で出力されます —— Microsoft Office 自身が使うのと同じコードなので、Office File Validation はバイトレイアウトを受け入れます。SummaryInformation ストリームはデフォルトの AppName="HotXLS" と空の Author で作成されます;TRIAL ビルドはデフォルトスタンプの後に lxTrial.XlsTrialStampXlsSummary 経由で Author / AppName 値をトライアルバナーで上書きするため、トライアルファイルは Excel のファイル > 情報 > プロパティペインで識別可能のままです。DocumentSummaryInformation ストリームは空で作成されます(Win32 はプロパティセットヘッダー + CODEPAGE プロパティを出力します —— Excel の厳密なパーサがメタデータを「存在し正しく形成されている」と見なすには十分)。
  • この修正は普遍的です —— HotXLS で保存されたすべての .xls が今や標準 OLE メタデータを携帯し、チャートワークブックに限らない。以前のリリースのワークシートのみの出力は、Excel がメタデータのないチャートシートワークブックよりもワークシートのみワークブックに対して寛容だったため症状を逃れていましたが、技術的にはそれらにもストリームが欠けていました。新しい Lib/lxXlsSummary.pas ユニットが 2 つのヘルパープロシージャを保持します;lxHandle.pas は TXLSWorkbook.SaveWorkbook 内で StoreWorkbook が Workbook ストリームを投入した後、FDocStorage.Commit の前に無条件で呼び出します。
  • このリリースは 8 バージョンに及ぶチャート Phase 2 フォローアップシーケンス(v2.47.0 — v2.48.10)を閉じます:tArea3D シリーズバインディングから始まり、BRAI id 再整列、sdtX/cValx Excel 観測値、SERIESTEXT 配置、Workbook ストリームパディング削除、シートレベルシェルレコード、そして今 OLE メタデータストリーム。結果は Excel 2003 と現代の Excel でいかなる「ファイルに問題があります」警告もなしに開くチャート .xls であり、Excel 自身が同じデータに対して書くものとバイト単位で整合しています。

バージョン 2.48.9

  • BIFF8 チャートシートが Excel 2003+ が要求する完全なシートレベルシェルレコードのセットを携帯するようになりました。v2.48.8 の chart_phase2_demo.xls は縦棒チャートを正しくレンダリングしましたが、Excel 2003 はまだ「File error: data may have been lost」ダイアログを表示しました(新しい Excel バージョンは保護ビューバナーを保持しました)、これはチャート substream にワークシート substream が通常持つ同じシートレベルレコードが欠けていたためです。実際の Excel ファイル(from-scratch と HotXLS 出力の re-saved の両バリアント)は、チャートレコードをこのシェルで囲みます:
    • チャートレコードの前(BOF と UNITS の間):HEADER($0014、空)、FOOTER($0015、空)、HCENTER($0083、値 0)、VCENTER($0084、値 0)、SETUP($00A1、34 バイトのページ設定)、PRINTSIZE($0033、値 3)。
    • チャートレコードの後(最外部 CHART END の後、EOF の前):DIMENSIONS($0200、14 バイト)がキャッシュデータ範囲を宣言、3 つの SERIESINDEX($1065)がカテゴリ / 値 / バブルサイズキャッシュスロットをマーク、キャッシュされた値ポイントごとに NUMBER($0203、14 バイト)、最後に WINDOW2($023E、10 バイトのチャートシートバリアント)。
    バイト値は dev-notes/biffview-refs/excel_column_chart_resaved.xls(Excel が保存した縦棒チャートリファレンス、ローカル)から逐語コピー。
  • 値キャッシュは現在ゼロプレースホルダ(各データポイントで 0.0)を出力しており、Excel 自身がソースキャッシュが事前に投入されていないチャートを再保存するときに書くものと一致します。チャートは BRAI の PtgArea3d 参照が描画時にソースワークシートセルに解決されるため、実データを依然として描画します —— キャッシュは Excel が警告なしにチャートシートを解析できるようにするためのものであり、プロットを駆動するものではありません。将来のリリースでは、実際の Values 範囲の数値でキャッシュを投入できます;wire 形式は整っています。
  • エンドツーエンドスモークテスト:再生成された Demo/Delphi/XlsCreateChart/chart_phase2_demo.xls を Excel 2003 で開く —— "File error: data may have been lost" プロンプトはもう表示されず、縦棒チャートは以前と同じようにレンダリングされます。同じファイルは現代の Excel でも保護ビューバナーなしで綺麗に開きます。

バージョン 2.48.8

  • BIFF8 (.xls) ライタは Workbook ストリームの末尾にゼロバイトのパディングを追加しなくなりました。TXLSWorkbook.StoreOleFile は以前、最後のシートのレコードの後で StoreExtraSpace(Book) を呼び出し、ストリーム長を次の 512 バイト(OLE セクタ)境界までパディングしていました。Excel の厳密なパーサはこれらの末尾ゼロバイトを偽の 0x0000 id レコードストリームとして扱い、保護ビューの「このファイルには問題があります」プロンプトを表示します —— v2.48.7 chart_phase2_demo.xls で BRAI / sdtX / SERIESTEXT wire 形式が修正されチャートが正しくレンダリングされた後も表示されていました。この呼び出しを削除すると Workbook ストリームコンテンツからパディングが消えます。OLE セクタパディングは依然として発生しますが、ストリームの下の CFB コンテナ層で発生し、Excel 自身が配置する場所と一致します(Excel が保存するすべての .xls は Workbook ストリーム長がセクタ非整列です)。
  • 症状の歴史:HotXLS で保存されたあらゆる .xls は、有効レコードの合計バイト長がたまたま 512 バイト境界に着地しない限り、末尾ゼロストリームを持っていました。このバグはリポジトリのブートストラップコミット以降存在しましたが、ほとんど表面化しませんでした —— ほとんどのワークブックには十分なレコードがあり、パディングが小さくなる(Excel が許容する ≤ 4 ゼロバイト)からです。チャートシートワークブックはセクタ境界よりはるかに少ないところに着地(v2.47.0 — v2.48.7 デモは 420 ゼロバイトをパディング)するため、保護ビュープロンプトが一貫して現れる場所です。
  • StoreExtraSpace メソッド自体は lxHandle.pas に private な dead code として残ります、将来のコードパスが本当にセクタ丸めストリームを必要とする場合のため;StoreOleFile 内の呼び出し点が削除されます。Workbook ストリーム長は今やすべての有効レコードのバイト長と正確に等しくなります(チャートデモ:3164 バイト;Excel from-scratch リファレンス:4419 バイト —— 両方ともセクタ非整列)。リーダーコードパスは影響を受けません —— HotXLS は常に Excel 保存ファイルの非セクタ整列 Workbook ストリームを正しく読んできました。

バージョン 2.48.7

  • BIFF8 チャート series レコードがついに Excel で正しくレンダリングされます。修正は BRAI id 割り当て を [MS-XLS] §2.4.51 に再整列することです —— 親実装計画は id 意味を反転して文書化しており、このバグが v2.41.0 から v2.48.6 までの各 chart リリースに波及していました。正しい id セマンティクスは:
    • id = 0 — series name / 凡例ラベル(計画では:categories)
    • id = 1 — values(正しい)
    • id = 2 — categories(計画では:name)
    • id = 3 — bubble sizes(計画では:errBars)
    反転の Excel 症状は完全に一致:Categories 範囲(テキストラベル A2:A5)が BRAI id=0 として出力 → Excel はそれを series 名として読み、4 セルを "North South East West" に連結して凡例 / 自動タイトルに使用。PTG tStr 'Q1 Sales' リテラルが BRAI id=2 として出力 → Excel はそこに category セル範囲を期待、文字列リテラルを見つけて諦め、X 軸を 4 つのゼロとしてレンダリング。
  • Excel-saved 縦棒チャートの wire 形式にも再整列:SERIES.sdtX0x0003(テキストカテゴリに対する Excel の観測値、[MS-XLS] §2.4.252 が文書化する 0x0001 ではない)、cValx0 ではなく実際のカテゴリ数を運びます。「sdtX ∈ {1, 3} のとき cValx MUST = 0」という spec 規則は、検査されたすべての Excel-saved サンプルに反します。
  • SERIESTEXT($100D)リテラル名キャリアが戻ってきましたが、正しい場所にあります:id = 0 BRAI の直後、SERIES BEGIN/END ブロック内。これは実際の Excel ファイルが行うこと —— v2.48.5 の出力ポイント(BRAI クラスタ全体の後、DataFormat の前)は間違っていてチャート parsing を壊しました。正しい位置は series 名 BRAI のすぐ隣です。
  • v2.41.0 — v2.48.6 で保存されたチャートファイルはすべて反転 BRAI wire 形式を持ちます。Excel ではエラーなく開きますが、上記の凡例 / X 軸の症状を示します。v2.48.7+ で再保存して移行;API 変更なし —— 同じ AddChartSheet 呼び出しが、同じデータに対して Excel 自身が書くものと同一にレンダリングされるチャートを生成します。
  • 新しいバイトレベル検査ツール dev-notes/biffview-refs/dump_chart_substream.py は、任意の BIFF8 .xls の chart substream をレコード毎にデコードしてダンプします(SERIES / BRAI / SERIESTEXT / AXIS / CATSERRANGE / LEGEND / OBJECTLINK / POS / TEXT)。このリリース中に HotXLS 出力を Excel-saved 参照サンプルに対してバイト diff するために使用;将来のチャート spec follow-up のために利用可能。

バージョン 2.48.6

  • BIFF8 チャートシート substream は v2.48.5 の変更を撤回します。再生成された v2.48.5 デモを実際の Excel でテストすると、チャートがまったく表示されません —— v2.47.0 ベースライン(チャートは描画されるが X 軸ラベルが間違い)より悪化。v2.48.5 の 2 つの変更が原因でした:
    • SERIES.sdtX = 4 は Apache POI が CATEGORY_DATA_TYPE_TEXT = 4 を公開しているにもかかわらず、実際には Excel に受け入れられません。[MS-XLS] §2.4.252 は sdtX0x0001 または 0x0003 であることを厳密に要求します。
    • SERIES BEGIN/END ブロック内に追加された SERIESTEXT($100D)レコードは構造違反 —— SERIESTEXT は TEXT ブロック(チャートタイトル / 軸タイトル / データラベルのコンテキスト)に属し、SERIES ブロック内には属しません。そこに埋め込むと Excel のチャートパーサが substream 全体を拒否します。
  • v2.48.6 は v2.47.0 の wire 形式を復元し、加えて spec 準拠修正を 1 つ追加します:sdtX = 1 のとき SERIES.cValx は今 0 です([MS-XLS] §2.4.252 spec MUST 規則)。v2.48.6 以前は cValx = count(デモでは 4)を書いており、この規則に違反していました。これが Excel の「ドキュメントに問題があります」保護ビュープロンプトに寄与していた可能性があります。cValy は実際の値数を保持(sdtY=1 はゼロ規則なし)。
  • 新しい XlsCreateChart Delphi デモを Demo/Delphi/XlsCreateChart/ に追加。2 シートのワークブックを作成:4 行(Region, Sales)の "Data" シートと、シリーズが Data!$A$2:$A$5 / Data!$B$2:$B$5 を Categories / Values としてバインドする "Chart1" 縦棒チャートシート。このデモは v2.47.0 — v2.48.5 がリポジトリのルートに置いていたアドホック chart_phase2_demo.xls の恒久的後継です。ルートファイルは削除済み、新デモは自身の .exe のディレクトリに出力を書き込みます。
  • 既知の未解決: v2.48.6 の wire 形式でも、Excel は縦棒チャートの X 軸ラベルをゼロとして描画し続け、凡例には BRAI id=2 PTG tStr リテラル 'Q1 Sales' を使わずカテゴリセルテキストの連結にフォールバックします。これは Excel 自身が保存した参照縦棒チャートとバイト diff する必要がある実 wire 形式のギャップ —— follow-up としてトラッキング。4 本の棒のプロットエリア自体は正しく描画されます(高さ 100/150/200/175 が Values と一致)。

バージョン 2.48.5

  • BIFF8 チャート series レコードが Excel で正しくレンダリングされるようになりました。v2.47.0 で Categories / Values 範囲の tArea3D バインディングを接続しましたが、Excel は X 軸ラベルを全て 0 として描画し、連結されたカテゴリテキスト("North South East West")を凡例と自動タイトルの両方に使用していました。2 つの修正で意図通りの表示に戻ります:
  • SERIES レコードの sdtX フィールドを 1 から 4(text categories)に変更。[MS-XLS] §2.4.252 は 1(dates)と 3(BIFF7 sequence)のみ記載していますが、実際の Excel が保存する縦棒 / 横棒 / 折れ線チャートはテキスト軸カテゴリに 4 を書き込みます(Apache POI の CATEGORY_DATA_TYPE_TEXT 定数に一致)。sdtX=1 では Excel が 'North' / 'South' セルを数値に変換しようとして失敗し 0 にフォールバック、sdtX=4 ならテキストラベルがそのまま表示されます。以前の wire format は spec の「sdtX=1 のとき cValx はゼロでなければならない」規則にも違反していました。
  • literal series Name が指定された場合、SERIES BEGIN/END ブロック内(BRAI クラスタの後、DataFormat の前)に SERIESTEXT($100D)レコードが生成されます。Phase 2 前半の仕組み(BRAI id=2 + PTG tStr)は spec 完全性のため残しますが、Excel は実際には SERIESTEXT から凡例ラベルと自動タイトルを取得します。BRAI バリアントだけだと Excel はカテゴリセルの連結にフォールバックしていました。修正後、凡例は実際の Name(例: 'Q1 Sales')を表示し、空のチャートタイトルは自動タイトルスロットを空のままにします。
  • 移行: v2.42.0 — v2.47.0 のチャートシート出力はエラーなしで Excel で開けますが、上記の症状でレンダリングされていました。v2.48.5+ で再保存すると修正された wire format になります。API 変更不要、同じ AddChartSheet 呼び出しで正しいチャートが生成されます。

バージョン 2.48.4

  • BIFF8 CFEX ($087B) の出力は引退しました。HotXLS は CF12 ($087A) の後にペアの CFEX を書き込まなくなり、すべての Data Bar / Color Scale / Icon Set 設定は CF12 の種類別 tail(v2.48.1 — v2.48.3)にインラインで含まれます。Apache POI / NPOI は CFEX を無視するので、純粋な簡素化です。
  • BIFF8 CF12 読み取りパスは CF12 から種類別 tail を直接消費するようになりました。これにより 5-PATCH Gap #6 wire-format 書き直し(v2.48.0 header + v2.48.1 data_bar + v2.48.2 color_gradient + v2.48.3 multistate + v2.48.4 CFEX 引退)が完了します。

バージョン 2.48.3

  • BIFF8 CF12 ($087A) の Icon Set ルールは NPOI 互換の multistate サブレコードをインラインで出力するようになり、Apache POI / NPOI はアイコンファミリー、stop ごとのしきい値、reverse / icon-only フラグを CF12 から直接読めるようになります。レイアウトは NPOI IconMultiStateFormatting.Serialize() と完全一致。
  • v2.48.2 で HotXLS 生成された .xls ファイルは、Icon Set ルールが新しいインライン tail を持つよう v2.48.3 で再保存する必要があります。CFEX 出力の引退は v2.48.4 で対応します。

バージョン 2.48.2

  • BIFF8 CF12 ($087A) の 2-stop / 3-stop Color Scale ルールは NPOI 互換の color_gradient サブレコードをインラインで出力するようになり、Apache POI / NPOI は各 stop のしきい値、色、補間位置を CF12 から直接読めるようになります。レイアウトは NPOI ColorGradientFormatting.Serialize() と完全一致。
  • v2.48.1 で HotXLS 生成された .xls ファイルは、Color Scale ルールが新しいインライン tail を持つよう v2.48.2 で再保存する必要があります。Icon Set tail は v2.48.3 で対応します。

バージョン 2.48.1

  • BIFF8 CF12 ($087A) Data Bar ルールは NPOI 互換の data_bar サブレコード(template_params の後に 28 バイト追加)をインラインで出力するようになり、Apache POI / NPOI はバー色、min/max しきい値、パーセント長境界を CF12 から直接デコードできます(POI が無視するレガシー CFEX レコードは不要)。レイアウトは NPOI DataBarFormatting.Serialize() と完全一致。
  • v2.48.0 で HotXLS 生成された .xls ファイルは、Data Bar ルールが新しいインライン tail を持つよう v2.48.1 で再保存する必要があります。Color Scale / Icon Set 種別 tail は v2.48.2 — v2.48.3 で対応します。

バージョン 2.48.0

  • BIFF8 CF12 ($087A) ヘッダーレイアウトを NPOI CFRule12Record.serialize() および Excel 保存リファレンスファイルに合わせて修正。Excel は ext_formatting_length(4) をフォーミュラトークンの前に、長さプレフィックス付きの template_params ブロックを書き込みます。HotXLS はこれらのフィールドが間違った順序でした。種類別 tail (data_bar / color_gradient / multistate) は v2.48.1 — v2.48.3 で対応します。
  • v2.34.0 — v2.47.1 で HotXLS 生成された .xls ファイルは、CF12 レコードを書き換えるため v2.48.0 で再保存する必要があります。各 CF12 の末尾にあった仕様外の 2 バイト nID フィールドは削除されました。

バージョン 2.47.1

  • BIFF8 CONDFMT12 ($0879) レコードの wire 形式を Excel 保存ファイルに合わせて修正。以前の実装は初期 spec ドラフトに従って 8 バイトの関連範囲を FtrHeader 内の "予約済み" として扱い、numCF の前に存在しない 4 バイト Reserved フィールドを挿入していました。Excel 保存の .xls は実際には FtrHeader のその 8 バイトを規則の関連セル範囲で埋め、Reserved フィールドを持ちません。リファレンス: poi_ConditionalFormattingSamples.xls レコード 152 と HotXLS 出力がバイト単位で一致。
  • v2.34.0 — v2.47.0 で HotXLS 生成された .xls ファイルは、CONDFMT12 レコードを修復するため v2.47.1 で再保存する必要があります。

バージョン 2.47.0

  • BIFF8 のチャートシート作成が series に 実データ範囲 をバインドできるようになりました。6 引数の AddChartSheet オーバーロードに渡される CategoriesValues の A1 文字列(例: 'Data!$A$2:$A$5')は tArea3D PTG トークンへコンパイルされ、series の BRAI id=0(カテゴリ)と BRAI id=1(値)レコードに書き込まれます。Excel で開いた .xls は v2.42.0 の空のプロットエリアではなく、実際のデータ点を描画します。
  • Sheet 名解決と EXTERNSHEET 登録は自動:パーサがブック内で該当シートを検索し、XTI エントリが未登録なら登録し、対応する 0-based の ixti を PtgArea3d 本体に書き込みます。再保存時にチャートレコードストリームは数式コンパイラを通って再シリアライズされるため、ixti は最終的な EXTERNSHEET 順序と整合性が保たれます。
  • 受け付ける範囲形式:Sheet1!$A$2:$A$5(絶対参照)、Sheet1!A2:A5(相対マーカーも許容 —— チャート series は常に絶対として保存)、'My Sheet'!$A$1:$B$5(スペースを含むシート名はシングルクォートで囲む)、Sheet1!$A$1 のような単一セル参照(1×1 PtgArea3d に縮退)。データ点数(cValx / cValy)は area 寸法から自動算出されます。
  • サポートされない参照形式は v2.41.0 風の cce=0 プレースホルダ BRAI へ無音 fallback し、チャートは引き続き Excel で開けます:ブック間参照([Book2.xls]Sheet1!...)、名前付き範囲(Sheet1!ProfitColumn)、! シートプレフィックス欠落、チャートシート自身を指す参照。これらは後続フェーズに繰り延べ。
  • これで Roadmap #10 Phase 2(縦棒チャートのエンドツーエンド)完了。Series ラベル(Phase 2 前半 / v2.42.0)と series 範囲バインディング(このリリース)が揃い、AddChartSheet 経由で作成した縦棒チャートが Excel 内で適切な凡例と実データを描画します。

バージョン 2.46.0

  • BIFF8 側の差分 XF(DXF)デコーダーが、標準 Excel 2003 64 色パレットから xclrType=1(インデックスパレット)カラー を解決するようになりました。以前はインデックスカラーが RGB パスにフォールスルーし、icv バイトが RGB 値の一部として誤解釈されていました。
  • ルックアップは HotXLS 組み込みの Excel 2003 デフォルトパレットを使用します —— icv 0..7 は 8 つのシステムカラー、icv 8..15 はシステムカラーをミラー、icv 16..63 は標準カスタマイズ可能なデフォルト値。範囲外の icv は黒にフォールバック。
  • BIFF8 PALETTE レコード(rt=$0092)のワークブックカスタマイズは 参照されません —— カスタマイズされたパレットを持つファイルではカラーのわずかな偏差が出る可能性があります。
  • xclrType=0(自動)と xclrType=2(RGB)のパスは変更ありません。

バージョン 2.45.0

  • 条件付き書式ルールは XLSX <cfRule priority="N"/> と BIFF8 CF12 ipriority フィールドの両方で priority 属性 を round-trip するようになりました。以前は保存時に各ルールに対してコレクション内の index に基づく連番 priority が割り当てられ、Excel 保存ファイルの priority は読み込み時に無視されていました。
  • 新しい Priority プロパティが TCondFormatRule(BIFF8 側)と TXLSXConditionalFormat(XLSX 側)に追加。デフォルトはゼロで保存時の auto-by-index 動作を保持;正の値を設定すると priority がピン留めされます。
  • Priority はマルチルールレイヤリングを制御 —— 複数のルールが同じ範囲をカバーするとき、Excel は priority 順に適用します。Priority の round-trip により HotXLS で編集したワークブックは意図したレンダリング順序を保持します。
  • Priority に触れない呼び出し元のデフォルト動作は変更なし:XLSX ライターはコレクション順で priority="1""2"... を出力し続けます。

バージョン 2.44.0

  • アイコンセット条件付き書式ルールが XLSX 側で stop ごとのアイコンオーバーライド をサポートするようになりました。3 / 4 / 5 stop アイコンセット内の各 stop は、ファミリーのデフォルトを離れて、17 個の Excel 2007 組み込みアイコンファミリーのいずれかから任意のアイコンを表示でき、icon set name + icon id で識別されます。OOXML 要素は <cfIcon iconSet="OtherSet" iconId="N"/>
  • TXLSIconSetSpec に新しいメソッド:SetIconOverride(stopIndex, OverrideSet, IconId)ClearIconOverride(stopIndex)。読み取り専用プロパティ HasIconOverride[i]IconOverrideSet[i]IconOverrideId[i]
  • XLSX ライターは SetIconOverride を呼んだ stop に対してのみ <cfIcon> 子要素を出力します;他の stop はファミリーのデフォルトを保ちます。リーダーは入力 <cfIcon> 要素を位置で解析します。
  • 既知の制限:BIFF8(.xls)CFEX には stop ごとのオーバーライド用のスロットがないため、オーバーライド付きルールを .xls に保存すると全 stop がファミリーのデフォルトでレンダリングされます。

バージョン 2.43.0

  • XLSX(.xlsx)条件付き書式ルールが、データバーとカラースケールルールの <color> 要素で テーマカラー参照 を round-trip するようになりました。以前はライターが <color rgb="FFRRGGBB"/> のみを出力し、リーダーは theme / tint 属性を無視していました。今は両側がテーマパレットインデックスとオプションの tint を保持します。
  • TXLSDataBarSpecTXLSCfValue(ColorScale stops が使用)の新しいメソッドがスロットをテーマモードに切り替えます:SetThemeColor(themeId, tint)ClearThemeColor。読み取り専用プロパティ IsThemeColorThemeColorIdThemeColorTint
  • XLSX ライターは Tint が正確に 0.0 のときに <color theme="N"/> を、非ゼロのときに <color theme="N" tint="0.5"/> を出力し、Excel 自身の "最短形式" 出力と一致します。
  • デフォルト動作は変更なし:既存の RGB のみエントリポイントで作成されたルールは以前と完全に同じ <color rgb="..."/> を出力し続けます。
  • 既知の制限:BIFF8(.xls)CFEX は依然として RGB カラーのみ運びます;ワークブックテーマパレット解決(theme1.xml 解析)は引き続き範囲外;iconSet ルールは <color> 要素を運びません。

バージョン 2.42.0

  • BIFF8 グラフシート作成 API に TXLSChartSeriesInfo レコードの配列(NameCategoriesValues)を受け取る 5 番目の AddChartSheet オーバーロードを追加。空でない Name は系列名 BRAI(id=2)上の tStr PTG トークン経由でリテラル系列ラベルとしてグラフサブストリームに書き込まれる。Excel はこのラベルを凡例と系列セレクタで使うため、複数系列グラフは既定の "Series1 / Series2" プレースホルダの代わりに適切な系列キャプションを表示するようになった。
  • TXLSChartSeriesInfoTXLSChartType と並んで lxHandle から再エクスポートされる。呼び出し側は lxChartBuilder を直接インポートせずに配列を構築できる。
  • これは Roadmap #10 フェーズ 2(縦棒グラフのエンドツーエンド)の前半。系列名のパスは配線済み;分類と値のデータバインディングCategories / Values の A1-range 文字列を BRAI 内の実際の tArea3D セル範囲参照に変換)はまだプレースホルダのまま — これら 2 フィールドは API では受け入れられるがグラフサブストリームにまだ出力されない。後続リリースで数式コンパイラと EXTERNSHEET 参照テーブル経由でフェーズ 2 の後半を仕上げる。

バージョン 2.41.0

  • HotXLS に BIFF8 グラフシートのプログラマティック作成を追加。Sheets の新しい AddChartSheet オーバーロード群は、保存される .xls ファイルに完全なグラフサブストリームを書き込む。以前はグラフシートは load-save ラウンドトリップで不透明に保持できるだけだった。4 つのオーバーロードが一般的なエントリポイントをカバー:名前のみ / 名前 + グラフ種別 / + タイトル / + 分類軸タイトル + 値軸タイトル。返される IXLSWorksheetSheets コレクションに現れ、保存時にグラフシートの boundsheet エントリが書き出され、Excel はグラフタブとして開く。
  • 新しい列挙型 TXLSChartType がグラフ種別を選択:xlsChartTypeColumnxlsChartTypeBarxlsChartTypeLinexlsChartTypePie。この列挙型は lxHandle から再エクスポートされるため、利用者コードは chart-builder ユニットを直接インポートする必要がない。
  • 発行されるグラフサブストリームは仕様が要求する BIFF8 のフレーミングをカバー — BOF (dt=$0020)、Chart / PlotGrowth / Frame / Series / SheetProperties / AxesUsed / AxisParent(POS + 分類軸 + 値軸 + PlotArea + Frame + ChartFormat + グラフ種別レコード + ChartFormatLink + Legend)、EOF — これにより Excel は結果を要求された種別の本物のグラフタブとして認識する。既存の TXLSCustomChart 経由のグラフシートラウンドトリップは変更なし。
  • これは Roadmap #10(CHART サブストリーム — BIFF8 監査で最大の項目)の最初のリリース。フェーズ 1 はフレームワークと API 面を提供し、続くフェーズで系列データバインディング、軸タイトル、種別ごとの詳細な書式設定をレイヤー化できるようにする。
  • 制限事項:新しいグラフシートは要求された種別の空のデフォルトグラフを描画する。系列データバインディング(グラフを実際のセル範囲にリンク)、入力されたタイトルテキスト、種別ごとの詳細な書式設定(gap width / overlap / hole size / marker style)は後続フェーズに延期。Excel での保存と再オープンはグラフシートの存在と種別を保持するが、ユーザー提供データはまだ保持しない。

バージョン 2.40.0

  • Demo/Delphi/XlsCondFormat12/ に新しい XlsCondFormat12 Delphi デモプロジェクトを追加しました。v2.34.0+ の条件付き書式拡張 API をエンドツーエンドで実演します。3 つのボタンで CondFormat12.xls(BIFF8 バックエンド)、CondFormat12.xlsx(XLSX バックエンド)、または両方を並べて生成できます。各出力シートは同じ 4 種類のルール — データバー、3 色カラースケール、アイコンセット(3 矢印)、2 色カラースケール — を 10 行のデータでカバーし、Excel で開いて両バックエンドのレンダリングを目視確認できます。
  • BIFF8 パスはさらに v2.35.0 DXF スタイルオーバーライドを実演します:データバールールに白色太字フォント色を付加し、暗いバー塗りつぶし上でもセルテキストが読みやすくなります。
  • 新しい DUnitX テストフィクスチャ Tests/Delphi/HotXLS.CondFormat12Tests.pas が、10 個の round-trip と API 表面シナリオをカバーします:4 種類のルールの BIFF8 round-trip、DXF Style の RGB カラー / テーマカラー / フォントフラグ round-trip、Data Bar / 3-color scale / ShowOnly 付き Icon Set の XLSX round-trip。フィクスチャは HotXLSDelphiTests.dpr と対応する .dproj に配線済みです。
  • テストフィクスチャをサポートするため、TCondFormat に 2 つの新しい公開アクセサ:RuleCountRule(I) を公開しました。
  • 検証ノート:デモの .xls.xlsx を Excel で開いて、4 つの CF12 / OOXML 拡張ルールが並列にレンダリングされるのを確認してください。

バージョン 2.39.0

  • 条件付き書式ルールの差分 XF(DXF)スタイルオーバーライドが、既存の RGB モードに加えて テーマカラーエンコーディング をサポートするようになりました。3 つのカラースロット — フォント色、塗りつぶし背景、塗りつぶし前景 — それぞれを、ワークブックテーマインデックスと tint 値に対して設定でき、"accent-2 を 50% 明るく" のようなスタイルが固定 RGB に潰されることなく round-trip します。
  • TXLSDxfStyle の 3 つの新しいメソッドが スロットをテーマモードに切り替えます:SetFontColorTheme(themeId, tint)SetFillBgColorTheme(themeId, tint)SetFillFgColorTheme(themeId, tint)。Tint は [-1.0, +1.0] 範囲の single — 負の値はテーマカラーを暗くし、正の値は明るくし、0.0 はベースカラーのまま。対応する既存の SetXxxColor(rgb) は RGB モードのまま;2 つのモードはスロットごとに相互排他的です。
  • 新しい読み取り専用プロパティ XxxColorIsTheme / XxxColorThemeId / XxxColorThemeTint でアクティブモードを問い合わせます。HasXxxColor はどちらのモードでも True を返します。
  • BIFF8 wire 形式は標準の XFProp Colour レイアウトに従います:RGB は xclrType=2 + 4 バイト BGR LongWord、テーマモードは xclrType=3 + 2 バイト符号付き tint × 32767 + 4 バイトテーマインデックス。DXF blob デコーダーはこの dispatch をミラーリングします。
  • 既知の制限:テーマモード round-trip は BIFF8(.xls)側でのみサポートされます — XLSX(.xlsx)側は依然として <color rgb="..."/> のみを出力・読み込みします。

バージョン 2.38.0

  • XLSX(.xlsx)読み込みが受信ファイル内の Excel 2007+ 条件付き書式拡張ルール — データバーカラースケール(cfvo 数から自動判定する 2 段と 3 段)、アイコンセット — を認識し、対応する TXLSXConditionalFormat オブジェクトに値を設定するようになりました。ユーザーコードはこれらのルールを失うことなく検査・round-trip できます。以前は Excel 保存のこれらルール種別を含む .xlsx ワークブックは読み込み時に黙って破棄されていました。
  • リーダーは OOXML <cfRule type="dataBar|colorScale|iconSet"> ラッパーと内部の <dataBar> / <colorScale> / <iconSet> 本体を解析し、子の <cfvo> エントリを巡って各しきい値の typeval を回復し、<color> エントリを巡ってデータバーの色やスケールの段ごとの色を回復します。
  • アイコンセットルールは iconSet ファミリー名(Excel 2007 ベースラインの 17 セット)、reverse フラグ、showValue フラグ(ShowOnly にマップ)を round-trip します。
  • OOXML rgb="AARRGGBB" 属性から解析された色値は、書き込み API が使用するのと同じ BGR LongWord 規約に変換されるため、load-edit-save round-trip は視覚的な色を正確に保持します。
  • 既存の XLSX <cfRule type="cellIs"> 処理は変更ありません;dispatch は type 属性が新しいルール種別を指定した場合のみ新パスを取り、それ以外は cell-value パスにフォールバックします。
  • 既知の制限:テーマカラー参照は 0 として読まれ、ワークブックテーマパレットに対して解決されません;iconId の段ごとオーバーライドはキャプチャされません;<cfRule>priority 属性は読み込み時に無視されます。

バージョン 2.37.0

  • BIFF8 CFEX レコード形式が stop ごとの完全な cfvo 配列(kind + value 文字列 + color、[MS-XLS] cfvo セマンティクスに準拠)を運ぶようになりました。バー/ストップカラーだけではありません。データバールールは min/max しきい値の種類と値を永続化し、カラースケールは各ストップの kind + value + color の組み合わせを永続化し、アイコンセットは reverse / showOnly フラグと共に各しきい値の kind + value を永続化します。
  • CFEX 書き込みはバージョンフラグバイト(ver=1)を追加し、v2.34.0 minimal CFEX レイアウトを期待する古い HotXLS リーダーが暗黙的にレガシー解釈にフォールバックできるようにします。v2.37.0 リーダーは古いビルドが生成した ver=0 レコードも認識するため、混合バージョンインストールでの round-trip が古い形式で扱われる kind/color フィールドで双方向に機能します。
  • リーダーは 同じ範囲上の混合 CONDFMT + CONDFMT12 エントリ を検出するようになりました — 古いセル値バックアップと新しいルールが同一の sqref をカバーする Excel 保存ファイルでよく見られるパターン。古い CONDFMT エントリは TCondFormat の新しい IsShadowed プロパティを介してフラグが立てられます。ライターは Excel 2003 ↔ Excel 2007+ クロスバージョン互換性のために保存時に両方のレコードファミリーを出力し続けます。
  • TCondFormat の新しい TotalRange プロパティは以前は private だったマージされた範囲を公開します。
  • 既知の制限:shadow 検出は正確な境界ボックス一致に制限されています。ColorScale の完全 cfvo round-trip は 8 つの標準 kind 値を保持しますが、Excel のテーマカラーチントメタデータは保持されません。

バージョン 2.36.0

  • XLSX(.xlsx)出力が Excel 2007+ の 3 種類の条件付き書式拡張ルール — データバーカラースケール(2 段と 3 段)、アイコンセット — をサポートするようになり、XLSX バックエンドが v2.34.0 BIFF8(.xls)バックエンドと同等になりました。TXLSXWorksheet に XLS 側の API と対応する 4 つの新しい公開メソッドが追加されました:AddCondFormatDataBarAddCondFormatColorScale2AddCondFormatColorScale3AddCondFormatIconSet
  • 保存される .xlsx ファイルは、各ルール種別に応じた OOXML <conditionalFormatting> 要素を出力します:データバーは <cfRule type="dataBar"><dataBar>、カラースケールは <cfRule type="colorScale"><colorScale> に 2 または 3 個の cfvo + color stops、アイコンセットは <cfRule type="iconSet"><iconSet iconSet="..."> に対応する数の cfvo。
  • 組み込みアイコンセット名マッピングは、XLS バックエンドがサポートする Excel 2007 ベースラインの 17 セットを網羅し、標準 OOXML iconSet 属性文字列として出力されます。
  • しきい値タイプとカラー値は XLS API と同じ列挙体とカラー規約を使用します — 同じ TXLSCfValueKind、同じ Delphi BGR LongWord 形式。既存の XLSX セル値 AddConditionalFormat 呼び出しの動作は完全に同じです。
  • 既知の制限:テーマカラーエンコーディングはまだ出力されません;アイコンセット内の stop ごとの iconId オーバーライドは未対応。Excel で保存されたファイルからの XLSX 読み取り側のデータバー / カラースケール / アイコンセットルールの認識はまだ延期されています — このリリースでは書き込みのみが配線されています。

バージョン 2.35.1

  • BIFF8 リーダーは、CF12 ルールに付加された差分 XF(DXF)バイトをルールの TXLSDxfStyle プロパティバッグにデコードし戻すようになりました。同時に生バイトは DxfBlob に保持されます。スタイル付きのデータバー / カラースケール / アイコンセットルールを持つ Excel 保存ワークブックを読み込むと、各 Rule.Style 上の HasXxx + 値のペアを通じてフォント色、塗りつぶし色、太字 / 斜体 / 下線、数値書式 id に直接アクセスできます。
  • Round-trip 動作:load-edit-save サイクルは Rule.Style のロード後の任意の変更を反映するようになりました。ユーザーがワークブックを読み、Rule.Style.SetFontColor を変更して保存すると、新しい色が反映されます。ユーザーが Style に触れなければ、保存されたファイルはオリジナルと同じオーバーライドを持ちます。
  • DXF blob 内の未知の xfPropType 値は拒否されずにスキップされるため、本リリースで未対応のプロパティタイプを使用する新しい Excel ファイルも引き続きロードできます(生バイトは DxfBlob に残り、検査や将来の round-trip サポートに使用できます)。

バージョン 2.35.0

  • 条件付き書式ルールは 差分 XF(DXF)スタイルオーバーライド を持てるようになり、CF12 ルールが Excel で発火したときに、セルのベース XF を変更せずにフォント色、塗りつぶし、フォントの太さ、斜体、下線、または数値書式を変更できます。このオーバーライドは各 TCondFormatRule 上の新規 TXLSDxfStyle プロパティとして公開され、既存の AddCondFormatDataBar / AddCondFormatColorScale* / AddCondFormatIconSet API でルールを作成した後にアクセスできます。
  • 本リリースでサポートするスタイルオーバーライド:フォント色、塗りつぶし背景色、塗りつぶし前景色、塗りつぶしパターン、フォント太字、フォント斜体、フォント下線スタイル、組み込み数値書式 id。各プロパティにはペアの HasXxx フラグがあり、SetXxx で明示的に設定したプロパティのみが BIFF8 ファイルに出力されます。
  • BIFF8 ライターは、ルールの Style に少なくとも 1 つのオーバーライドが設定されている場合、CF12 レコードに非空の DXF ブロックを追加します。DXF ブロックは公開 XFProp 配列レイアウト(cxfp + プロパティごとのタイプ / サイズ / データのタプル)を使用するため、ルールが適用されたときに Excel がスタイル変更を認識できます。
  • BIFF8 リーダーは Excel で保存されたファイルから読み取った生の DXF バイトをルールの DxfBlob プロパティに保持するため、load-edit-save の round-trip で CF12 ルールが担うセルスタイルが暗黙に失われることはなくなりました。生バイトを TXLSDxfStyle プロパティバッグに復号する処理は後続リリースに計画されています。
  • スタイルをオプトインしないルールのデフォルト動作は変更ありません — v2.34.0 と同じく cbdxf = 0 が出力され、既存のデータバー / カラースケール / アイコンセットルールは以前とまったく同じようにレンダリングされます。
  • 既知の制限:DXF のテーマカラーエンコーディングは未対応(RGB のみ);本リリースのプロパティセットに罫線オーバーライドとグラデーション停止点は含まれません;XFProp 値ブロブのバイト順は公開 [MS-XLS] ノートに従っており、Excel との完全な round-trip 忠実度のために BiffView での検証後に小さな調整が必要かもしれません。3 つの新規ルール種別の XLSX 側パリティは引き続き延期されています。

バージョン 2.34.0

  • Excel 2007 以降の拡張条件付き書式ルール用に、ワークシートへ新しい公開 API を追加:AddCondFormatDataBar(データバー)、AddCondFormatColorScale2 / AddCondFormatColorScale3(2 色 / 3 色のカラースケール)、AddCondFormatIconSet(アイコンセット)。各メソッドは "A1:A10" 形式の sqref 範囲と種類固有のパラメーター(バーの色、グラデーション停止点の色、アイコンセットの種類)を受け取り、作成されたルールオブジェクトを返します。
  • BIFF8(.xls)ライターは既存のセル値ルール CONDFMT / CF に加えて、対応する CONDFMT12 / CF12 / CFEX レコード群を出力するようになり、新 API で作成したデータバー / 2 色・3 色カラースケール / アイコンセットルールが .xls ファイルに保存されるようになりました。
  • BIFF8 リーダーは受信した CONDFMT12 / CF12 / CFEX レコードを認識し、同じインメモリルールモデルで公開します。これにより Excel で作成された拡張ルール付き .xls ファイルが読み込み時に黙って破棄されることがなくなりました。
  • 組み込みアイコンセットカタログは Excel 2007 ベースラインの 17 種類(3 矢印 / 3 旗 / 3 信号 / 3 標識 / 3 記号、4 矢印 / 4 評価 / 4 信号、5 矢印 / 5 評価 / 5 四半期)を網羅し、TXLSIconSetType 列挙体で選択できます。
  • データバーの上下限、カラースケール / アイコンセットの停止点に使えるしきい値タイプは 数値範囲の最小 / 最大パーセントパーセンタイル数式。Excel の cfvo 種別と一致します。
  • 既存のセル値条件付き書式の挙動は変わりません。新 API と新しい BIFF8 レコード処理が追加されただけです。
  • 本リリースの既知の制限:XLSX 出力側の 3 種類の新ルール対応は未着手(既存の XLSX セル値ルールは影響なし)。CF12 の差分 XF スタイルブロックは空で出力されるため、Excel はバーやカラースケールを API で指定した色ではなく既定色でレンダリングする可能性があります。CFEX 内の各停止点は色のみを保持し、種類 / 数値の組み合わせは未保持。これらのギャップは v2.34.x / v2.35.x の後続リリースで、デモワークブックと Excel レンダリング検証と合わせて埋める予定です。

バージョン 2.33.3

  • Demo/Delphi/XlsTables/ の新しい XlsTables Delphi デモは、BIFF8 Tables (ListObjects) 書き込み側をエンドツーエンドで示します。Sheet.AddTable('SalesTable', 'A1:D10', headers) を使って A1:D10 の Table としてバインドされた 4 列の売上領域 (地域 / 製品 / 四半期 / 収益) を持つ SalesTable.xls を生成します。生成された .xls を Excel で開いて、列ドロップダウン、縞模様の行、および名前ボックスの SalesTable 構造化参照名を確認してください。
  • このデモは v2.33.0 の AddTable API を採用するための最短のエンドツーエンドレシピです: StyleName = 'TableStyleMedium2'ShowRowStripes = True を設定し、9 行のデータ + 1 行のヘッダーを埋め、1 回の SaveAs 呼び出しでワークブックを書き込みます。出力は実行可能ファイルの隣に配置されます。
  • コンパイルインフラストラクチャは変更されていません: 既存の build-Win32-Demo.cmdfor /r Demo *.dpr スイープを介して XlsTables.dpr を自動的に拾います — ビルドスクリプトまたは .cbproj/.dproj 構成への変更は不要です。

バージョン 2.33.2

  • BIFF8 (.xls) の SaveAs は、同じシート上の Table が autofilter 範囲を完全にカバーするとき、スタンドアロンのシートレベル AUTOFILTERINFO/AUTOFILTER レコード ($009D / $009E) を抑制するようになりました。Excel は Table オブジェクト自体内に autofilter ドロップダウンを埋め込むため、同一範囲に対して追加のシートレベル autofilter を発行すると、Office File Validation がファイルを拒否します。これは v2.29.4 で出荷された XLSX 側の修正と一致します。
  • カバレッジチェックは保守的です: Table の最初/最後の行と最初/最後の列が autofilter の境界を囲む場合にのみ、Table が autofilter を「カバー」していると見なされます。部分的なオーバーラップはシートレベルの autofilter を発行する動作を維持します。
  • BIFF5 の保存と Table のないワークシートは影響を受けません — 抑制チェックは、ファイル形式が BIFF8 で、ワークシートに少なくとも 1 つの Table がある場合にのみ実行されます。パブリック API の変更はありません。

バージョン 2.33.1

  • BIFF8 (.xls) 読み取り側で、v2.33.0 が書き込み側に追加した共有機能 Tables レコードを認識するようになりました。Excel (または HotXLS 自身) で保存された ListObjects/Tables を含む .xls を開くと、ワークシートの Tables コレクションが、解析された FEAT11 ($0872) ごとに TXLSTable で埋められます: プライマリ Ref8U からテーブル範囲を再構築し、存在する場合はテーブルの id、name、displayName を復元し、ペアになっている LIST12 ($0877) レコードからテーブルスタイル名を埋め込みます。以前は、これらのレコードは静かに無視されていました。
  • 共有 FEATHEADR ($0867) opcode は、常に保護パーサーに送られるのではなく、その Isf フィールドによってディスパッチされるようになりました。Isf=2 (拡張保護) は既存の動作を維持; Isf=4 (SharedList) はシート上の Tables のマーカーとして認識されます; Isf=3 (SmartTags) およびその他の値は安全に無視されます。FEATHEADR11 ($0871) も Tables マーカーとして静かに認識されます。
  • リーダーはベストエフォートで寛容です: 不正な形式または Excel バリアントの FEAT11 ペイロードは、少なくとも正しいセル範囲を持つ Table へとエレガントに劣化します。シート保護の round-trip は変更されていません。

バージョン 2.33.0

  • BIFF8 (.xls) ワークシートが Table オブジェクト (Excel ListObject) をサポートするようになりました。IXLSWorksheet 上で Worksheet.AddTable(Name, Range, Columns) を呼び出して、名前付きテーブル領域をセル範囲にアタッチします — 例えば Sheet.AddTable('SalesTable', 'A1:F9', HeaderList)。.xls の保存パスは、シートに Table が含まれていることを示す BIFF8 共有機能レコードファミリーを発行するようになりました: FEATHEADR ($0867、Isf=4)、FEATHEADR11 ($0871)、および各テーブルごとの FEAT11 ($0872) + LIST12 ($0877) のペア。以前は、XLS ファサードで AddTable は利用できず、ワークシートに定義されたテーブルは SaveAs(xlExcel97) で静かに破棄されていました。
  • IXLSWorksheet の新しい公開 API: Tables: TXLSTables プロパティ (読み取り専用コレクション) と AddTable メソッド。形状は XLSX 側の TXLSXTable / TXLSXTables をミラーリングします。TXLSTableIdNameDisplayNameRangeColumnsStyleName (デフォルト 'TableStyleMedium2')、ShowFirstColumnShowLastColumnShowRowStripes (デフォルト true)、ShowColumnStripesTotalsRowShown を公開します。
  • 新しいシートストリームレコードは、シート保護の後、ワークシート EOF の直前に発行されます。ファイル形式が BIFF8 (xlExcel97) の場合のみです。テーブルのないワークブックは以前とまったく同じように保存されます — FEATHEADR は発行されず、レコードストリームの変更もなく、オーバーヘッドもありません。BIFF5 保存は影響を受けません。
  • テーブル ID は、事前設定されていない場合、保存時にシートごとに順次 (1..N) 割り当てられます。デフォルトのスタイル名 'TableStyleMedium2' は、Excel および XLSX 側がすでに使用しているものと一致します。
  • この初期リリース (v2.33.0) の既知の制限事項: 合計行の数式と構造化参照の補助範囲はまだ発行されていません; シートレベルの AUTOFILTERINFO と Table 範囲の競合抑制はフォローアップで追加されます; 読み取り側 (テーブル付き Excel 保存 .xls を Tables コレクションに解析し直す) もフォローアップです。

バージョン 2.32.1

  • v2.32.0 の FILEPASS 書き出し機能で導入されたコンパイルエラーを修正しました。これにより、厳密な型チェックを行う RAD Studio 12+ でライブラリのビルドが失敗していました。EncryptAllBlobs ヘルパーは分散バッファを PByte として宣言していましたが、その文脈では PBytelxHandle ローカルの別名に解決され、一方呼び出し先の lxEncrypterEncryptBlobDatalxBLOB.PByte を期待していました。両方の型は内部的に ^Byte ですが、Delphi は E2010 厳密型チェック下で別の型として扱います。バッファ変数は lxBLOB.PByte として完全修飾されたため、v2.32.0 のパスワード暗号化パスはサポートされるすべての RAD Studio バージョン (12.0–37.0) でクリーンにコンパイルされます。

バージョン 2.32.0

  • IXLSWorkbookEncryptionPassword プロパティを追加しました。SaveAs を呼び出す前に空でないパスワードを設定すると、Excel 互換のパスワード保護付き .xls ファイルが生成されます:Excel、LibreOffice Calc など BIFF8 リーダーは開く際にパスワード入力を要求し、誤ったパスワードではアクセスを拒否します。これまで書き込み側のパスワード設定は無視され、常に平文で書き出されていました。
  • 書き込み経路は、ワークブック BOF の直後に BIFF8 FILEPASS レコード($002F)を出力し、以降のすべてのレコード本体を読み取り側と同じ RC4 アルゴリズム(vMajor=1、vMinor=1、Excel の「Office 97/2000 互換」暗号化)で暗号化します。16 バイトの Salt と Verifier は Pascal の Random ではなく Windows の CryptGenRandom で生成されます。1024 バイト境界ごとのブロックキー再導出も維持されており、大規模ワークブック、SST CONTINUE チェーン、複数シートストリームも正しく暗号化されます。
  • 暗号化は BIFF8(xlExcel97)保存パスのみに適用されます。BIFF5 経路は平文のままです。EncryptionPassword のデフォルトは空文字列で、既存の平文出力動作が保たれ、セッターを呼び出さない既存アプリケーションには影響しません。
  • 読み取り側:ParseFilePass の潜在的バグを修正しました。FILEPASS 直後の最初のレコード本体(通常は CODEPAGE)が平文として扱われていた問題です。HotXLS で書き出した暗号化ファイルが HotXLS 自身でラウンドトリップ可能になり、Excel 製暗号化ファイルの CODEPAGE 値も正しく復号されます。
  • セキュリティ注意:BIFF8 RC4(vMajor=1/vMinor=1)は 40 ビット鍵を使用し、2025 年時点では破られた暗号化と見なされます。本機能は Excel の古典的パスワード保護 UI との互換性のために使用してください。機密データの保護用途には適しません。本格的なセキュリティが必要な場合は XLSX + AES を使用してください。

バージョン 2.31.0

  • IXLSWorkbookUseSharedFormulas プロパティを追加しました。True に設定すると、BIFF8形式のSaveAs時に、テンプレート数式を共有するセルがネイティブのSHRFMLAレコード($04BC)にグループ化され、Microsoft Excelのコンパクトな出力形式と一致します。=A1*B1=A2*B2、…、=A99*B99 のような列数式は自動的にグループ化され、テンプレート数式が多いシートではファイルサイズが30〜60%削減されます。
  • グループ化は列方向下向き、連続、テンプレートベースで行われます:同じ列の連続する行でPTGが等価な数式を持つセルのみがグループ化されます。配列数式やセル結合フラグを持つセルは除外されます。
  • デフォルト値は False で、既存のセルごとのFORMULAレコード出力は変更されません。SaveAs を呼び出す前に Workbook.UseSharedFormulas := True を設定することで機能を有効化できます。
  • 読み取り側は影響を受けません。新しいパブリックプロパティが追加され、機能有効時にBIFF8出力形式が変わるため、MINORバージョンアップ(2.30.x → 2.31.0)となります。

バージョン 2.30.6

  • RAD Studio 37.0のclangベースbcc32コンパイラでC++Builderデモをビルドする際の第4の種類のコンパイルエラーを修正しました:インターフェイスのスマートポインタに ->Borders[idx]->Prop のインデックス構文を使用するとエラーE5843(「メンバー参照型はポインタではありません」)が発生していました。すべての箇所を ->Borders->Item[idx]->Prop に変更しました。この修正はApiTour、ExportWithColoring、PurchaseOrder、QuickStartデモに適用され、9つのC++Builderデモプロジェクト全体でclangとの完全な互換性が確立されました。

バージョン 2.30.5

  • 9つのC++Builderデモプロジェクトがすべて、RAD Studio 37.0のclangベースのbcc32コンパイラでクリーンにビルドできるようになりました。3種類のコンパイルエラーを修正しました:lxFormulaのプロパティEOFIsEofに改名してC標準ライブラリstdio.hマクロとの競合を解消;C++Builderデモコード内のXLS API列挙定数(xlHAlignCenterxlAroundxlMediumなど)にLxhandle::名前空間修飾子を明示的に追加;XLSXセル値の代入をOleVariant(...)からVariant(...)に変更(TXLSXCell.ValueSystem::Variant型であり、clangコンパイラが保護基底クラスOleVariantからの暗黙の変換を拒否するため)。

バージョン 2.30.4

  • OrderCalc デモ(Delphi 購買注文サンプル)は、既存の XLS・HTML・RTF 形式に加えて XLSX エクスポートオプションをサポートするようになりました。保存ダイアログで「Excel 2007+ (*.xlsx)」を選択すると、ネイティブの TXLSXWorkbook API を使用して購買注文書が書き出され、フォント・塗りつぶし・罫線・配置・数値フォーマット・Excel 数式を含む標準準拠の XLSX ファイルが直接生成されます。

バージョン 2.30.3

  • SaveXLSWorkbookAsXLSX(対象ファイル名が .xlsx で終わる場合に TDataToXLS.SaveAs および TGridToXLS.SaveAs が使用するブリッジ)が、元となる XLS ワークブックからセルの背景塗りつぶし色、フォント色、フォントスタイル属性(名前、サイズ、太字、斜体)を XLSX 出力にコピーするようになりました。意図的に狭くしたデコレーション列も含め、列幅も引き継がれます。以前は値と数値書式のみが転送されていたため、XLSX 出力にはスタイルが反映されず、すべての列幅がデフォルト値のままで、意図的に狭くした列が過剰に広い空列として表示されていました。

バージョン 2.30.2

  • XLS リーダーで Open 後に Outline.SummaryRow の方向が反転する round-trip バグを修正しました。WSBOOL レコードの fRwSumsBelow フラグ (BIFF8 仕様 p278 byte 0 bit 6、マスク $0040) は「集計行が詳細の*下*に表示される」を意味しますが、パーサーは以前ビットがセットされているときに SummaryRow = xlAbove (クリアされているときに xlBelow) を設定していました -- 仕様とちょうど逆です。ライター側は既に正しく ($0040 を xlBelow に対して emit) 動作していたため、「集計行が詳細の下」設定の Excel ファイルを HotXLS で開き再保存すると、outline の方向が静かに「上」に反転していました。パース方向が仕様とライターに一致するようになり、outline 設定が正しく round-trip するようになりました。fColSumsRight ($0080) は既に正しく扱われており変更ありません。

バージョン 2.30.1

  • XLS (BIFF8) ライターがワークブック globals セクションに INTERFACEHDR / INTERFACEEND / WRITEACCESS レコードを emit するようになり、Microsoft Excel のネイティブなレコード レイアウトに一致するようになりました。ネイティブ Excel は常にこの 3 つを CODEPAGE/DSF と WINDOW1 の間に書き込み、より厳格な BIFF リーダー / Office File Validation パスはこれらを要求する場合があります。INTERFACEHDR は code page (1200、UTF-16) を、INTERFACEEND は空のマーカーを、WRITEACCESS は「保存者」ユーザー名 (現在は "HotXLS" にハードコード。将来のリリースで Workbook プロパティに昇格する可能性あり) を保持します。出力される XLS ファイルが Excel のネイティブなバイト レイアウトにより近づきました。

バージョン 2.30.0

  • クラシックから XLSX へのエクスポート ブリッジを追加しました。TDataToXLS.SaveAs と TGridToXLS.SaveAs は、既存の .xls、.html、.rtf パスを変更せずに、.xlsx ファイル名を XLSX エンジン経由で書き込むようになりました。
  • XLS および XLSX 用のワークシート ビュー API を追加しました。IXLSWorksheet.View と TXLSXWorksheet.View は通常ビュー、改ページ プレビュー、ページ レイアウト ビューをサポートし、設定は該当するファイル ライター/リーダー パスによって保持されます。
  • クラシック ワークブック互換性 API を追加しました: IXLSWorkbook.SetCodePage および IXLSWorkbook.VBAProject。VBA プロジェクトは、ワークブックに VBA ストレージが含まれている場合、TXLSVBAProject/TXLSVBAModule のモジュール名とソース テキストを通じて検査できるようになりました。
  • TXLSXWorkbook を ParsedVBAProject で拡張しました。これは有効な vbaProject.bin ペイロードに対する読み取り専用のパース済みビューであり、既存の VbaProject の生バイト round-trip 動作を維持します。
  • DevExpress cxGrid エクスポート ワークフロー用のオプション ユニット cxGridAddExcel を追加しました。これは意図的にデフォルト パッケージに含まれていないため、DevExpress なしのインストールでもクリーンにビルドできます。
  • ワークブックを Excel で開いたときにチャートが空に表示される XLSX チャート シートのレンダリングを修正しました (新しく開いたチャート シートは右上に 3 つのチャート コンテキスト アイコンを一瞬表示してから削除し、シートが空のまま残されました)。チャート シートの描画は、cx=0/cy=0 の <xdr:twoCellAnchor> の代わりに、明示的な範囲 (~10in × 7.2in = 9525000 × 6858000 EMU) を持つ <xdr:absoluteAnchor> を使用するようになりました。チャート シートには twoCellAnchor を解決するためのセル グリッドがないため、Excel はサイズ ゼロの内部 xfrm にフォールバックし、チャートをゼロ ピクセルでレンダリングしていました。ECMA-376-1 14.2.3.2 によると、チャート シートの描画は absoluteAnchor を使用する必要があります。ワークシートのチャート アンカーは変更されていません。

バージョン 2.29.4

  • シート レベルの autoFilter とテーブルが同じ範囲をカバーするワークブック (例: MemoryDataExport デモの XlsxFeatureGallery.xlsx Details シートで、AddTable('SalesTable', 'A1:F9', ...) の後に SetAutoFilter('A1:F9') を呼んだもの) で Excel の修復プロンプト「<file>.xlsx の一部の内容に問題が見つかりました」を引き起こす XLSX パッケージング バグを修正しました。OOXML は同じ範囲に 2 つのフィルター メカニズムを許可しません。ライターは、シート レベルの <autoFilter> がいずれかのテーブルの範囲と一致する場合、重複した出力を抑制するようになりました。テーブル独自の autoFilter (テーブル ヘッダーのドロップダウンとしてレンダリング) は引き続き機能します。
  • <dataValidation> 出力で関連するスキーマ違反を修正しました: operator 属性がすべての validation に対して emit されていましたが、ECMA-376-1 18.3.1.32 はこれを whole / decimal / date / time / textLength 型にのみ許可します。AddListValidation は type="list" を生成し、以前は operator="between" を漏出していました。OFV はこの点について Excel より厳格で、ワークブックを拒否することがありました。operator 属性は list / custom / none に対して省略されるようになりました。
  • 内部および外部ハイパーリンクとコメントを混在させるシート (XlsxFeatureGallery.xlsx Dashboard シートには 1 内部 + 1 外部 + 1 コメントがあります) 上の <legacyDrawing r:id="..."/> 要素を修正しました。rId 計算は外部リンクだけでなくすべてのハイパーリンクをカウントしていた (内部リンクはインラインの location= 属性を使用し rId を消費しません) ため、legacyDrawing は vmlDrawing ターゲットではなく comments rels ターゲットを指していました。ECMA-376-1 18.3.1.51 は legacyDrawing が vmlDrawing 型 rels を参照することを要求します。rId は外部ハイパーリンク数からのみ計算されるようになりました。
  • また、AddChartSheet で追加されたチャート シート用の冗長な xl/worksheets/_rels/sheetN.xml.rels ファイルの emit を停止しました。重複した関係ファイルは存在しないワークシート パートを指しており、.xlsx zip 内に孤児として現れていました。チャート シートは今や正しい xl/chartsheets/_rels/sheetN.xml.rels のみを書き込みます。
  • MemoryDataExport デモ (XlsxFeatureGallery) を更新し、Details シートでの冗長な SetAutoFilter('A1:F9') 呼び出しを削除しました -- AddTable は既にテーブル範囲に autoFilter を追加するため、余分な呼び出しは上記の OFV 拒否を引き起こしていました。ライターの防御的な抑制は、デモ更新を受け取らない顧客コードをカバーします。

バージョン 2.29.3

  • Open + modify + SaveAs の後で otherwise-empty な行に描画された borders が削除される XLSX round-trip リグレッションを修正しました。ApiTour の行 8 の水平区切り線 (データのない行への Range.SetBorders 呼び出しで生成) は新しく生成された ApiTour.xlsx では正しくレンダリングされていましたが、デモの Modify パスがファイルを再保存した後の ApiTour-XLSX-Modified.xlsx では消えていました。これにより Excel は修正されたファイルでのみ C8 / D8 の縦のグリッド線が途切れて表示されていました (元の ApiTour.xlsx は影響を受けず)。XLSX パーサーは、`<c>` 要素が自己クローズまたは value/formula の子を持たない場合にもセル スタイルを適用するようになり、スタイル付きの値なしセルが round-trip を生き残るようになりました。

バージョン 2.29.2

  • Open + modify + SaveAs フローにおける XLSX round-trip リグレッションを修正しました。ParseWorksheetXml が、styles.xml の cellXf を参照する <c s="N"/> を持つセルを読み込むと、N を cell.FormatIndex に直接保存していました。SaveAs では cellXfs がワークブックのスタイル プールから再構築され (オプションの複合エントリを含む)、同じ数値インデックスにある新しいレイアウトのスロットはほとんど同じセマンティクスを持ちません。再保存されたセルは間違った cellXf を指す (または新しい cellXfs テーブルの末尾を超える) ことになり、Excel は「Office がこのファイルに問題を検出しました。回復を試みることができます」と報告していました。ApplyStyle は cellStyle を、ParseStylesXml がすでに populate している CellXfXxxMap テーブルを介して FontIndex / FillIndex / BorderIndex / NumberFormatIndex / AlignmentIndex / ProtectionIndex に逆マッピングするようになり、round-trip は新しく構築された cellXfs に対してセルを再 emit します。

バージョン 2.29.1

  • ApiTour デモで明らかになった 2 つの XLSX レンダリング リグレッションを修正しました: (1) Range.SetBorders 呼び出しが非単調な順序でセルを追加すると (例: outline パスが A8/C8 を作成し、inside パスが B8 を作成 -- 出力は A8 / B8 / C8 / の代わりに A8 / C8 / B8 /)、行内のセルが列順序から外れて emit される可能性があり、Excel は「Office がこのファイルに問題を検出しました」と報告し Protected View を強制していました。XLSX ライターは、OOXML CT_Row スキーマに一致するように emit 前に各行のセルを列でソートするようになりました。(2) 2 つ以上のスタイル インデックスを同時に設定するセル (Font + Fill + Border 等) は、優先チェーンを経由して 1 次元の cellXf に折りたたまれていました (FontIndex が勝ち、Border / Fill が削除)。例えば Range[..].SetBorders に FontIndex + FillIndex + BorderIndex を設定するヘッダー行は borders なしでレンダリングされていました。ライターは SaveAs 中に複合 cellXf プールを収集し、複次元セルをすべての次元を保持する合成 cellXf にルーティングするようになりました。

バージョン 2.29.0

  • 内部ヘルパー unit `lxList2` を `lxKeyList` にリネームし、`lxList` の WideString-key クラスを `TXLSKeyList` / `TXLSKeyEntry` / `TXLSKeyArray` から `TXLSStringKeyList` / `TXLSStringKeyEntry` / `TXLSStringKeyArray` にリネームしました。これにより unit 名がメイン クラス `TXLSObjectKeyList` と一致し、2 つの key-list 世代が自己記述的になります (`TXLSStringKey*` がレガシー WideString-key プール、`TXLSObjectKey*` が THashtableKey ベースの dedup プール)。コードが古い unit 名やクラス名を参照している場合は、uses 句と型名を適宜更新してください。

バージョン 2.28.3

  • otherwise-empty な行に設定された borders が消える XLSX セル emit リグレッションを修正しました。行 8 にデータのないシート上での `Range[''A3:C10''].SetBorders(xlsxEdgeOutline,...)` は、ライターが Value 未割り当ての任意のセルをスキップしていた -- セルが BorderIndex / FontIndex / FillIndex / NumberFormatIndex / AlignmentIndex / ProtectionIndex を持っていてもスキップしていた -- ため、その行の C/D 縦グリッド線が途切れてレンダリングされていました。ライターは、任意のスタイル インデックスを持つ値なしセルに対して `<c r='..' s='..' />` を emit するようになりました。

バージョン 2.28.2

  • Excel が merged cells と AutoFilter を組み合わせたシートのロードを拒否する XLSX ワークシート スキーマ違反を修正しました。XLSX ライターは、OOXML CT_Worksheet シーケンス (autoFilter は #11、mergeCells は #15) に従って、<mergeCells> の前に <autoFilter> 要素を emit するようになりました。以前は、このようなワークブックは sheet1.xml で `Load error. Line 1, column 0` という Excel の修復ダイアログをトリガーし、リカバリーは兄弟 Details シートから tableParts / autoFilter も削除していました。

バージョン 2.28.1

  • クラシックなXLSインターフェースに便利なAPIを追加しました。IXLSRangeは、読み取り専用のWidthとWidthInPixelsヘルパーを提供し、さらにSaveAsCSV(FileName)メソッドを公開します。IXLSWorksheetとIXLSWorkbookは、使用範囲またはアクティブなシートに対して、SaveAsCSV(FileName / Stream)メソッドのオーバーロードを提供します。IXLSPageSetupは、Order、Draft、BlackAndWhite、PrintNotes、および読み取り専用のIsFitToPagesプロパティを公開します。SETUPレコードの保存/読み込み時に、これらの印刷設定が保持されるようになりました。

バージョン 2.28.0

  • TXLSXWorkbook に、RTF エクスポート機能を追加しました。新しい SaveAsRTF メソッド(FileName / Stream、default-active-sheet / explicit SheetIndex を引数とするオーバーロード)により、選択されたシートを、プレーンなテーブルを含む RTF 1.6 ドキュメントとして保存できます。列幅は、シートの ColWidth データから取得されます(1 Excel 文字単位は約 96 RTF twips)。明示的に幅が設定されていない列は、StandardWidth が設定されている場合はそれを使用し、そうでない場合は 809 twips(約 8.43 文字)を使用します。セルの太字(\\b)、イタリック(\\i)、およびフォントサイズ(\\fsN、単位はハーフポイント)は、セルの FontIndex から適用されます。非 ASCII 文字は、RTF 1.6 §2.4.2 に従って、符号付き 16 ビットの RTF \\uN? Unicode エスケープとしてエンコードされ、BMP 全範囲をカバーします。結合されたセルは、結合範囲の開始セルにコンテンツが含まれ、範囲内の他のセルは空のセルとして出力されます。デフォルトの SheetIndex はアクティブなシートを書き込みます。範囲外の場合は -1 を返します。空のシートは、最小限の有効な RTF ドキュメントを生成します。

バージョン 2.27.0

  • TXLSXWorkbookにHTMLエクスポート機能を追加しました。新しいSaveAsHTMLメソッド(FileName / Stream、default-active-sheet / explicit SheetIndexのオーバーロード)により、選択されたシートをUTF-8エンコードのHTMLドキュメント(UTF-8 BOM付き)として書き出すことができます。出力は、最小限のHTMLページ内に<table>タグで囲まれた内容になります。結合されたセルは、colspanおよびrowspan属性で表現されます。セルのスタイルは、インラインCSSとして出力されます。具体的には、フォントファミリー、サイズ(pt)、太字(font-weight:bold)、イタリック(font-style:italic)、取り消し線(text-decoration:line-through)、および明示的なフォントカラーです。塗りつぶしは、background-color属性で表現されます。水平方向の配置(左寄せ / 中央寄せ / 右寄せ / 両端揃え)およびWrapText(white-space:pre-wrap)もサポートされます。日付の表示形式は'yyyy-mm-dd hh:nn:ss'です。リッチテキストセルは、連結されたテキストに変換されます。テーマカラーは、単純なHTMLエクスポートでは無視されます(theme1.xmlは解決されません)。Default SheetIndexでは、アクティブなシートが書き出され、範囲外の場合は-1が返されます。

バージョン 2.26.0

  • TXLSXFont、TXLSXFill、およびTXLSXBorderEdgeに、テーマカラー、インデックスカラー、およびティント/シェードのサポートを追加しました。各カラー設定には、既存のRGBカラーに加えて、以下の3つの新しいフィールドがあります。ColorTheme(整数; -1 = 未設定; 0~11 = OOXMLのテーマスロット)、ColorIndex(整数; -1 = 未設定; 0~63 = OOXMLのレガシーパレットスロット — Workbook.IndexedColor[N]およびXlsxDefaultIndexedPaletteとペア)、およびTintAndShade([-1.0, 1.0]の範囲の倍精度浮動小数点数; テーマカラーの場合にのみ出力されます)。TXLSXFillは、これら3つのすべてのカラー設定について、フォアグラウンド/バックグラウンドのバリアントを提供します。カラーの優先順位は、テーマ > インデックス > RGBです。以前の"ColorIsAuto = True"の動作は、要素全体を完全に抑制し続けます。SaveAsおよびOpen機能では、フォント、塗りつぶし、および境界線のカラー設定において、`<color theme="N" tint="..."/>`および`<color indexed="N"/>`のすべての属性が完全に保持されます。内部処理: TXLSXBorders.LookupOrAddは、これら3つの新しいフィールドをすべて比較するため、テーマカラーの境界線が、カラープール内のRGBカラーのエントリと衝突するのを防ぎます。

バージョン 2.25.0

  • TXLSXWorkbook クラスに、外部ワークブックへのリンクの双方向操作機能を追加しました。 新しい型として、TXLSXExternalLink (ターゲット URL とシート名リスト) と、TXLSXExternalLinks コレクションを導入しました。 TXLSXWorkbook.ExternalLinks プロパティは、このコレクションを公開します。 Add(Target) メソッドは、新しいリンクをコレクションに追加し、呼び出し元に返します。 SaveAs メソッドは、ワークブックレベルで xl/workbook.xml に `<externalReferences>` ブロックを生成し、xl/_rels/workbook.xml.rels に `externalLink` リレーションを生成します (既存の RID の範囲の末尾に配置し、既存の RID を維持します)。 また、各エントリに対して xl/externalLinks/externalLink{N}.xml ファイルと、リモートワークブックの URL を指す .rels ファイルを生成します。 このファイルには、`TargetMode="External"` が設定され、対応する ContentType Overrides も設定されます。 Open メソッドは、index 1 から `externalLink{N}.xml` ファイルと対応する `.rels` ファイルのペアを読み込み、最初のギャップで停止します。 現在のリリースでは、ターゲット URL とシート名のみが双方向でサポートされており、`<sheetDataSet>` 内にキャッシュされたセルの値は保持されません。

バージョン 2.24.0

  • TXLSXRange.SetBorders ヘルパー関数を追加しました。新しい TXLSXBorderEdgeKind 列挙型 (xlsxEdgeAll / Outline / Inside / InsideHorizontal / InsideVertical / Top / Bottom / Left / Right / DiagonalUp / DiagonalDown) を導入し、どのエッジに書き込むかを指定します。SetBorders(Kind, Style, Color) / SetBorders(Kind, Style) (デフォルトは不透明な黒) は、範囲内のすべてのセルに対して実行され、各セルの位置に基づいてエッジマスクを計算します (角のセルは 2 つのアウトラインエッジ、端のセルは 1 つ、内側のセルは内部のグリッド線など)。Style と Color をセルの現在のボーダーのコピーに適用し (これにより、連続する Outline + Inside の呼び出しは上書きされずに積み重ねられます)、ワークブックレベルで Workbook.Borders を検索または追加し、結果の 1 ベースの BorderIndex をセルに書き戻します。新しい TXLSXBorders.LookupOrAdd ヘルパー関数は、空のボーダーの場合は 0 を返します。これにより、無効なエントリによるメモリ消費を抑えます。

バージョン 2.23.0

  • TXLSXWorkbookクラスに、CSVエクスポートのオーバーロードを追加しました。新しいエントリーポイントとして、以下のメソッドが提供されます: SaveAsCSV(FileName) / SaveAsCSV(FileName, SheetIndex, Delimiter) / SaveAsCSV(Stream) / SaveAsCSV(Stream, SheetIndex, Delimiter)。これらのメソッドは、指定されたシートのデータ範囲をUTF-8エンコーディングで、先頭にBOM(Byte Order Mark)を付加し、CRLF(Carriage Return Line Feed)の行末記号を使用してファイルに書き込みます。デフォルトのバリエーションでは、アクティブなシートが選択され、カンマが区切り文字として使用されます。SheetIndex/Delimiterオーバーロードでは、任意のWideChar(通常はタブ文字#9でTSVファイルを作成)を使用できます。フィールドの引用符の処理は、RFC 4180に従います。区切り文字、二重引用符、CR、またはLFを含む値は、引用符で囲まれ、二重引用符は二重化されます。日付値は 'yyyy-mm-dd hh:nn:ss' の形式で表示されます。リッチテキストセルは、連結されたテキストに変換されます。データ範囲内の空のセルは、区切り文字として扱われ、行は最後のデータが入力された列で終了します。

バージョン 2.22.0

  • TXLSXWorkbookクラスに、ワークブックレベルでのインデックス付きカラーパレットのオーバーライド機能を追加しました。新しい機能は以下の通りです。 - `IndexedColor[Index: Integer]: LongWord`: (読み取り/書き込み可能。有効な範囲は0~63。ARGBのLongWord形式) - `HasCustomIndexedColor(Index): Boolean`: (呼び出し元が特定のインデックスのカラーパレットをオーバーライドしているかどうかを報告します) - `CustomIndexedColorCount: Integer`: (オーバーライドされたインデックスの数。0はデフォルトのパレットを使用していることを意味します) - `ResetIndexedColors: procedure`: (すべてのオーバーライドを破棄します) 新しい定数 `XlsxDefaultIndexedPalette` は、OOXMLのレガシーECMA-376パレットをインデックス0~63で使用します。`SaveAs` メソッドでは、少なくとも1つのインデックスがオーバーライドされている場合にのみ、`<colors><indexedColors>` セクションと、その64個の `<rgbColor>` 子要素を出力します。変更されていないインデックスはデフォルトのパレットを使用するため、変更のないファイルの再保存は元の状態が維持されます。`Open` メソッドは、デフォルト値と一致するインデックスを解析し、サイレントに無視するため、データの丸め誤差を最小限に抑えます。範囲外のインデックス(0未満または63より大きい)はエラーを発生させる代わりに無視されます。

バージョン 2.21.0

  • TXLSXWorksheetクラスに、シート表示に関する6つのプロパティを追加しました。Zoom: 整数で、Excelのステータスバーに表示されるズーム率を表します(10~400、デフォルトは100。範囲外の値は書き込み時に制限されます)。DisplayGridLines / DisplayZeros: ブール値(デフォルトはTrue)。Falseに設定すると、セルのグリッド線が非表示になったり、ゼロ値のセルが空として表示されたりします。DisplayRightToLeft: ブール値(デフォルトはFalse)。アラビア語/ヘブライ語などの言語向けに、シートを右から左へのレイアウトに切り替えます。StandardWidth / StandardHeight: double型の値で、デフォルトの列幅(Excelの文字単位)/デフォルトの行の高さ(ポイント)を設定します。0の場合、設定されず、Excelのデフォルト値(8.43 / 15)が適用されます。SaveAsメソッドは、これらの値がExcelのデフォルト値と異なる場合にのみ、`<sheetView showGridLines / showZeros / rightToLeft / zoomScale>`および`<sheetFormatPr defaultColWidth / defaultRowHeight>`を生成します。Openメソッドは、これらの属性をExcelのデフォルト値に戻します。既存のfreeze-pane(固定ペイン)とtab-selected(タブ選択)の処理は`<sheetView>`で変更されていません。これらは、単一の出力エンジンを共有しています。

バージョン 2.20.7

  • TXLSXWorkbook クラスに、インメモリでのシリアライズを行うための TStream オーバーロードを追加しました。新しい機能として、SaveAs(Stream: TStream) / SaveAs(Stream: TStream; FileFormat: TXLSXFileFormat) メソッドは、指定されたストリームに .xlsx ファイル全体を書き込みます(現在の位置から開始)。Open(Stream: TStream) メソッドは、ストリームからファイルを読み込みます。呼び出し元はストリームの所有権を持ち、解放する必要があります。これは、HTTP レスポンス、Blob ストレージ、インメモリパイプライン、およびローカルファイルシステムをバイパスするユニットテストに役立ちます。既存のファイルベースの SaveAs / Open オーバーロードは変更されておらず、同じ内部の書き込み/読み込みヘルパーに委譲されます。

バージョン 2.20.6

  • TXLSXDefinedName クラスに、Hidden、Visible、Comment プロパティを追加しました。Hidden プロパティは、OOXML の `<definedName hidden="1"/>` 属性に対応します(デフォルトは False、Visible は True です。True にすると、名前が Excel の名前管理 UI から非表示になります)。Visible プロパティは、Hidden プロパティの真偽値の反転であり、コードの可読性を向上させるためのエイリアスです。Comment プロパティは、`<definedName comment="..."/>` に対応します。SaveAs メソッドは、これらの属性がデフォルト値と異なる場合に、両方の属性を出力します。Open メソッドは、これらの属性を解析して復元します。SheetIndex (既存の Local スコープのバインディングで、localSheetId を使用) は変更ありません。

バージョン 2.20.5

  • TXLSXFontクラスに、さらに5つのフォント属性を追加しました。新しいTXLSXFontVertAlign列挙型(xlsxVertAlignBaseline / Superscript / Subscript)を導入し、既存のExcelの「上付き文字」/「下付き文字」チェックボックスを、単一のVertAlignプロパティで制御するようにしました(UI上では相互排他的)。対応するExcelのフォント効果であるアウトラインフォントとシャドウのBooleanプロパティ(OutlineFont、Shadow)を追加しました。新しいInteger型のFamily(OOXMLフォントファミリー番号:1=Roman / 2=Swiss / 3=Modern / 4=Script / 5=Decorative; 0=未設定)とCharSet(GDI文字セット番号:0=ANSI / 1=Default / 134=GB2312 / 136=ChineseBig5 / など; -1=未設定)プロパティを追加しました。SaveAsメソッドは、対応する`<vertAlign>` / `<outline/>` / `<shadow/>` / `<family>` / `<charset>`の子要素を`<font>`要素内に生成します。Openメソッドは、これらを解析して復元します。ColorIndex / ThemeColor / TintAndShadeは、今後のテーマ関連の機能で実装予定です。

バージョン 2.20.4

  • ボーダーの斜め方向設定オプションを追加しました。`TXLSXBorder` クラスで、`DiagonalUp: Boolean` と `DiagonalDown: Boolean` プロパティを公開しました。これらのフラグは、既存の `Diagonal` エッジのスタイルと色を共有し、Excel がどの斜め方向を描画するかを制御します。設定可能なのは、上方向のみ(左下から右上)、下方向のみ(右上から左下)、または両方向です。`SaveAs` メソッドは、これらのフラグが設定されている場合に、`<border>` 要素に `diagonalUp` および `diagonalDown` 属性を出力します。`Open` メソッドは、これらの属性を解析して復元します。以前は、方向制御なしで単一の `Diagonal` エッジのみが書き込まれていたため、Excel はどちらの斜め線も描画しませんでした。

バージョン 2.20.3

  • ワークブックの `Date1904` オプションを追加しました。`TXLSXWorkbook` クラスは、`Date1904: Boolean` プロパティを公開し、Windows 1900 年代 (デフォルト; Windows 版 Excel と同じ) と、Mac 1904 年代 (Mac 版 Excel のレガシー) のいずれかを選択できます。`SaveAs` メソッドは、`date1904="1"` を `xl/workbook.xml` に出力します。`Open` メソッドは、この値を読み込みます。このフラグはメタデータのみであり、エンジンは格納されたシリアル値を変換しません。呼び出し元は、`TDateTime` セル値を設定する前に `Date1904` を設定する必要があります。これにより、データのやり取りが正しいカレンダーで処理されるようになります。

バージョン 2.20.2

  • ソースデータごとに自動フィルタの条件をサポートしました。 新しい型として、`TXLSXAutoFilterOp` 列挙型 (Equal / NotEqual / GreaterThan / LessThan / GreaterOrEqual / LessOrEqual)、`TXLSXAutoFilterColumn` クラス (ColId + 1つまたは2つの条件 + AND/OR 接続子)、および `TXLSXAutoFilterColumns` コレクションが追加されました。 `TXLSXWorksheet` クラスは、`AutoFilterColumns` プロパティと、`AddAutoFilterColumn(ColId, Op, Criteria) / AddAutoFilterColumn(ColId, Op1, Criteria1, Op2, Criteria2, AndConnector) / ClearAutoFilterColumns` などの便利なメソッドを公開します。 `SaveAs` メソッドでは、既存の `<autoFilter ref="..."/>` を拡張し、条件が設定されている場合は、各列に対して `<filterColumn colId=N><customFilters and=0|1><customFilter operator="..." val="..."/>...</customFilters></filterColumn>` のような構造体を生成します。 `Open` メソッドは、同じ構造体を解析します。 以前は、エンジンは自動フィルタの範囲 (sqref) のみ保存しており、Excel ではフィルタのドロップダウンが空表示されていました。

バージョン 2.20.1

  • TXLSXWorksheet に、手動ページ区切り機能を追加しました。新しいメソッドとして、`AddRowBreak(BeforeRow)` と `AddColBreak(BeforeCol)` を追加し、指定された行または列の前に、水平または垂直のページ区切りを挿入します(Excel の UI での "Before" の意味合いと同様に、行 N から新しいページを開始します)。`HasRowBreak` / `HasColBreak` でページ区切りの有無を確認できます。`RemoveRowBreak` / `RemoveColBreak` で、単一のページ区切りを削除できます。`ClearRowBreaks` / `ClearColBreaks` / `ClearAllPageBreaks` で、複数のページ区切りを一括で削除できます。`RowBreakCount` / `ColBreakCount` で、格納されている 1 ベースの "Before" インデックスの数を取得できます。また、`RowBreaks(Index)` / `ColBreaks(Index)` で、インデックスを使用して個々のページ区切りにアクセスできます。`SaveAs` メソッドでは、`<headerFooter>` と `<drawing>` の間に、`<rowBreaks>` / `<colBreaks>` を `<brk id="N-1" max="..." man="1"/>` という子要素とともに出力します。`Open` メソッドでは、これらの要素を解析して読み込みます。

バージョン 2.20.0

  • TXLSXWorkbook、TXLSXSheets、TXLSXWorksheetにおいて、シートの可視性(非表示/非常に非表示)、シートごとの選択、およびアクティブシートの追跡機能を追加しました。 新しい型: TXLSXSheetVisibility enum (xlsxSheetVisible / xlsxSheetHidden / xlsxSheetVeryHidden)。 新しいTXLSXWorksheetのプロパティ: Visibility、Visible (Booleanのエイリアス)、IsSelected (読み取り専用)。 新しいTXLSXSheetsのメンバー: ActiveIndex、Activate(Index)、Move(FromIndex, ToIndex)。 新しいTXLSXWorkbook.ActiveSheet プロキシ。 SaveAsは、ワークブックのシートエントリに`<sheet state="...">`を、アクティブシートがデフォルトの0でない場合に`<bookViews><workbookView activeTab=N/></bookViews>`を、アクティブシートの`<sheetView>`に`tabSelected="1"`を生成します。 Openは、これらすべてを新しいプロパティに解析します。 最初に追加されたシートは、デフォルトで可視かつアクティブになるため、既存の呼び出し元は引き続き動作します。

バージョン 2.19.2

  • TXLSXWorksheetクラスに、OOXML `<pageSetup>` の機能をより網羅的にサポートするために、以下の4つのPageSetup属性のトグルを追加しました。これらは、BlackAndWhite(白黒レンダリング)、Draft(プレビューの高速化のためにグラフィックスを抑制)、PrintNotes(セルコメントを非表示にする代わりに表示して印刷)、そしてPrintOverThenDown(デフォルトの縦方向ではなく、横方向にデータを配置)です。SaveAs関数は、対応するblackAndWhite、draft、cellComments、pageOrder属性を出力し、Open関数はそれらを解析します。デフォルトではこれらの機能はオフになっており、変更されていないワークシートには追加の属性が付加されることはありません。

バージョン 2.19.1

  • TXLSXWorksheetクラスに、ヘッダーとフッターを簡単に設定できる便利なプロパティを追加しました。 新しい項目として、LeftHeader、CenterHeader、RightHeader、およびLeftFooter、CenterFooter、RightFooterがあります。 それぞれが、既存のHeaderText/FooterTextの対応する&L、&C、&Rセグメントを読み書きします。 いずれかのセグメントを書き込むと、完全なraw文字列が再構築されるため、ラウンドトリップの書き込みと読み込みが変更なしに動作します。
  • シートレベルのページ出力のための印刷オプションのトグルを追加しました。 新しいTXLSXWorksheetプロパティ:CenterHorizontally, CenterVertically, PrintGridlines, PrintHeadings。 SaveAsメソッドは、これらのいずれかが有効な場合に、`<printOptions horizontalCentered / verticalCentered / gridLines / headings/>`要素を生成します。 Openメソッドは、これらの属性を解析します。 デフォルトではすべてオフになっているため、変更されていないワークシートには余分な`<printOptions/>`要素は追加されません。
  • 各シートごとに、PrintArea、PrintTitleRows、およびPrintTitleColsのラウンドトリップ機能が追加されました。これらは、OOXMLの組み込みワークブックレベルの_xlnm.Print_Areaおよび_xlnm.Print_Titlesという名前で定義され、localSheetIdによってスコープが指定されます。PrintAreaは、単純なA1形式の参照(例:"$A$1:$D$10")を受け取ります。PrintTitleRowsとPrintTitleColsは、行のみまたは列のみの参照(例:"$1:$3"または"$A:$B")を受け取り、これらを組み合わせて単一のPrint_Titlesエントリとして扱います。書き込み時には、シート名に適切な引用符(スペースや特殊文字を含む名前にはシングルクォート)が追加されます。読み込み時には、このプレフィックスが削除され、エントリは対応するシートに登録されます。これにより、ユーザーが直接操作できるTXLSXWorkbook.DefinedNamesコレクションには登録されません。

バージョン 2.19.0

  • TXLSXWorksheet に、行/列の挿入および削除操作を追加しました。これらの操作は、シート全体にわたるシフトを伴います。新しいメソッドは以下の通りです: InsertRows(BeforeRow, Count), DeleteRows(StartRow, Count), InsertCols(BeforeCol, Count), DeleteCols(StartCol, Count)。InsertRows / InsertCols は、挿入によって削除される行/列よりも前の行/列を Count の分だけ移動させます。DeleteRows / DeleteCols は、[Start, Start+Count-1] の範囲の行/列を削除し、削除された範囲より後の行/列を Count の分だけ上に移動させます。
  • この変更は、行/列の位置に依存するすべてのシートのジオメトリに適用されます。具体的には、セルのアンカー (Cells)、結合されたセルの角 (MergedCells – 範囲がまたがる場合は、残っているエッジにクリップされ、完全に範囲内にある場合は削除されます)、行/列のメタデータリスト (FRowHeights / FColWidths / アウトラインレベル / 非表示/折りたたみ)、ハイパーリンクとコメントのアンカー (削除されたバンド内のエントリは削除されます)、FreezePane (FFreezeRow / FFreezeCol)、AutoFilterRange、および、ConditionalFormat、DataValidation、Excel Table の各エントリにおける Range 文字列 (完全に切り取られた範囲内のエントリは削除されます)。
  • サポート対象コレクションに、`Delete(Index)` メソッドが追加されました。これにより、`Clear` メソッドを使用せずに、単一のエントリを削除できるようになりました。対象は、`TXLSXHyperlinks`, `TXLSXComments`, `TXLSXConditionalFormats`, `TXLSXDataValidations`, `TXLSXTables` です。
  • 今回のリリースでは、以下の機能は対象外です。画像とグラフは移動されません(これらのEMUピクセルアンカーはセルグリッドから独立しているため、正確な移動にはEMUオフセットの再計算が必要です)。また、ワークブックレベルのDefinedNamesの数式は書き換えられません。これらの機能は、今後のリリースで対応予定です。

バージョン 2.18.2

  • カラム幅と行の高さの自動調整機能を追加しました。`TXLSXWorksheet` クラスは、`AutoFitColumn(ACol)` / `AutoFitColumns(ColMin, ColMax)` および `AutoFitRow(ARow) / AutoFitRows(RowMin, RowMax)` メソッドを公開します。`TXLSXRange` クラスは、範囲内のワークシートに対して `AutoFitColumns` および `AutoFitRows` メソッドを提供し、これらはそれぞれワークシートの範囲境界を考慮します。幅は、Excel の文字単位(Calibri 11pt、ASCII 文字は 1、CJK 文字は 2)で推定され、1.20 px/文字の補正と 1.0 のパディングが適用されます。値は [8.43, 255.0] の範囲に制限されます。行の高さはデフォルトで 15 pt であり、セル内の改行ごとに 12.75 pt ずつ増加します。広範囲(`EntireRow` / `EntireColumn`)の場合、ワークシート上でデータを含む最後の行/列に制限され、`AutoFit` が Excel のグリッド全体の範囲を反復処理しないようにします。

バージョン 2.18.1

  • XLSXエンジンに、セルごとの保護機能の双方向変換機能を追加しました。`TXLSXCell`クラスには、Excelのセル保護モデルを反映した、新しい便利なプロパティ`Locked: Boolean`(デフォルトはTrue)と`FormulaHidden: Boolean`(デフォルトはFalse)が公開されています。これらのプロパティは、新しいワークブックレベルの`TXLSXProtections`プール内のインデックス`TXLSXCell.ProtectionIndex`(1を基準)を参照します。`Locked`と`FormulaHidden`の組み合わせは、このプール内で検索または追加されます。デフォルト値(`Locked=True`、`FormulaHidden=False`)の場合、`ProtectionIndex`は0となり、標準のセルではプールが空のままになります。
  • TXLSXRange クラスに、TXLSXRange.SetLocked(ALocked) と TXLSXRange.SetFormulaHidden(AHidden) というバッチ処理ヘルパーを追加しました。これにより、範囲全体をロック解除または数式を非表示にする際に、1回の検索または追加処理で結果を範囲内のすべてのセルに適用できます。
  • 対応する書き込み/読み込み機能を追加しました。`SaveAs` は、ワークブックの `Protections` エントリごとに、アライメントブロックの後に、インラインの `<protection locked="N" hidden="M"/>` 子要素を持つ `cellXf` を 1 つ生成します。`Open` は、`<protection>` 要素を `Workbook.Protections` に解析し、`ParseStylesXml` および `ParseWorksheetXml` を通じて新しい `CellXfProtMap` を連携させます。これにより、既存のフォント/塗りつぶし/罫線/数値形式/アライメントのインデックスとともに、セルごとの `ProtectionIndex` が正しく保持されます。

バージョン 2.18.0

  • TXLSXWorksheet オブジェクトに対する、複数セルへのアクセスと一括操作を可能にする TXLSXRange オブジェクトを追加しました。新しい機能として、Worksheet.Range['A1:C5']、Worksheet.RCRange[r1,c1,r2,c2]、Worksheet.UsedRange、Worksheet.EntireRow(r)、Worksheet.EntireColumn(c) が提供されます。返される範囲オブジェクトは、SetValue、SetFormula、Clear、ClearAll、Merge、Unmerge、Offset、Resize などのメソッドに加え、セルごとのスタイルインデックス設定関数 (SetFontIndex、SetFillIndex、SetBorderIndex、SetNumberFormatIndex、SetAlignmentIndex) と、ワークブックのフォーマット文字列を検索または追加する便利なメソッド SetNumberFormat(Fmt) を提供します。TXLSXRange オブジェクトは、ワークシートによって所有され、ワークシートの破棄時に解放されます。呼び出し側は、これらのオブジェクトを解放する必要はありません。
  • TXLSXCell クラスに、NumberFormatIndex と連携する便利な機能である TXLSXCell.NumberFormat: WideString が追加されました。読み込み時には、ワークブックからフォーマット文字列を取得し、書き込み時には、文字列を検索または追加し、NumberFormatIndex を自動的に更新します。この機能を使用するには、セルをワークブックに紐付ける必要があります (通常は TXLSXWorkbook.Sheets.Add(...).Cells[r, c] を使用します)。
  • TXLSXCell が、外部の管理なしに、自身の所属するワークブックを解決できるように、セルからシート、ワークブックへの参照を追加しました。TXLSXSheets、TXLSXWorksheet、および TXLSXCells クラスに、コンストラクタを通じて内部の Owner 参照を追加しました。TXLSXCell は、読み取り専用の Workbook プロパティと、TXLSXCells.GetItem がアクセス時に自動的にセルを作成する際に使用される内部の SetWorkbook メソッドを公開します。

バージョン 2.17.42

  • XLSXファイルのセルの読み込み/書き込みに関する問題を修正しました。`SaveAs`で書き込まれたセルのデータが、ファイルを開いた際に失われる現象がありました。具体的には、`HasCell(row, col)`が`False`を返し、セルのすべての情報(値、数式、フォントインデックス、塗りつぶしインデックス、罫線インデックス、数値フォーマットインデックス)が失われていました。原因は、ワークシートパーサー内の不要な`MoveToAttribute('r')`呼び出しによるもので、これによりパーサーのノードタイプが属性に変わってしまい、その結果、`IsEmptyElement`チェックが常に`True`を返し、`r=""`属性を持つすべての`<c>`要素(つまり、すべてのセル)の解析が停止していました。この不要なカーソルの移動を削除することで、テキスト、数値、数式、日付セルの読み込み/書き込みが正常に行われるようになりました。
  • XLSXファイルのスタイルインデックスの復元に関する問題を修正しました。セルのカスタムフォント、塗りつぶし、罫線、および数値形式のインデックスが、関連するプール(Workbook.Fonts/Fills/Borders/NumberFormats)が正常に処理された後でもゼロとして読み込まれるという問題がありました。`cellXf`パーサーは、位置をカウンターで追跡していましたが、このカウンターは`<xf>`の終了タグでのみ増加していました。しかし、Excelは`<xf .../>`のような自己完結型のタグ(`<alignment>`タグがない)を頻繁に生成するため、カウンターはゼロから動かず、すべての`cellXf`マッピングが前のものを上書きしていました。パーサーは、自己完結型の`<xf/>`タグに対してもカウンターを増加させるように変更されました。これにより、セルごとのFontIndex / FillIndex / BorderIndex / NumberFormatIndexが正しく復元されるようになりました。
  • XLSXの日付セルの読み込みと書き込みの問題を修正しました。以前、`TDateTime`を`TXLSXCell.Value`に書き込む際に、共有文字列プールを経由して`t="s"`として扱われていました。これは、Delphiの`VarIsNumeric()`関数が`varDate`に対して`False`を返すためです。現在は、`SaveAs`が日付のシリアル値を直接`<v>`に書き込み、`date cellXf`を適用します。これにより、日付セルは、呼び出し元が`TDateTime`に変換できないローカライズされた文字列ではなく、`varDate`のVariantとして再オープンされます。

バージョン 2.17.41

  • .xlsxファイル(特に、埋め込み画像やVBAプロジェクトを含む.xlsmファイル)を再度開く際に発生する「zlibストリームはシークをサポートしていません」というエラーを修正しました。画像のリロードパスとVBAペイロードのリロードパスの両方で、インフレートされたエントリーストリームが`TMemoryStream.CopyFrom(Source, 0)`を通じて処理されていましたが、これは内部的に`Source`を巻き戻し、バイト数を取得するため、フォワード専用のDeflateストリームでは許可されていません。両方の箇所で、チャンク単位でEOFまで読み込むヘルパー関数を使用するように変更しました。これにより、画像やマクロを含む.xlsxファイルが、`SaveAs/Open`で問題なく処理できるようになりました。

バージョン 2.17.40

  • XLSXエンジンに、チャートシート(フルページのチャートワークシート)のサポートを追加しました。`TXLSXWorksheet`クラスには、新しい`IsChartSheet`フラグが追加され、ワークブックレベルで`Workbook.AddChartSheet(Name, ChartType, Title)`というヘルパー関数が提供されました。この関数は、シートを作成し、フラグを反転させ、`Charts[0]`に適切なデフォルトのアンカーを設定します。`SaveAs`メソッドは、`IsChartSheet`のシートを`xl/chartsheets/sheetN.xml`に保存し、共有ドローイングパーツを指す専用の`rels`ファイルを作成します。また、これらのシートをチャートシートとしてコンテンツタイプを登録し、`xl/_rels/workbook.xml.rels`にチャートシートの関係を記述します。通常のワークシートは、既存の`xl/worksheets/sheetN.xml`のパスを維持します。`Open`関数は、関係タイプに基づいてチャートシートを認識しますが、現在ではプレーンなワークシートとしてロードします(チャートデータは、引き続き共有チャートパーツ経由で読み込まれます)。

バージョン 2.17.39

  • XLSXエンジンにおいて、アウトライングループに対する行の折りたたみ/展開、および列の折りたたみ/展開の機能を追加しました。`TXLSXWorksheet`クラスには、`RowCollapsed[Row]`および`ColCollapsed[Col]`というBooleanプロパティ、および`SetRowCollapsed`、`SetColCollapsed`、`ClearRowCollapsed`、`ClearColCollapsed`というヘルパーメソッドが公開されています。`SaveAs`メソッドは、対応する`<row>`および`<col>`要素に`collapsed="1"`という属性を出力し、`Open`メソッドは、この属性を解析します。既存の`outlineLevel`および`hidden`属性と合わせて、この機能により、XLSXエンジンは完全に折りたたまれたグループ化階層を丸ごと保存・読み込みできるようになります。

バージョン 2.17.38

  • XLSXエンジンに、非表示の行/列の往復変換機能を追加しました。`TXLSXWorksheet`クラスには、`RowHidden[Row]`および`ColHidden[Col]`というBooleanプロパティと、`SetRowHidden`、`SetColHidden`、`ClearRowHidden`、`ClearColHidden`といったヘルパーメソッドが用意されています。`SaveAs`メソッドでは、対応する`<row>`および`<col>`要素に`hidden="1"`属性を出力します。`Open`メソッドは、この属性をワークシートに解析し、非表示の行/列が、カスタムの幅やアウトラインレベルを設定することなく、往復変換を乗り越えられるようにします。

バージョン 2.17.37

  • XLSXエンジンに、ワークシートタブの色に関する双方向変換機能を追加しました。`TXLSXWorksheet`クラスは、`TabColor`(ARGB形式)および`TabColorIsAuto`プロパティを公開します。`SaveAs`メソッドは、タブの色が設定されている場合、`<worksheet>`要素の最初のサブ要素として`<sheetPr><tabColor rgb="..."/></sheetPr>`ブロックを出力します。`Open`メソッドは、`<tabColor>`要素をワークシートに解析し、カラーリングされたワークシートタブが双方向変換を乗り越えられるようにします。デフォルトのワークブックには、この追加のブロックは含まれません(`TabColorIsAuto = True`)。

バージョン 2.17.36

  • XLSXエンジンに、セルの配置に関する双方向変換機能を追加しました。新しい`TXLSXHorizontalAlignment`および`TXLSXVerticalAlignment`のトークン列挙型、`TXLSXAlignment`クラス(`Horizontal`、`Vertical`、`WrapText`、`ShrinkToFit`、`Indent`、`TextRotation`)、およびワークブックレベルの`TXLSXAlignments`コレクション(`Workbook.Alignments`)が導入されました。`TXLSXCell`には、`AlignmentIndex`(`Workbook.Alignments`内の1ベースのインデックス)が追加されました。`SaveAs`メソッドは、各ワークブックの配置エントリごとに、インラインの`<alignment/>`子要素を持つ`cellXf`を1つ追加します。`Open`メソッドは、`<alignment>`属性を`Workbook.Alignments`に読み込み、`cellXf`を`TXLSXCell.AlignmentIndex`にマッピングします。`ParseWorksheetXml`および`ParseStylesXml`メソッドには、このマッピングを渡すための`CellXfAlignMap`パラメータが追加されました。

バージョン 2.17.35

  • XLSXエンジンに、AES暗号化(ECMA-376規格に基づく暗号化)APIを追加しました。`TXLSXWorkbook`クラスは、`SaveAsEncrypted(FileName, Password)`、`OpenEncrypted(FileName, Password)`、`CanReadEncrypted(FileName)`メソッドを提供します。また、`EXlsxEncryptionNotImplemented`という型付き例外も用意されています。`CanReadEncrypted`メソッドは、Microsoft Compound File Binaryのマジックバイト(`$D0 $CF $11 $E0 $A1 $B1 $1A $E1`)を認識するため、呼び出し元は暗号化されたアーカイブかどうかを事前に判定できます。`OpenEncrypted`メソッドは、暗号化されていない`.xlsx`ファイルの場合、自動的に通常の`Open`メソッドにフォールバックします。AES-128/256 + SHA + OLE Compound Fileのパイプライン自体はまだ実装されていません。そのため、実際に暗号化されたアーカイブの読み書きを行うと、`EXlsxEncryptionNotImplemented`例外が発生します。この例外型は、既存の呼び出し元がこれを捕捉し、`Worksheet.Protect`または`Workbook.ProtectWorkbook`を使用して、視覚的なロックを適用できるように、意図的に他の例外型とは区別されています。

バージョン 2.17.34

  • パフォーマンス: 各ワークシートのセル行を構築する際のO(N^2)のWideString結合処理を、TXLSWideStringBuilderに置き換えました。大規模なシート(10,000セル以上)の場合、メモリとCPU使用量がSaveAs操作において線形に保たれます。新しいWriteWorksheetXmlStreamingヘルパーと、TXLSXWorkbook.StreamingWriteオプションを追加しました。このオプションを有効にすると、SaveAs操作で、すべてのワークシートのXMLを同時にsheetXmlsキャッシュに保持しなくなります。各ワークシートは構築され、書き出され、その後すぐに破棄されます。sharedStrings.xmlは最後に書き出されるため、ストリーミングパスでも完全にパブリッシュされたSSTが生成されます。デフォルトの動作は変更ありません。

バージョン 2.17.33

  • XLSXエンジンに、セル範囲操作を追加しました。`TXLSXWorksheet`クラスは、`ClearRange(R1, C1, R2, C2)`(範囲のクリア)、`CopyRange(SrcR1, SrcC1, SrcR2, SrcC2, DstR, DstC)`(シート内コピー)、`CopyRangeTo(... TargetSheet, DstR, DstC)`(シート間コピー)、および`MoveRange(SrcR1, SrcC1, SrcR2, SrcC2, DstR, DstC)`(カット&ペースト)を提供します。各操作は、セルの値、数式、4つのスタイルインデックス、およびリッチテキストデータを複製します。`MoveRange`は、コピー元とコピー先の範囲が重なる場合でも、一部が重なる部分はコピーされた値を保持します。また、`TXLSXCells`クラスに、`Remove(Row, Col)`ヘルパー関数を追加しました。

バージョン 2.17.32

  • XLSXエンジンに、内部ハイパーリンクのアンカーを追加しました。`TXLSXHyperlink`クラスに、場所を示す`Location`プロパティ(例:「Sheet2!A1」)と、内部リンクかどうかを示す`IsInternal`ヘルパーを追加しました。`TXLSXHyperlinks`クラスに`AddInternal`メソッドを追加し、`TXLSXWorksheet`クラスに、`AddHyperlinkToCell`メソッドの3つのオーバーロードを追加しました。`SaveAs`メソッドは、`location=""`属性を持つ内部ハイパーリンクを生成し、ワークシートのrelsエントリをスキップします。`Open`メソッドは、`location=""`を持つハイパーリンクを認識し、`AddInternal`メソッドを通じて処理します。外部URLハイパーリンクは、relsファイルを通じて変更されずに処理されます。

バージョン 2.17.31

  • XLSXエンジンに、リッチテキストの双方向処理機能を追加しました。新しい`TXLSXRichTextRun`クラス(各実行単位ごとに、名前、サイズ、太字、イタリック、取り消し線、下線、色を設定可能)と、`AddRun`、`AddRunText`、`Clear`、`PlainText`メソッドを提供する`TXLSXRichText`コンテナを導入しました。`TXLSXCell`クラスは、`RichText`プロパティを所有するようになりました。`SaveAs`メソッドは、セルを共有文字列として保存し、複数の`<r>/<rPr>/<t>`要素で構成します。`Open`メソッドは、解析されたSSTエントリから`TXLSXRichText`を再構築し、セルのVariant Valueとして、フォーマットを無視する呼び出し元に対しては、連結されたプレーンテキストを提供します。

バージョン 2.17.30

  • XLSXエンジンに、グラフの往復変換機能を追加しました。新しい`TXLSXChartType`列挙型(棒グラフ/折れ線グラフ/円グラフ)、`TXLSXChartSeries`クラス(Name, CategoriesRange, ValuesRange)、および`TXLSXChart`クラス(ChartType, Title, 軸タイトル, From/Toアンカーセル, Series)を導入しました。また、各ワークシートごとに`TXLSXCharts`コレクション(`Worksheet.Charts`)を提供します。`TXLSXWorksheet`クラスには、`AddChart(Type, Title, FromRow, FromCol, ToRow, ToCol)`メソッドが追加されました。`SaveAs`メソッドは、ワークブック全体で管理される番号付けの`xl/charts/chartN.xml`ファイルを生成し、`xl/drawings/drawingN.xml`内のtwoCellAnchor/graphicFrameにバインドします。`Open`メソッドは、アンカーとグラフ定義の両方をコレクションに解析します。グラフタイトル、軸タイトル、シリーズ名、およびデータソース範囲の往復変換が可能です。

バージョン 2.17.29

  • `SetColWidth`, `SetRowHeight`, `SetRowOutlineLevel`、および `SetColOutlineLevel` によって発生する `EListError`("ソートされたリストに対して許可されていない操作")を修正しました。これらの4つの `TStringList` フィールドは、`Sorted=True` で作成されていましたが、`Values[Name] := X` という書き込み方法が使用されていました。RAD Studio の RTL は、ソートされたリストに対してこの書き込み方法を許可していません。そのため、リストはソートされていない状態で作成されるようになりました。検索は引き続き `IndexOfName` を使用して行われますが、これは通常のシートごとの列/行数では問題ありません。

バージョン 2.17.28

  • `TZipArchive.Exists` の問題を修正しました。これは以前は常に `false` を返すだけのプレースホルダー関数でした。XLSX ファイルの読み込み処理では、`zip.Exists(...)` を使用して、すべてのデータの読み込みを制御していました。そのため、以前には読み込み時に、セルのデータ、スタイル、コメント、図、ドキュメントのプロパティ、定義済み名前、保護設定、VBA コードなど、すべての関連データが静かに破棄されていました。`Exists` は、既存の `Fcd.Entries.Exists` の機能を利用するように変更され、`OpenFile` / `CreateFile` の動作と一致するようになりました。

バージョン 2.17.27

  • XLSXエンジンに、VBAプロジェクトの保存機能を追加しました。`TXLSXWorkbook`クラスは、VbaProjectのバイトデータを提供し、`LoadVbaProjectFromFile(FileName)`、`ClearVbaProject`、および`HasVbaProject`といったヘルパー関数を提供します。`SaveAs`メソッドは、これらのバイトデータを`xl/vbaProject.bin`ファイルに書き込み、`.bin`ファイルのコンテンツタイプを登録し、ワークブックのコンテンツタイプをマクロ対応版に変更し、ワークブックのリレーションズファイルに`vbaProject`の関係を追加します。`Open`メソッドは、`xl/vbaProject.bin`ファイルを読み込み、プロパティに格納します。これらのバイトデータは解析または変更されないため、既存の`.xlsm`プロジェクトは完全にそのまま保存・読み込み可能です。注意点:マクロ対応のワークブックは、Excelでマクロを有効にするために、`.xlsm`拡張子で保存する必要があります。

バージョン 2.17.26

  • XLSXエンジンに、ワークブックおよびシートの保護機能を追加しました。`TXLSXWorksheet`は、`Protect`、`Protect(Password)`、`UnProtect`に加え、`IsProtected`および`SheetProtectHash`を公開します。`TXLSXWorkbook`は、オプションでパスワード、`LockStructure`、`LockWindows`フラグを指定して`ProtectWorkbook`および`UnProtectWorkbook`を提供し、さらに`IsWorkbookProtected`、`WorkbookProtectHash`、`LockStructure`、`LockWindows`も追加しました。`SaveAs`メソッドは、保護された各ワークシートに対して`<sheetProtection>`タグ、保護されたワークブックに対して`<workbookProtection>`タグを出力します。`Open`メソッドは、これらのブロックをAPIにパースします。パスワードは、互換性を保つために、標準的な4桁の16進数ハッシュとして保存されます(元のプレーンテキストは復元できません)。

バージョン 2.17.25

  • XLSXエンジンに、ドキュメントプロパティのラウンドトリップ機能を追加しました。`TXLSXWorkbook`クラスは、`Title`、`Author`、`Subject`、`Keywords`、`Description`、`Category`、`LastModifiedBy`、`Created`、`Modified`、`Company`、`Application`、および`AppVersion`プロパティを公開します。`SaveAs`メソッドは、いずれかのプロパティが変更された場合に、`docProps/core.xml`および`docProps/app.xml`ファイルを生成し、それらを`[Content_Types].xml`および`_rels/.rels`に登録します。`Open`メソッドは、これらのファイルを解析し、作成者、変更日時、およびアプリケーションに関するメタデータが、保存後に再度開いた場合でも保持されるようにします。

バージョン 2.17.24

  • XLSXエンジンに、Excelスタイルのテーブルのラウンドトリップ機能を追加しました。新しい`TXLSXTable`クラス(`Id`, `Name`, `DisplayName`, `Range`, `Columns`, `StyleName`, `ShowFirstColumn / ShowLastColumn / ShowRowStripes / ShowColumnStripes`)と、各ワークシートごとの`TXLSXTables`コレクションが追加されました。`TXLSXWorksheet`は`Tables`プロパティを公開し、`AddTable(Name, Range, ColumnNames)`メソッドを提供します。`SaveAs`メソッドは、`xl/tables/tableN.xml`(ワークブック全体の番号付け)を出力し、ワークシートのrelsにテーブルの関係を更新し、ワークシートに`<tableParts>`を追加し、テーブルのコンテンツタイプを登録します。`Open`メソッドは、テーブルの関係と`tableN.xml`をワークシートに解析し、スタイルが適用されたテーブルが保存後に再度開かれた際にも維持されるようにします。

バージョン 2.17.23

  • XLSXエンジンに、自動フィルタのラウンドトリップ機能を追加しました。`TXLSXWorksheet`クラスには、`AutoFilterRange`プロパティと、`SetAutoFilter(Row1, Col1, Row2, Col2) / SetAutoFilter(Range) / ClearAutoFilter`ヘルパーメソッドが公開されています。`SaveAs`メソッドは、範囲が空でない場合に、マージセルブロックの後に`<autoFilter ref="..."/>`を生成します。`Open`メソッドは、`ref`属性をプロパティに解析し、ワークシートのフィルタバーが保存後に再度開いても維持されるようにします。

バージョン 2.17.22

  • XLSXエンジンに、ページ設定の双方向変換機能を追加しました。`TXLSXWorksheet`クラスは、`Margin{Left,Right,Top,Bottom,Header,Footer}`、`PageLandscape`、`PaperSize`、`PageScale`、`FitToWidth`、`FitToHeight`、`HeaderText`、および`FooterText`プロパティを公開しています。また、`SetPageMargins(L, R, T, B[, H, F])`という便利なオーバーロードも提供しています。`SaveAs`メソッドは、ハイパーリンクと図のブロック間に、対応する`<pageMargins>`、`<pageSetup>`、および`<headerFooter>`ブロックを出力します。`Open`メソッドは、これらを解析して復元します。デフォルト設定のみのワークシートは変更されません(`PageSetupTouched`フラグによって出力が制御されます)。

バージョン 2.17.21

  • XLSXエンジンに、フリーズペインのラウンドトリップ機能を追加しました。`TXLSXWorksheet`クラスには、`FreezePane(Col, Row)`/`UnfreezePane`メソッドと、読み取り専用の`FreezeCol`および`FreezeRow`プロパティが公開されています。`SaveAs`メソッドは、`<sheetData>`ブロックの前に、アクティブなペインと選択内容に対応する`<sheetViews>/<pane state="frozen">`ブロックを書き込みます。`Open`メソッドは、`<pane state="frozen">`ブロックを解析し、フリーズ位置を復元するため、フリーズされた上部/左側/コーナーのレイアウトは、保存後に再度開いても維持されます。

バージョン 2.17.20

  • XLSXエンジンに、行と列のアウトライン(グループ化)レベルを追加しました。`TXLSXWorksheet`クラスには、`RowOutlineLevel[Row]`および`ColOutlineLevel[Col]`というインデックス付きプロパティに加え、`SetRowOutlineLevel`、`HasRowOutlineLevel`、`ClearRowOutlineLevels`、およびそれに対応する列関連のヘルパーメソッドが用意されています。`SaveAs`メソッドは、`<row>`要素および結合された`<col>`要素に`outlineLevel`属性を出力します(カスタム幅が存在する場合は、それらも併せて出力します)。`Open`メソッドは、これらの属性をワークシートに解析し、グループ化された行/列の階層構造が保存と読み込みのサイクルを乗り越えられるようにします。

バージョン 2.17.19

  • XLSXエンジンに、条件付き書式とデータ検証の双方向対応機能を追加しました。新しい`TXLSXCfOperator`列挙型と`TXLSXConditionalFormat`クラス(`Range`, `Op`, `Formula1`, `Formula2`)を導入し、各ワークシートに`TXLSXConditionalFormats`コレクション(`Worksheet.ConditionalFormats`)を追加しました。また、`TXLSXDataValidationType`, `TXLSXDvOperator`, `TXLSXDataValidation`(`Range`, `ValidationType`, `Op`, `Formula1`, `Formula2`, `AllowBlank`, `ShowInputMessage`, `ShowErrorMessage`)を導入し、`TXLSXDataValidations`コレクション(`Worksheet.DataValidations`)に、一般的なドロップダウンリストのケースに対応する`AddList(Range, Items)`ショートカットを追加しました。`TXLSXWorksheet`クラスには、`AddConditionalFormat`と`AddDataValidation / AddListValidation`ヘルパー関数を公開しています。`SaveAs`メソッドは、`<conditionalFormatting>`ブロック(`cfRule`属性が`type="cellIs"`の場合)と、`<dataValidations>`ブロックを`sheetData`の後に書き込みます。`Open`メソッドは、これらのブロックをコレクションに読み込みます。

バージョン 2.17.18

  • XLSXエンジンに、定義済み名前のラウンドトリップ機能を追加しました。新しい`TXLSXDefinedName`クラス(`Name`, `Formula`, `SheetIndex`)と、ワークブックレベルの`TXLSXDefinedNames`コレクション(`Workbook.DefinedNames`)を導入しました。`Add(Name, Formula[, SheetIndex])`のオーバーロードと、`IndexOfName`による検索機能を提供します。`SaveAs`メソッドは、`xl/workbook.xml`に`<definedNames>`ブロックを出力します。`SheetIndex`が0以上のエントリには、ローカルシートID属性(シートスコープ)が設定され、`SheetIndex`が-1のエントリはワークブックスコープになります。`Open`メソッドは、`<definedName>`要素をコレクションに解析し、保存後に再度開いたワークブックでも、定義済み名前が保持されるようにします。

バージョン 2.17.17

  • XLSXエンジンに、画像のラウンドトリップ機能を追加しました。新しい`TXLSXImageFormat`列挙型(png, jpeg, gif, bmp)、`TXLSXImage`クラス(行/列アンカー、`WidthEMU`/`HeightEMU`、フォーマット、データ)、および各ワークシートごとの`TXLSXImages`コレクションを導入しました。`TXLSXWorksheet`クラスは、`Images`プロパティに加え、`AddImage(Row, Col, Data, Format)`および`AddImageFromFile(Row, Col, FileName)`ヘルパーメソッドを提供します。`SaveAs`メソッドは、画像データを`xl/media/imageN.<ext>`に書き込み、`xl/drawings/drawingN.xml`ファイルを生成します。このXMLファイルには、各画像ごとに1つの`oneCellAnchor`が含まれており、対応する`_rels`ファイルも生成されます。さらに、コンテンツタイプとワークシート/ドローイングの関係を登録し、ワークシート内に`<drawing r:id="..."/>`という参照を生成します。`Open`メソッドは、`drawingN.xml`、ドローイングの`rels`ファイル、およびメディアファイルを解析し、画像を`Worksheet.Images`にラウンドトリップします。

バージョン 2.17.16

  • XLSXエンジンに、カスタム数値フォーマットの往復変換機能を追加しました。新しい`TXLSXNumberFormat`クラスと、ワークブックレベルの`TXLSXNumberFormats`コレクション(`Workbook.NumberFormats`)を導入し、`Add(FormatCode)`メソッドを使用してフォーマットコードの重複を排除します。`TXLSXCell`クラスには、新しい`NumberFormatIndex`プロパティが追加されました。`SaveAs`メソッドは、`xl/styles.xml`に`<numFmts>`ブロックを出力します(カスタムIDはOOXMLで予約されている164から開始)。各フォーマットには専用の`cellXf`が関連付けられ、Openはカスタム`numFmts`を解析し、読み込み時に`cellXf->numFmtId`のマッピングを`NumberFormatIndex`に変換します。競合時の優先順位は、`FormatIndex` > `FontIndex` > `FillIndex` > `BorderIndex` > `NumberFormatIndex`です。

バージョン 2.17.15

  • XLSXエンジンに、セルのボーダーに関するラウンドトリップ機能を追加しました。新しい`TXLSXBorderStyle`列挙型、`TXLSXBorderEdge`クラス(各辺に対してスタイル、色、自動色フラグ)、`TXLSXBorder`クラス(左、右、上、下、斜めの辺)、およびワークブックレベルの`TXLSXBorders`コレクション(`Workbook.Borders`)を導入しました。また、`Borders.AddBox(Style[, Color])`というショートカット機能も追加しました。`TXLSXCell`には、新しい`BorderIndex`プロパティが追加されています。`SaveAs`関数は、各ボーダーを`xl/styles.xml`に出力し、専用の`cellXf`と紐付けます。`Open`関数は、ボーダーを解析し、`cellXf->borderId`のマッピングを読み込み時に`BorderIndex`に変換します。複数の設定が同じセルに適用されている場合、優先順位は`FormatIndex > FontIndex > FillIndex > BorderIndex`のままです。

バージョン 2.17.14

  • XLSXエンジンに、セル塗りつぶしのラウンドトリップ機能を追加しました。新しい`TXLSXFillPattern`列挙型と`TXLSXFill`クラスにより、`patternType`、`fgColor`、および`bgColor`を記述できます。ワークブックレベルの`TXLSXFills`コレクションは、`Workbook.Fills`を通じてアクセス可能で、`Fills.AddSolid(color)`という便利なメソッドで、一般的な単色塗りつぶしを簡単に設定できます。`TXLSXCell`には、新しい`FillIndex`プロパティが追加されました。`SaveAs`メソッドは、各塗りつぶしを`xl/styles.xml`に出力し、専用の`cellXf`と紐付けます。`Open`メソッドは、これらを解析し、読み込み時にセルの属性を`FillIndex`に反映します。`FontIndex`は、両方が設定されている場合でも、依然として優先されます。

バージョン 2.17.13

  • XLSXフォントのラウンドトリップ処理が完了しました。現在は、xl/styles.xmlファイルをWorkbook.FontsとcellXf->fontIdテーブルに解析し、各セルのs属性をTXLSXCell.FontIndexにマッピングすることで、保存したワークブックを再度開いた際に、カスタムフォント(フォント名、サイズ、太字、イタリック、取り消し線、下線、色)が保持されるようになりました。

バージョン 2.17.12

  • TXLSXFont クラスを追加し、Workbook クラスに Fonts コレクションを追加しました。これにより、XLSX セルでカスタムフォントを選択できるようになりました。TXLSXCell クラスには、新しい FontIndex プロパティが追加されています。SaveAs メソッドは、フォントリストを xl/styles.xml に出力し、各フォントに対して 1 つの cellXf を生成し、各セルの s 属性から対応する cellXf を参照します。FontIndex の読み込みと書き込みの機能は、次回のリリースで実装予定です。

バージョン 2.17.11

  • XLSXエンジンに、行の高さに関する双方向変換機能を追加しました。`TXLSXWorksheet`クラスには、`RowHeight[Row]`プロパティに加え、`SetRowHeight`、`HasRowHeight`、および`ClearRowHeights`ヘルパーメソッドが提供されています。`SaveAs`メソッドは、カスタムの高さを持つ各`<row>`要素に対して、`ht`属性と`customHeight="1"`属性を書き込みます(セルデータを持たない行も対象)。`Open`メソッドは、`ht`属性を読み込み、行の高さマップに反映します。

バージョン 2.17.10

  • XLSXエンジンに、列幅のラウンドトリップ機能を追加しました。`TXLSXWorksheet`クラスには、`ColWidth[Col]`プロパティに加え、`SetColWidth`、`HasColWidth`、および`ClearColWidths`ヘルパー関数が用意されています。`SaveAs`メソッドは、カスタマイズされた列ごとに`<col>`エントリを含む`<cols>`ブロックを出力します。`Open`メソッドは、`<col min/max/width>`エントリをワークシートに再適用し、変更されていない列幅はExcelのデフォルト値に戻ります。

バージョン 2.17.9

  • XLSXエンジンに、セルコメントの往復変換機能を追加しました。`TXLSXWorksheet`クラスは、`Comments`コレクションを公開し、`AddComment(Row, Col, Text[, Author])`メソッドのオーバーロードを提供します。`SaveAs`メソッドは、`xl/commentsN.xml`ファイル(重複した作成者リストは削除されます)と、Excelがコメントの吹き出しをレンダリングするために必要な`xl/drawings/vmlDrawingN.vml`ファイルを生成します。`Open`メソッドは、`commentsN.xml`ファイルをコレクションに読み込みます。ワークシートのrels、content types、および`<legacyDrawing>`の設定は、自動的に処理されます。

バージョン 2.17.8

  • XLSXエンジンにハイパーリンクの双方向対応を追加しました。`TXLSXWorksheet`クラスは`Hyperlinks`コレクションを公開し、`AddHyperlink(Row, Col, Url[, Display[, Tooltip]])`メソッドのオーバーロードを提供します。`SaveAs`メソッドは、各ワークシートに`<hyperlinks>`ブロックを書き込み、外部URLターゲットに対応する`xl/worksheets/_rels/sheetN.xml.rels`ファイルを生成します。`Open`メソッドは、まずワークシートのrelsファイルを読み込み、`<hyperlink r:id="..."/>`エントリをURLに解決し、コレクションに格納します。

バージョン 2.17.7

  • XLSXエンジンに、結合されたセルのラウンドトリップ機能を追加しました。`TXLSXWorksheet`クラスは、`MergedCells`コレクションと、BIFFのファサードスタイルを反映した`MergeCells(R1, C1, R2, C2)`という便利なメソッドを公開しています。`SaveAs`メソッドは、`sheetData`ブロックの後に`<mergeCells>`ブロックを出力し、`Open`メソッドは、`<mergeCell ref="A1:B2"/>`エントリをコレクションにパースします。

バージョン 2.17.6

  • XLSXエンジンは、日付値と数式を丸め処理できるようになりました。TDateTime型のセルの値は、Excelのシリアル番号としてシリアライズされ、組み込みの日付セルXfタグが付与されます。これにより、Excelがそれらを日付として表示します。読み込み時には、スタイルが日付セルXfを参照しているセルは、TDateTime型の値にデコードされます。TXLSXCellクラスには、新しいFormulaプロパティが追加されました。SaveAsメソッドは、数式を`<f>`という子要素として書き込み、Openメソッドは、`<f>`テキストをセルの値として解析します。

バージョン 2.17.5

  • XLSXエンジンに、`styles.xml`のテンプレートを追加しました。`SaveAs`関数は、デフォルトのフォント、塗りつぶし、罫線、`cellStyleXfs`、および`cellXfs`エントリを含む、最小限の有効な`xl/styles.xml`ファイルを生成します。さらに、対応する`content-type`と`workbook-relationship`の登録も行います。セルには`FormatIndex`プロパティが設定され、ゼロでない場合は`s="N"`という属性が出力されます。`Open`関数は、`s="N"`を`FormatIndex`に読み戻します。具体的なスタイル記述子(フォント、塗りつぶし、罫線、ワークブックレベルの`cellXfs`コレクション)は、今後のコミットで追加されます。

バージョン 2.17.4

  • XLSXエンジンに、共有文字列(SST)のサポートを追加しました。SaveAs機能は、重複を排除した文字列テーブルを構築し、xl/sharedStrings.xmlファイルを生成します。これにより、インライン文字列の出力が置き換えられます。Open機能は、まずxl/sharedStrings.xmlファイルを読み込み、SSTを使用してt="s"というセル参照を解決します。サードパーティ製のXLSXファイルからのインライン文字列を含むセルは、Open機能で引き続きサポートされます。

バージョン 2.17.3

  • TXLSXWorksheetのセルレコード配列を、TXLSXCellオブジェクトとTXLSXCellsコレクションに置き換えました。 セルへのアクセス箇所は、現在はWorksheet.Cells.Item[Row, Col].Valueとして読み込まれるようになり、BIFFファサードにおけるIXLSCells/IXLSRangeの構造に一致します。 また、Worksheet.Cells.HasCell、Cells.Count、Cells.CellByIndex、Cells.Clearも利用可能です。

バージョン 2.17.2

  • TXLSXWorkbook クラスに TXLSXSheets コレクションクラスを追加しました。これは、BIFF ファサードの IXLSWorkSheets コレクションを模倣したものです。コードでは、`Workbook.Sheets.Add`、`Workbook.Sheets.Count`、`Workbook.Sheets[i]`、`Workbook.Sheets.IndexByName` などのメソッドを使用するようになりました。以前は `Workbook.AddSheet`、`Workbook.SheetCount`、`Workbook.Sheet[i]` などのメソッドが使用されていました。

バージョン 2.17.1

  • TXLSXWorkbook.SaveToFile の名称を SaveAs に、TXLSXWorkbook.LoadFromFile の名称を Open に変更しました。これにより、既存の IXLSWorkBook の命名規則に準拠します。ファイル形式とパスワードに関するオーバーロードを追加し、XLSX ファサードが BIFF ファサードと同じように動作するようにしました。AddSheet には、デフォルトのシート名が生成される引数なしのオーバーロードを追加しました。

バージョン 2.17.0

  • TXLSXWorkbook.SaveAs メソッドは、セルの値(数値、ブール値、およびインライン文字列)を含む、最小限の OOXML .xlsx アーカイブを作成します。このアーカイブには、コンテンツタイプ、ルートリレーションシップ、ワークブックとリレーションシップ、および各シートごとにワークシートが含まれます。
  • TXLSXWorkbook.Open は、最小限の OOXML .xlsx アーカイブを読み込みます。具体的には、xl/workbook.xml からシート名、xl/worksheets/sheetN.xml からセルの値を読み込みます。共有文字列、スタイル、日付、数式はまだサポートされていません。
  • OOXMLのネームスペース、コンテンツタイプ、および関連付け定数を追加しました。また、今後のXLSX機能で使用するための、参照/解析/エスケープ処理ヘルパー(XlsxColumnLabel, XlsxCellRef, XlsxColumnIndex, XlsxParseCellRef, XlsxParseRangeRef, XlsxEscapeText, XlsxEscapeAttr)も追加しました。

バージョン 2.16.4

  • XLSX ファサードユニット (lxHandleX) は、BIFF ファサードに依存せず、独自のワークブックとワークシートの型 (TXLSXWorkbook, TXLSXWorksheet) を定義するようになりました。 保存および読み込みのエントリポイントは予約されており、OOXML 関連の実装は、今後のリリースで追加されます。
  • 新しいXLSXファサードに関する開発者向けドキュメントを追加しました。このドキュメントでは、`lxHandle`と`lxHandleX`がどのように共存し、どのヘルパーユニットを共有しているかを説明しています。

バージョン 2.16.3

  • 既存のBIFFファサード lxHandle と並存する、XLSX専用ファサードユニット lxHandleX を導入しました。両ユニットは同じ基盤インフラ(スタイルプール、XMLユーティリティ、ZIPアーカイブ)を共有しますが、独立したクラス階層を持ちます。lxHandleTXLSWorkBook と従来のXLS/HTML/RTF/CSVパスを担当し、lxHandleXTXLSXWorkbook とすべてのXLSX固有APIを担当します。誤って lxHandle に追加されていた3つのメソッドスタブ(SetCodePageGetColumnXFIndexGetRowXFIndex)を削除し、BIFFファサードのパブリックAPIをv2.15.0と同一に保ちました。lxHandle を使用する既存コードの変更は不要です。

バージョン 2.16.2

  • XLSXエンジンの基盤を完成させる3つの内部データ構造ユニットを追加しました。lxAvlTree はソート済み検索のためのO(log N) AVLツリー(TAVLTree/TAVLNode)を提供します。lxColslxRows は、細粒度の重複排除とインデックス書き換えを備えた列・行情報コンテナで、XLSXエンジンのシートごとの列幅・行高マップに使用されます。3つのユニットはこのバージョンでは休眠状態であり、v2.17.0でXLSX読み書きエンジンが初めて有効化されたときにアクティブになります。

バージョン 2.16.1

  • XLSXエンジンのインフラ層を完成させる6つの内部XMLおよびZIPユーティリティユニットを追加しました。lxWStream(ファイル存在チェックとAnsiString書き込みヘルパーを備えたワイド文字ファイルストリーム)、lxCacheStream(下位I/O呼び出しを削減するバッファ付きストリームラッパー)、lxZlibStream(既存の loZlib BIFF暗号化バインディングとは独立した前方専用deflate/inflateストリーム)、lxXmlReader(高速XML解析のためのSAXスタイルプルリーダー)、lxXmlWriter(要素名再利用機能付きストリーミングXMLライター)、lxZipArchive(エントリごとのdeflateストリームを持つセントラルディレクトリZIPリーダー/ライター)。v2.16.0の7つのユニットと合わせて、XLSXエンジンの完全な内部基盤を形成します。

バージョン 2.16.0

  • 次期XLSXエンジンの基盤となる7つの内部スタイルインフラユニットを追加しました。lxHashTable(整数・WideString・オブジェクトキー変種を持つ汎用ハッシュテーブル)、lxKeyList(高速検索とインデックス書き換えを備えたオブジェクトキーリスト)、lxStyleColor(Officeテーマカラーとパレットスロットマネージャー)、lxStyleFontlxStyleFilllxStyleBorder(12種類すべてのBIFF線種とXLSXスタイルマッピングをカバーする、フォント・塗りつぶし・罫線スタイルの重複排除プール)、lxStyleXf(5つのスタイルプールと数値書式リストを単一のXFレコードに集約)。7つのユニットはこのバージョンでは休眠状態であり、既存のXLSパスには影響しません。

バージョン 2.15.1

  • lxRgb カラーユーティリティヘルパーを追加しました。RGBtoHLSHLStoRGBRGBTintGetRGBTint はRGBとHLS色空間(HLS範囲0–240)の間で変換を行います。これらはXLSX出力におけるテーマカラーの色調計算、カラースケール条件付き書式、パレット補間の基盤となります。
  • lxStrBuilder 高性能文字列ビルダーを追加しました。TXLSStringBuilder(AnsiChar)と TXLSWideStringBuilder(WideChar)は、事前割り当て・倍増成長バッファを使用して、標準Pascalの文字列連結時のメモリ再割り当てを排除します。AnsiChar変種はXLSX XMLシリアライズパスを、WideChar変種はXLSXパーサーのワイド文字列アセンブリを担当します。

バージョン 2.15.0

  • HtmlHelp の参照を、ウェブ対応の構造に再構築しました。専用のトピック、アセット、スクリプト、スタイル、およびソースのフォルダを用意しました。
  • ブラウザで使いやすいヘルプのトップページと目次ページを追加しました。これらは、統一されたヘッダー、トピックへのショートカット、およびフッターを備えています。
先頭へ戻る