| シンボリックリンク(SYLK) | |
|---|---|
| ファイル名拡張子 | .slk |
| インターネットメディアの種類 | アプリケーション/x-sylk |
| 開発者 | マイクロソフト |
シンボリックリンク(SYLK)は、Microsoftのファイル形式で、主にアプリケーション間、特にスプレッドシート間でデータを交換するために用いられます。SYLKファイルには、通常、拡張子が付けられます。表示可能なANSI.slk文字のみで構成されているため、データベースなどの他のアプリケーションで簡単に作成・処理できます。
MicrosoftはSYLKの仕様を公開したことはありません。この形式の派生版は、 Multiplan、Microsoft Excel、Microsoft Works、OpenOffice.org、LibreOffice [ 1 ]、Gnumericでサポートされています。この形式は1980年代に導入され、1986年以降進化していません。[ 2 ]
SYLKファイルでよく見られる(そして偽の)「発生」は、カンマ区切り値(CSV)形式が引用符で囲まれていない最初のフィールド名「ID」で保存された場合に発生します。つまり、最初の2文字がSYLKファイル形式の最初の2文字と一致します。この場合、Microsoft Excel(少なくともOffice 2016まで)は、ファイル形式に関する誤解を招くエラーメッセージを表示します。例えば、「開こうとしているファイル「x.csv」は、ファイル拡張子で指定された形式と異なります…」などです。[ 3 ] [ 4 ]
SYLKは、攻撃者が任意のコードを実行できるようにし、CSVファイルの一見無害なファイル形式に攻撃ベクトルを偽装する機会を提供し、Microsoft Excelの最近のバージョン(2016年)でもデフォルトで有効になっているため、セキュリティ上の問題を引き起こすことが知られています。[ 2 ]
SYLKはUnicodeをサポートしていません。Unicodeをサポートするアプリケーション(Microsoft Excelなど)でSYLKファイルを作成した場合でも、SYLKファイルはUnicodeではなく、現在のシステムのANSIコードページでエンコードされます。アプリケーションに、Unicodeで表示可能だが現在のシステムのコードページにコードポイントがない文字が含まれていた場合、SYLKファイルでは疑問符('?')に変換されます。
SYLKではセミコロンはフィールド区切り文字として扱われるため、データ値ではエスケープせずに使用することはできません。SYLKファイル内の文字列にセミコロン(;)が含まれる場合は、先頭にもう1つセミコロンを追加する必要があります。文字列は例えば「WIDGET;;AXC1254」のようになります。MS Excelはインポート時に最初のセミコロンを削除し、データ要素は「WIDGET;AXC1254」のように表示されます。
SYLK入力ファイルの各行は260文字以内である必要があります。260文字を超える場合、Microsoft Excelはエラーメッセージを表示し、長すぎる行の読み込みをスキップします。
以下はサンプル SYLK ファイルの内容です。
ID;P C;Y1;X1;K「1行目」 C;Y2;X1;K「2行目」 C;Y3;X1;K"合計" C;Y1;X2;K11 C;Y2;X2;K22 C;Y3;X2;K0;ER1C2+R2C2 E
このファイルは、SYLK をサポートするスプレッドシート アプリケーションで読み取ると、次のように表示されます。
| 1行目 | 11 |
| 2行目 | 22 |
| 合計 | 33 |
SYLK ファイルは、セミコロンで区切られたフィールドのリストを持つ一連のレコードで構成されます。このファイルでは、IDレコード (具体的にはID;ファイル先頭の ) はマジック ナンバーとして機能し、すべての SYLK ファイルはIDレコードで始まる必要があるため、ファイルが SYLK ファイルであることを示します。P値のないフィールドは、ファイルがMicrosoft ExcelまたはMicrosoftの古いスプレッドシート アプリケーションMultiplanで生成されていないことを示します。各Cレコードは、スプレッドシートのセルにある 1 つのセル(およびフィールド(X,Y)の値) について説明します。フィールドは各セルの生の値を定義します。テキストの文字列は引用符で囲みます。それ以外の場合、値は引用符なしでリストされます。日付と時刻は、設定されたエポックからの整数および小数日数として内部的に格納され、カスタム セル書式設定オプションを使用してそれに応じて表示されます。フィールドは、セルの値が式 (ここでは、より一般的な数式 に相当) の値になることを定義します。最後に、レコード はファイルの終わりを示します。これはファイル内の最後のレコードである必要があります。 XYKE=B1+B2E
レコードFはセルにスタイルを定義して適用するために使用され、Pフォント情報とともに共通の数値書式を定義するためにも使用できます。例:
ID;P P;P一般 P;P_(* #,##0_);;_(* \-#,##0_);;_(* "-"_);;_(@_) P;P_(* #,##0.00_);;_(* \(#,##0.00\);;_(* "-"??_);;_(@_) P;P_("$"* #,##0.00_);;_("$"* \(#,##0.00\);;_("$"* "-"??_);;_(@_) C;Y1;X1;K「1行目」 C;Y2;X1;K「2行目」 C;Y3;X1;K"合計" C;Y1;X2;K11 C;Y2;X2;K22 C;Y3;X2;K0;ER1C2+R2C2 F;P2;C2 E 次のように表示されます。
| 1行目 | 11時00分 |
| 2行目 | 22.00 |
| 合計 | 33.00 |
レコードFのフィールドは、 3番目(最後から2番目)P2のレコードの数値書式が使用されていることを示しており、レコードのフィールドはその書式を2番目の列に適用しています。レコードのインデックスは0から始まり、列と行は1から始まり、インデックスは1から始まり、この例では以下の数値書式が定義されています。 PC2P
P0一般的な数値形式では、ファイルにリストされているとおりに数値が表示されます。P1、千単位の区切りと小数点なしの数値形式。P2P1(2列目に適用)、小数点2桁の数値形式と同じ。P3と同じ数値形式ですP2が、先頭にドル記号が付きます。Wレコードのフィールドは、F列のグループの幅を文字数で定義します。例えば、レコードF;W1 1 20と列は、F;W2 2 30スプレッドシートの最初の2列の幅をそれぞれ20文字と30文字に設定します。同様に、レコードはF;W1 5 5最初の5列の幅をそれぞれ5文字に設定します。
FレコードのフィールドはF、セル、列、行、またはスプレッドシートの数値書式とテキスト配置の両方を定義します。Pレコードとは異なり、このフィールドは基本的な数値書式セットのみをサポートします。例えば、F;FD3Cレコードではデフォルトの数値書式(3桁の数字と中央揃えのテキスト)が使用されます。
次の SYLK ファイル:
ID;P P;P一般 C;Y1;X1;K「1行目左揃え」 F;P0;FG0L C;Y2;X1;K「2行目右揃え」 F;P0;FG0R C;Y3;X1;K「センターの合計」 F;P0;FG0C C;Y1;X2;K11 C;Y2;X2;K22 C;Y3;X2;K0;ER1C2+R2C2 F;Y1;X2;FF2L F;Y2;X2;FF2R F;Y3;X2;F$2C F;W1 2 25 E
次のように、不正な列幅を無視してレンダリングされます。
| 1行目左揃え | 11時00分 |
| 2行目右揃え | 22.00 |
| センターの合計 | 33.00ドル |
レコードPは、数値書式に加えてフォント情報も保存できます。レコードが適用されたセルは、Cambriaフォント()、12ポイントフォント(:フィールドの値を20で割った値がポイント単位のフォントサイズ)、太字()、緑( )P;FCambria;M240;SB;L4で表示されます。[ 5 ]FCambria M240MSBL4
SYLK ファイルの基本構文は以下のとおりです ( ABNF構文)。
SYLKファイル= 1* (レコード)レコード=レコードタイプ* ( ";"フィールド) LF有効なレコード タイプとその有効なフィールドのリストを以下に示します。
B記録CおよびFレコードの前に記述することをお勧めします。サポートされているフィールド:| 分野 | 名前 | 説明 | 使用 |
|---|---|---|---|
X | 列 | スプレッドシートの列数 | 必須 |
Y | 行 | スプレッドシートの行数 | 必須 |
C記録| 分野 | 名前 | 説明 | 使用 |
|---|---|---|---|
C | 列参照 | 列番号で別のセルを参照します。 | オプション |
D | 共有式を定義します。このフィールドが存在する場合、Eフィールドも存在する必要があります。 | オプション | |
E | 表現 | セルの値と同じ値を持つ式または数式 | オプション |
G | 共有値を定義します。このフィールドが存在する場合、Eフィールドは存在せず、Kフィールドは存在する必要があります。 | オプション | |
H | 隠れた | 存在する場合、セルは非表示になります。 | オプション |
I | マトリックス内? | 存在する場合、セルはマトリックス内にあり、フィールドKとEフィールドは存在しない必要があります。 | オプション |
K | 価値 | セルの値と同じ値を持つフィールド | オプション |
M | 行列式 | (X,Y)セルからセルへの行列式(C,R)。このフィールドが存在する場合、Eフィールドは存在しない必要があります。 | オプション |
N | 保護されていない? | このフィールドが存在する場合、またはレコード内にこのNフィールドがID存在する場合、セルは保護されません。IDレコードにこのフィールドが含まれていないN場合、このフィールドは存在しない必要があります。 | オプション |
P | 保護されていますか? | このフィールドが存在する場合、またはレコード内にNフィールドが存在しないID場合、セルは保護されます。IDレコード内にこのNフィールドが存在する場合、このフィールドは存在しない必要があります。 | オプション |
R | 行参照 | 行番号で別のセルを参照します。 | オプション |
S | 共有参照 | 共有値(Gフィールド)または式(Dフィールド)を参照します。存在する場合D、、、、、およびフィールドはすべて存在せず、およびフィールドが存在する必要があります。これは、およびフィールドがE、共有値または式のコピー元の行と列を定義するためです。GKMRCRC | オプション |
X | 列位置 | セルの1インデックス列番号 | 必須 |
Y | 行位置 | セルの行番号(1から始まるインデックス)。このフィールドが省略された場合は、最後に定義されたYフィールドの値が代わりに使用されます。 | オプション |
E記録F記録P、それらのレコードで記述された書式(またはFレコード自体で記述されたフィールド)をスプレッドシート全体、または単一のセル、列、行に適用します。サポートされているフィールド:| 分野 | 名前 | 説明 | 使用 |
|---|---|---|---|
C | カラム | 1 インデックスの列番号。存在する場合、、、、、、、、、EおよびフィールドGはすべて存在せず、、、、またはのフィールドのうち 1 つ以上が存在する必要がありHます。KNRWXYPFS | オプション |
D | デフォルトの形式 | デフォルトの書式を指定します。形式はF下記のフィールドとほぼ同じです。唯一の違いは、D数値書式とセル配置の指定子がこのフィールドでは無効であることです。このフィールドが存在する場合C、、、、RおよびフィールドXはYすべて指定しないでください。 | オプション |
E | 数式を表示しますか? | 存在し、セルの値が式または数式によって定義されている場合は、その式または数式が値の代わりに表示されます。 | オプション |
F | 形式 | セル、行、または列の書式は.の形式をとり、数値書式 (小数点区切り記号の後の小数点桁数) は次のいずれかになります。 ⟨ch1⟩⟨digits⟩⟨ch2⟩⟨ch1⟩⟨digits⟩
は
| オプション |
G | グリッド線を表示しますか? | ファイル全体に存在しない場合は、デフォルトのグリッド線が表示されます。 | オプション |
H | ヘッダーを表示しますか? | ファイル全体に存在しない場合は、列ヘッダーと行ヘッダーが表示されます。 | オプション |
K | カンマを表示しますか? | 存在し、セルに数値がある場合は、グループ区切り文字(カンマ) が表示されます。 | オプション |
N | フォント | フォーム内のセル、列、または行のフォント: 。⟨fontId⟩⟨size⟩ | オプション |
P | インデックス番号形式 | Excel形式のインデックス付きセル数値書式。使用するレコードに対応する0から始まるインデックスP番号。例えば、4番目のP3レコードで定義された数値書式を選択します。P | オプション |
R | 行 | 1 インデックスの行番号。存在する場合、、、、、、、、、CおよびフィールドEはすべて存在せず、、、、または の 1 つ以上のフィールドも存在する必要がありGます。HKNWXYPFS | オプション |
S | スタイル | セル、行、列、またはスプレッドシートのテキスト書式、セルの境界線、背景を表す文字のリスト。以下の文字が使用されます。 | オプション |
W | 列幅 | の形式で列の範囲の幅を設定します。ここで、とは1インデックスの列番号、 は文字数での列の幅です。⟨col1⟩⟨col2⟩⟨width⟩⟨col1⟩⟨col2⟩⟨width⟩ | オプション |
X | セル列 | 1 インデックスのセルの列番号。存在する場合、フィールドがY存在する必要がありC、、、、、、、およびフィールドがすべて存在しない必要があり、さらに、、、またはのフィールドのうち 1 つ以上が存在する必要があります。EGHKNRWPFS | オプション |
Y | セル行 | 1 インデックスのセルの行番号。存在する場合、Xフィールドは必ず存在する必要があります。 | オプション |
C、、、、、、、、、、、、または。DEGHKPRWXYXとYフィールドはセル形式を定義し、Rフィールドはデフォルトの行形式を定義し、Cフィールドはデフォルトのセル形式を定義し、Dフィールドはデフォルトのスプレッドシート形式を設定します。ID記録| 分野 | 名前 | 説明 | 使用 |
|---|---|---|---|
E | 存在する場合、NEレコードは冗長であると見なされます。 | オプション | |
N | 存在する場合、ファイルはN-field スタイルのセルの保護を使用し、存在しない場合はP-field スタイルのセルの保護を使用します。 | オプション | |
P | プログラム | ファイルの作成者。以下が含まれ ます。
| 必須 |
NE記録NUレコードの後に配置する必要があります。サポートされるフィールド:| 分野 | 名前 | 説明 | 使用 |
|---|---|---|---|
E | 行き先 | 外部データをリンクするためのスプレッドシート上のターゲット領域を定義する式 | 必須 |
F | ファイル | 外部データを含むファイルの名前 | 必須 |
S | ソース | データがリンクされる外部スプレッドシート上のソース領域を定義する式 | 必須 |
NL記録NN記録NNその名前が最初に使用される前に定義しておくと効率的です。サポートされているフィールド:| 分野 | 名前 | 説明 | 使用 |
|---|---|---|---|
E | 表現 | 名前付き関数、マクロ、または式の値を記述する式。 | 必須 |
F | 存在する場合、名前付き式を関数として使用できます。 | オプション | |
G | コマンドキーエイリアスを持つ実行可能な名前付きマクロを示す形式の値を持つフィールド。このフィールドが存在する場合、このフィールドは存在しない必要があります。⟨ch⟩⟨ch2⟩K | オプション | |
K | 未使用のコマンドエイリアスを含む通常の名前付き式を示す形式の値を持つフィールド。このフィールドが存在する場合、このフィールドは存在しない必要があります。⟨ch⟩⟨ch2⟩G | オプション | |
N | 名前 | 関数、マクロ、または式の名前。 | 必須 |
NU記録NEレコードの前にある、ファイル名の置換を記述するレコード。サポートされるフィールド:| 分野 | 名前 | 説明 | 使用 |
|---|---|---|---|
F | 新しいファイル | 新しいファイル名 | 必須 |
L | 古いファイル | 古いファイル名 | 必須 |
O記録| 分野 | 名前 | 説明 | 使用 |
|---|---|---|---|
C | 最も近い先行 C レコードでの完了テスト。 | オプション | |
E | Fマクロシート。これは、レコード内のフィールドまたはGフィールドが最初に出現する前NN、およびCマクロのみの関数を使用する最初のレコードの前に配置する必要があります。 | オプション | |
G | 存在する場合、値の反復と循環参照が許可されます。 の形式をとります。 は反復の最大回数、はステップテストであり、 より小さい場合は が存在します。⟨iter⟩⟨delta⟩⟨iter⟩⟨delta⟩ | オプション | |
L | 存在する場合、セル参照はA1-style を使用します。ただし、SYLK ファイル自体は、存在する場合でも、R1C1式の中で内部的に -style 参照を使用します。 | オプション | |
M | 存在する場合、セルは手動で再計算されます。存在しない場合は、自動的に再計算されます。 | オプション | |
P | シートは保護されていますか? | 存在する場合、シートは保護されています。 | オプション |
V | 基準日の値 | シリアル日付値の計算に使用される日付システムを示します。これは01900年日付システムまたは41904年日付システムのいずれかです。[ 6 ]詳細については、レコードリストの末尾を参照してください。 | オプション |
P記録[ 5 ]F。サポートされるフィールド:| 分野 | 名前 | 説明 | 使用 |
|---|---|---|---|
E | 拡張フォント定義 | 拡張フォント定義 | オプション |
F | フォント定義 | 通常のフォント定義 | オプション |
L | フォント色 | フォントの色。 | オプション |
M | フォントサイズ | フォーマットのフォントサイズ(1 ⁄ 20ポイント単位) | オプション |
P | フォーマット | Excelスタイルのセルの書式指定 | 必須 |
S | フォントスタイル | フォントのスタイル | オプション |
W記録日付と時刻の値は浮動小数点数として保存されます。整数部分は、1900 年 1 月 1 日 (レコードに値 のフィールドOがある場合、1900 年の日付システムが使用されていることを示します) または 1904 年 1 月 1 日 (代わりにこの値が の場合、1904 年の日付システムが使用されていることを示します) からの日数です。1904 年の日付システムは、2011 年より前の Macintosh システム上の Microsoft Excel の古いバージョンでのみ使用されます。[ 6 ]小数部分は、00:00 または 12:00 AM から経過した秒数を 86,400 (1 日の秒数) で割った値です。 V04
シリアル日付値をUnix時間に変換するには、25,569または24,109(それぞれUnixエポックである1970年1月1日から1900年1月1日までの日数)を減算し、86,400を掛けます。Unix時間からSYLK時間への変換は、逆の操作(86,400で割り、25,569または24,109を加算)で行うことができます。ただし、正しく表示するには、セルの書式設定を などのカスタム書式に設定する必要がありますP;Pdd/mm/yyyy\ hh:mm:ss。
Microsoft Excelでは、インポートしたSYLKファイルのセルの文字数が255文字に制限されています。LibreOfficeにはこの制限はありません。
SYLK の構文は次の場所にあります。
そして:
Excel での読み取りと保存に関する制限: