シンボリックリンク(SYLK)

シンボリックリンク(SYLK)
ファイル名拡張子
.slk
インターネットメディアの種類アプリケーション/x-sylk
開発者マイクロソフト

シンボリックリンクSYLK)は、Microsoftのファイル形式で、主にアプリケーション間、特にスプレッドシート間でデータを交換するために用いられます。SYLKファイルには、通常、拡張子が付けられます。表示可能なANSI.slk文字のみで構成されているため、データベースなどの他のアプリケーションで簡単に作成・処理できます。

MicrosoftはSYLKの仕様を公開したことはありません。この形式の派生版は、 MultiplanMicrosoft ExcelMicrosoft WorksOpenOffice.orgLibreOffice [ 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マトリックス内?存在する場合、セルはマトリックス内にあり、フィールドKEフィールドは存在しない必要があります。オプション
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およびフィールドXYすべて指定しないでください。オプション
E数式を表示しますか?存在し、セルの値が式または数式によって定義されている場合は、その式または数式が値の代わりに表示されます。オプション
F形式セル、行、または列の書式は.の形式をとり、数値書式 (小数点区切り記号の後の小数点桁数) は次のいずれかになります。 ⟨ch1⟩⟨digits⟩⟨ch2⟩⟨ch1⟩⟨digits⟩
  • C、連続クロスセル表示形式。
  • D、デフォルトの数値形式。
  • E、科学的記数法または指数形式。
  • F、固定小数点形式。
  • G、一般的な数値形式。
  • $、ドル形式。数値の前にドル記号 ( $) が付き、小数点以下 2 桁を使用します。
  • *、棒グラフ形式、単位ごとに 1 つのアスタリスクが付きます (例: 5) *****
  • または%、パーセンテージ形式。

⟨ch2⟩テキストの配置であり、次のいずれかになります。

  • C、中央揃え。
  • D、デフォルトの配置。
  • G一般的な配置(テキストの場合は左揃え、数字の場合は右揃え)
  • L、左揃え。
  • R、右揃え。
  • X、 埋める;
  • そして-、無視されます。
オプション
Gグリッド線を表示しますか?ファイル全体に存在しない場合は、デフォルトのグリッド線が表示されます。オプション
Hヘッダーを表示しますか?ファイル全体に存在しない場合は、列ヘッダーと行ヘッダーが表示されます。オプション
Kカンマを表示しますか?存在し、セルに数値がある場合は、グループ区切り文字(カンマ) が表示されます。オプション
Nフォントフォーム内のセル、列、または行のフォント: 。⟨fontId⟩⟨size⟩オプション
Pインデックス番号形式Excel形式のインデックス付きセル数値書式。使用するレコードに対応する0から始まるインデックスP番号。例えば、4番目のP3レコードで定義された数値書式を選択します。Pオプション
R1 インデックスの行番号。存在する場合、、、、、、、、、CおよびフィールドEはすべて存在せず、、、、または の 1 つ以上のフィールドも存在する必要がありGます。HKNWXYPFSオプション
Sスタイルセル、行、列、またはスプレッドシートのテキスト書式、セルの境界線、背景を表す文字のリスト。以下の文字が使用されます。
  • B、下のグリッド線用。
  • D太字の場合
  • Iイタリック体の場合
  • L、左のグリッド線の場合
  • R、右のグリッド線の場合
  • S、陰影付きの背景用。
  • およびT、上部のグリッド ライン。
オプション
W列幅の形式で列の範囲の幅を設定します。ここで、とは1インデックスの列番号、 は文字数での列の幅です。⟨col1⟩⟨col2⟩⟨width⟩⟨col1⟩⟨col2⟩⟨width⟩オプション
Xセル列1 インデックスのセルの列番号。存在する場合、フィールドがY存在する必要がありC、、、、、、、およびフィールドがすべて存在しない必要があり、さらに、、、またはのフィールドのうち 1 つ以上が存在する必要があります。EGHKNRWPFSオプション
Yセル行1 インデックスのセルの行番号。存在する場合、Xフィールドは必ず存在する必要があります。オプション
次のフィールドのうち少なくとも 1 つが存在する必要があります: C、、、、、、、、、、、、または。DEGHKPRWXY
フィールドXYフィールドはセル形式を定義し、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 レコードでの完了テスト。オプション
EFマクロシート。これは、レコード内のフィールドまたは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フォントサイズフォーマットのフォントサイズ(120ポイント単位) オプション
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 での読み取りと保存に関する制限:

参考文献

  1. ^ 「LibreOffice Calc - サポートされているファイル形式」。2016年11月12日。
  2. ^ a b Stan Hegt (2019年10月30日). 「SYLKファイル形式の悪用」 . outflank.nl . 2019年12月14日閲覧。
  3. ^ "「SYLK: ファイルを開くと「ファイル形式が無効です」というエラーメッセージが表示される」。2015年8月18日閲覧。
  4. ^ 「Excel CSVインポートでSYLKファイル形式エラーが返される」 2012年1月9日. 2015年8月18日閲覧
  5. ^ a b「Excel: SYLKファイル形式の追加のPレコードフィールド」。Microsoft KnowledgeBaseアーカイブ。1997年11月2日。 2025年3月10日閲覧
  6. ^ a b French, Ted (2019年7月8日). 「Excelのシリアル番号とシリアル日付」 Lifewire . 2025年3月9日閲覧