シンボリックリンク(SYLK)は、スプレッドシート間でデータを交換するために使用されていた、廃止された[ 1 ]マイクロソフトのファイル形式です。SYLKファイルには慣例的にサフィックスが付いています。表示可能なANSI文字のみで構成されているため、データベースなどの他のアプリケーションで簡単に作成および処理できます。.slk
Microsoft は SYLK 仕様を公開したことはありません。この形式のバリエーションは、 Multiplan、Microsoft Excel、Microsoft Works、OpenOffice.org、LibreOffice [ 2 ]、およびGnumericでサポートされています。この形式は 1980 年代に導入され、1986 年以降は進化していません。[ 3 ]
SYLK ファイルのよくある (そして誤った) 発生は、カンマ区切り値(CSV) 形式で最初のフィールド名が引用符なしで「ID」として保存された場合に起こります。つまり、最初の 2 文字が SYLK ファイル形式の最初の 2 文字と一致します。すると、Microsoft Excel (少なくとも Office 2016 まで) は、ファイルの形式に関する誤解を招くエラー メッセージを表示します。たとえば、「開こうとしているファイル 'x.csv' は、ファイル拡張子で指定されている形式と異なります...」などです。[ 4 ] [ 5 ]
SYLKは、攻撃者が任意のコードを実行できるようにし、CSVファイルの無害に見える外観の下に攻撃ベクトルを偽装する機会を提供するため、セキュリティ上の問題を引き起こすことが知られており、最近の(2016)バージョンのMicrosoft Excelでは依然としてデフォルトで有効になっています。[ 3 ]
SYLKはUnicodeをサポートしていません。Unicodeをサポートするアプリケーション(例えばMicrosoft Excel)でSYLKファイルが作成された場合でも、SYLKファイルはUnicodeではなく、現在のシステムのANSIコードページでエンコードされます。アプリケーションにUnicodeで表示可能な文字が含まれていても、現在のシステムのコードページにはコードポイントがない場合、SYLKファイルではそれらの文字は疑問符('?')に変換されます。
SYLKではセミコロンはフィールド区切り文字として扱われるため、データ値にエスケープせずに使用することはできません。SYLKファイル内の文字列にセミコロン(;)が含まれる場合は、文字列の前に別のセミコロンを付ける必要があります。例えば、「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をサポートする表計算ソフトで読み込むと、以下のように表示されます。
SYLK ファイルは、セミコロンで区切られたフィールドのリストを持つレコードのシーケンスで構成されます。このファイルでは、レコードID(具体的にはID;ファイルの先頭にある) がマジック ナンバーとして機能し、すべての SYLK ファイルはレコードで始まる必要があるため、ファイルが SYLK ファイルであることを識別しますID。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 以下のようにレンダリングされます。
レコードFのフィールドは、 3番目(最後から2番目)のレコードで使用されているP2数値形式を示し、その形式を2番目の列に適用します。レコードのインデックスは0から始まり、列と行は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
列幅の誤りを無視すると、以下のようにレンダリングされます。
レコードPは、数値形式に加えてフォント情報を格納するためにも使用できます。レコードが適用されたセルは、Cambriaフォント()、12ポイントフォント(:フィールドの値を20で割った値がポイント単位のフォントサイズ)、太字()、および緑色( )P;FCambria;M240;SB;L4を使用してレンダリングされます。[ 6 ]FCambria M240MSBL4
SYLKファイルの基本的な構文を以下に示します(ABNF構文)。
SYLKファイル= 1* (レコード)レコード=レコードタイプ* ( ";"フィールド) LF有効なレコードタイプとその有効なフィールドの一覧を以下に示します。
B記録CFC記録E記録F記録P、それらのレコードで記述されたフォーマット(またはレコード自体で記述されたフィールドF)をスプレッドシート全体、あるいは単一のセル、列、行に適用します。サポートされているフィールド:C、D、E、G、H、K、P、R、、。WXYXはYセルの書式を定義し、Rフィールドはデフォルトの行書式を定義し、Cフィールドはデフォルトのセル書式を定義し、Dフィールドはデフォルトのスプレッドシート書式を設定します。ID記録NE記録NUレコードの後に配置する必要があります。サポートされているフィールド:NL記録NN記録NNNU記録NE置換を記述する、他のすべてのレコードの前に配置されるレコード。サポートされているフィールド:O記録P記録[ 6 ]Fレコードの前に記述されます。サポートされているフィールド:W記録日付と時刻の値は浮動小数点数として格納されます。整数部分は、1900 年 1 月 1 日 (レコードにのフィールドがOあり、1900 年日付システムが使用されていることを示す場合) または 1904 年 1 月 1 日 (代わりにこの値が で、1904 年日付システムが使用されていることを示す場合) からの日数です。1904 年日付システムは、2011 年より前の Macintosh システム上の古いバージョンの Microsoft Excel でのみ使用されます。[ 7 ]小数部分は、午前 0 時または 12 時以降に経過した秒数を 86,400 (1 日の秒数) で割った値です。V04
シリアル日付値をUnix タイムに変換するには、25,569 または 24,109 ( Unix エポックである1970 年 1 月 1 日からそれぞれ 1900 年 1 月 1 日または 1904 年 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での読み取りと保存に関する制限事項: