表実身データの構造

仮身ネットワーク階層表示コマンド kn が想定している表実身データの 構造を説明します。

【注意!】

この内容は私(豊福)が解析して構造はこうであろうと勝手に思って いるもので PMC はこの内容の正確さについて何も保証していません。 このページの情報を参考にした結果、障害等が発生したとしても 責任取れませんのでそのつもりで。

【注意終わり】


表実身は
・TADレコード
・TAD補助レコード
・付箋レコード
の3つのレコードから構成されています。

最初のセルに文字列「abc」とだけ入れた表の各レコードの内容を 16進ダンプで見てみましょう。

解析できていない部分はピンクで表示しています。

1. TADレコード

表データの内容が書かれています。

データは

・管理情報セグメント
・文章開始セグメント
・文章ページ割付け指定付箋セグメント 用紙指定付箋
・文章ページ割付け指定付箋セグメント マージン指定付箋
・指定付箋セグメント
・セルのデータ
・文章終了セグメント

から構成されています。

0000: ffe0 0006 0000 0002 0121 ffe1 0018 0000
0010: 0000 0000 0000 0000 0000 0000 0000 ff88
0020: ff88 0021 0000 ffa0 000e 0000 057b 03e0
0030: 005e 005e 005e 002f ffa0 000a 0100 005e
0040: 005e 005e 002f ffe7 0076 0000 0000 0000
0050: 0000 0000 0000 1000 0000 1000 ffff 10ff
0060: 0000 8000 0009 8000 493d 4955 6435 0000
0070: 0000 0000 0000 0000 0000 0000 0000 0000
0080: 0000 0000 0000 0000 0034 0000 0003 0001
0090: 0001 0000 0000 0100 0009 0000 4c40 442b
00a0: 424e 0000 0000 0000 0000 0000 0000 0000
00b0: 0000 0000 0000 8000 0000 0000 0000 0000
00c0: 2149 2361 2362 2363 2149 000a ffe2 0000

各セグメントの説明

(a) 管理情報セグメント


0000: ffe0 0006 0000 0002 0121
TAD規格のバージョン番号が 1.21 であることを示しています。

(b) 文章開始セグメント


0000:                          ffe1 0018 0000
0010: 0000 0000 0000 0000 0000 0000 0000 ff88
0020: ff88 0021 0000
デフォールト言語は 0x21(第1面)になっています。

(c) 文章ページ割付け指定付箋セグメント 用紙指定付箋


0020:                ffa0 000e 0000 057b 03e0
0030: 005e 005e 005e 002f
説明略。

(d) 文章ページ割付け指定付箋セグメント マージン指定付箋


0030:                     ffa0 000a 0100 005e
0040: 005e 005e 002f
説明略。

(e) 指定付箋セグメント

セルの位置やフォント名などが書かれています。

0040:                ffe7 0076 0000 0000 0000
0050: 0000 0000 0000 1000 0000 1000 ffff 10ff
0060: 0000 8000 0009 8000 493d 4955 6435 0000
0070: 0000 0000 0000 0000 0000 0000 0000 0000
0080: 0000 0000 0000 0000 0034 0000

までが基本部、

0080:                               0003 0001
0090: 0001 0000 0000 0100 0009 0000 4c40 442b
00a0: 424e 0000 0000 0000 0000 0000 0000 0000
00b0: 0000 0000 0000 8000 0000 0000 0000 0000

が固有データ部です。

基本部のうち
0060:      8000 0009 8000
が基本表計算のアプリケーションIDです。

0060:                     493d 4955 6435 0000
0070: 0000 0000 0000 0000 0000 0000 0000 0000
0080: 0000 0000 0000 0000
が基本表計算の付箋名を表しています。
この例の 493d 4955 6435 は「表付箋」です。

0080:                     0034 0000
が固有データ部の長さ 0x00000034 バイトです。
(準TADなので上位ハーフワードと下位ハーフワードがスワップしています)

固有部の

0080:                               0003
は不明です。(多分固有データの種類を表すIDでしょう)
kn ではこの 0003 をそのまま使っています。

0080:                                    0001
はセルの行番号(ここでは1)を表しています。

0090: 0001
はセルの列番号(ここでは1)を表しています。

0090:      0000 0000 0100 0009
はセルの文字色や表示形式などを表しています。詳しいことは後述します。
この例での 0x0100 は文字色黒を表しています。
TAD補助レコードの説明 (d) にもこれにあたるものが出てきますので覚えておいてください。

0090:                          0000
は不明です。
kn ではこの 0000 をそのまま使っています。

0090:                               4c40 442b
00a0: 424e 0000 0000 0000 0000 0000 0000 0000
00b0: 0000 0000
はセルの文字のフォント(フォントファミリー?)名を表しています。
この例での 4c40 442b 424e は「明朝体」です。
kn では「SS丸ゴシック体」を指定しています。
TAD補助レコードの説明 (d) にもこれにあたるものが出てきますので覚えておいてください。

00b0:           0000 8000 0000 0000 0000 0000
の詳しいことは不明です。
フォントを変えると
00b0:           0000

00b0:           60c6
などに変わるようです。
固定ピッチを比例ピッチに変更すると
00b0:                8000 0000

00b0:                0000 8000
に変わるようです。
kn では 18c0 0000 8000 0000 0000 0000 を使っています。
TAD補助レコードの説明 (d) にもこれにあたるものが出てきますので覚えておいてください。

(f) セルの値

セルの値が書かれています。文字列か仮身セグメントです。

00c0: 2149 2361 2362 2363 2149 000a
この例ではセルのデータ「abc」をダブルクオートで囲んだ 「”abc”」の後に改行コードが続いた文字列が書かれています。
同じ行の後ろに空でないセルがある場合は改行コードではなく タブコードが続きます。
セルのデータの型によって文字列での表現の仕方が違います。詳しくは後述します。


(g) 文章終了セグメント


00c0:                               ffe2 0000
説明不要。


2. TAD補助レコード

列のデフォルトセル情報、列幅/行高さ、タイトル行/列数などが書かれています。
TAD形式です。

データは
・管理情報セグメント
・文章開始セグメント
・指定付箋セグメント
・文章終了セグメント

から構成されています。

0000: ffe0 0006 0000 0002 0121 ffe1 0018 0000
0010: 0000 0000 0000 0000 0000 0000 0000 ff88
0020: ff88 0021 0000 ffe7 0048 0000 0000 0000
0030: 0000 0000 0000 1000 0000 1000 ffff 10ff
0040: 0000 8000 0009 8000 493d 4955 6435 0000
0050: 0000 0000 0000 0000 0000 0000 0000 0000
0060: 0000 0000 0000 0000 0006 0000 0001 0100
0070: 0100 ffe7 2c6c 0000 0000 0000 0000 0000
0080: 0000 1000 0000 1000 ffff 10ff 0000 8000
0090: 0009 8000 493d 4955 6435 0000 0000 0000
00a0: 0000 0000 0000 0000 0000 0000 0000 0000
00b0: 0000 0000 2c2a 0000 0002 2c22 0000 0000
00c0: 0001 0000 0000 0010 0000 0000 0000 0000
00d0: 0000 0000 0000 0000 0000 0000 0000 0000
00e0: 0100 0000 0000 0100 0000 0000 0100 0000
00f0: 0000 0100 0000 0000 0100 0000 0000 0100
...
06d0: 0000 0000 0100 0000 0000 0100 0002 0009 06e0: 0009 0009 0009 0009 0009 0009 0009 0009 ...
08d0: 0009 0009 0009 0009 0009 0009 0009 defb 08e0: 4c40 442b 424e 0000 0000 0000 0000 0000 08f0: 0000 0000 0000 0000 0000 8000 0000 0000 0900: 0000 0000 4c40 442b 424e 0000 0000 0000 ...
2cb0: 0000 8000 0000 0000 0000 0000 4c40 442b 2cc0: 424e 0000 0000 0000 0000 0000 0000 0000 2cd0: 0000 0000 0000 8000 0000 0000 0000 0000 2ce0: 0000 ffe2 0000

各セグメントの説明

(a) 管理情報セグメント


0000: ffe0 0006 0000 0002 0121
TAD規格のバージョン番号が 1.21 であることを示しています。

(b) 文章開始セグメント


0000:                          ffe1 0018 0000
0010: 0000 0000 0000 0000 0000 0000 0000 ff88
0020: ff88 0021 0000
デフォールト言語は 0x21(基本面)になっています。

(c) 指定付箋セグメント


0020:                ffe7 0048 0000 0000 0000
0030: 0000 0000 0000 1000 0000 1000 ffff 10ff
0040: 0000 8000 0009 8000 493d 4955 6435 0000
0050: 0000 0000 0000 0000 0000 0000 0000 0000
0060: 0000 0000 0000 0000 0006 0000
までが基本部。

0060:                               0001 0100
0070: 0100
が固有データ部。何を表しているか不明です。。
(最初の 0001 は多分固有データの種類を表すIDでしょう)
kn ではそのまま使っています。

(d) 指定付箋セグメント

タイトル行/列数や列幅/行高さなどが書かれています。

0070:      ffe7 2c6c 0000 0000 0000 0000 0000
0080: 0000 1000 0000 1000 ffff 10ff 0000 8000
0090: 0009 8000 493d 4955 6435 0000 0000 0000
00a0: 0000 0000 0000 0000 0000 0000 0000 0000
00b0: 0000 0000 2c2a 0000
までが基本部。
(最後の 2c2a 0000 が固有データ部の長さ 0x00002c2aバイトを表しています)

00b0:                     0002 2c22 0000 0000
00c0: 0001 0000 0000 0010 0000 0000 0000 0000
...
2cd0: 0000 0000 0000 8000 0000 0000 0000 0000 2ce0: 0000
が固有データ部。

固有データの
00b0:                     0002
は不明です。(多分固有データの種類を表すIDでしょう)

00b0:                          2c22
は続くデータの長さ(この例では 0x2c22バイト)を表しています。

00b0:                               0000
保護(0001)か手動再計算(0002)かなどが書かれています。

00b0:                                    0000
計算順序が列順(0001)か行順(0002)かなどが書かれています。

00c0: 0001
計算反復回数が書かれています。

00c0:      0000 0000
はタイトル行数とタイトル列数をそれぞれ表しています。
この例ではタイトル行もタイトル列もありません。

00c0:                0010 0000 0000 0000 0000
00d0: 0000 0000 0000 0000 0000 0000
は不明です。
kn ではそのまま使っています。

00d0:                               0000 0000
00e0: 0100 0000 0000 0100 0000 0000 0100 0000
...
06d0: 0000 0000 0100 0000 0000 0100
は1列から256列までの列のセル形式のデフォルト情報です。
この例では一つの列毎に 0000 0000 0100 というパターンが出てきますが これはTADレコードの説明 (e) に出てきた
0090:      0000 0000 0100
にあたるものです。

06d0:                               0002
は不明です。
kn ではそのまま使っています。

06d0:                                    0009
06e0: 0009 0009 0009 0009 0009 0009 0009 0009
...
08d0: 0009 0009 0009 0009 0009 0009 0009
も1列から256列までの列のセル形式のデフォルト情報です。
この例では一つの列毎に 0009 というパターンが出てきますが これはTADレコードの説明 (e) に出てきた
0090:                     0009
にあたるものです。

08d0:                                    defb
は不明です。
0000 や ffff などになることもあります。規則はわかりません。
kn では 0000 を使っています。

08e0: 4c40 442b 424e 0000 0000 0000 0000 0000
08f0: 0000 0000 0000 0000 0000 8000 0000 0000
0900: 0000 0000 4c40 442b 424e 0000 0000 0000
...
2cd0: 0000 0000 0000 8000 0000 0000 0000 0000
は1列から256列までの列のセルのデフォルトフォント情報です。
この例では一つの列毎に
4c40 442b 424e 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 8000 0000 0000
0000 0000
というパターンが出てきてますがこれはTADレコードの説明 (e) に出てきた
0090:                               4c40 442b
00a0: 424e 0000 0000 0000 0000 0000 0000 0000
00b0: 0000 0000 0000 8000 0000 0000 0000 0000
にあたるものです。

ただし256列目の最後の
2cd0:                                    0000
と次の
2ce0: 0000
は列幅/行高さの設定に関係しています。詳しいことは後述します。

(d) 文章終了セグメント


2ce0:      ffe2 0000
説明不要。


3. 付箋レコード

基本表計算の付箋データが入っています。

「値のみ」などの設定はここに保存されます。

説明は省略します。あまり調べてないし。


4. セル情報の詳細


まずTADレコードの説明に出てきたセルの文字色や表示形式などを表す
0090:      0000 0000 0100 0009
について詳細を説明します。
全部で64ビットありますが、説明しやすいように4ビットずつに区切って 左から a1, a2, ... a16 ということにします。

(a1) 揃え方や保護など

2: 中央揃え
3: 右揃え
8: 保護しない
などの設定です。

(a2) 表示形式やカンマなど

4: カンマ形式
6: yy/mm/dd 形式
7: yy年mm月dd日 形式
8: yy/mm/dd hh:mm 形式
9: yy/mm/dd hh:mm:ss 形式
a: hh:mm:ss 形式
b: hh時mm分ss秒 形式
c: hh:mm 形式
d: hh時mm分 形式
e: 式表示
f: 非表示
などの設定です。

(a3)〜(a7) 調べていません。


(a8) 文字のサイズ
2: 3/4サイズ
などの設定です。

(a9) 調べていません。

(a10) 文字の色
0: 白
1: 黒
2: 赤
3: 水色
4: 青
5: 黄色
6: ピンク
7: 緑
などの設定です。

(a11)〜(a15) 調べていません。

(a16) 日時の表示形式
1: 年以外を2桁ずつで表示
8: 年を4桁で表示
などの設定です。
論理和をとって設定できます。
例えば、9: 年は4桁、月日は2桁ずつで表示。


5. セル値の詳細


(a) 式と仮身以外


「”」で挟まれた文字列で表します。
例: 「”abc”」
文字列中に「”」や「\」(バックスラッシュ)が入っているときは その文字の前に「\」を入れる必要があります。

日時は 1900/01/01 00:00:00 GMT からの経過時間を1日を単位とした 実数の文字列として表します。
小数点以下10桁までを使っているようです。
例: 「”2.5000000000”」 これは 1900/01/03 12:00:00 GMT のことです。

私はシステム時間(1985/01/01 00:00:00 GMT からの秒数)からの変換に
システム時間/(24.0*60.0*60.0) + 31047.375
という式を使っています。
24.0*60.0*60.0 は1日の秒数
31037 は 1900/01/01 から 1985/01/01 までの日数
.375 は GMTと日本標準時のずれ(9時間)の日数
です。

百分率は100%を1とした実数の文字列として表します。

真偽値は「”TRUE”」と「”FALSE”」で表します。


「”」で閉じる前の文字列が言語第1面以外で終わった場合は第1面に 戻してから「”」で閉じることに注意してください。私はこれではまりました。

(b) 式


「”」で挟まずに計算結果数値に式を続けた文字列で表します。
例: 「5=[1,1]+[1,2]」
この例では計算結果数値が「5」、式が「=[1,1]+[1,2]」です。

(c) 仮身


セルに入れた仮身の仮身セグメントです。これも「”」では挟みません。


6. 列幅/行高さの設定


TAD補助レコードの説明 (d) に出てきた
2cd0:                                    0000
がデフォルトの列幅と異なる列の数です。
その列数分だけ列番号と列幅(ピクセル単位)を続けて並べます。

例えば、5列目と6列目の合わせて2列の幅をそれぞれ90と76に設定する場合は
0002 0005 005a 0006 004c
となります。

その次の
2ce0: 0000
がデフォルトの行高さと異なる行の数です。

列のときと同様にその行数分だけ行番号と行高さ(ピクセル単位)を続けて並べます。

列の数
2cd0:                                    0000
は256列目のデフォルトフォント情報の最後の2バイトにかかって いるので注意してください。
この理由をどう解釈していいのかわかりません。