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

シンボリックリンク(SYLK)
ファイル名拡張子
.slk
インターネットメディアタイプapplication/x-sylk
開発者Microsoft

シンボリックリンク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ファイルの一見無害なファイル形式に攻撃ベクトルを偽装する機会を提供すること、そして最近の(2016年)バージョンのMicrosoft Excelではデフォルトで有効になっていることなど、セキュリティ上の問題を引き起こすことが知られています。 [2]

制限事項

SYLKはUnicodeをサポートしていません。Unicodeをサポートするアプリケーション(Microsoft Excelなど)でSYLKファイルを作成した場合でも、SYLKファイルはUnicodeではなく、現在のシステムのANSIコードページでエンコードされます。アプリケーションにUnicodeで表示可能だが現在のシステムのコードページにコードポイントがない文字が含まれていた場合、SYLKファイルでは疑問符(「?」)に変換されます。

セミコロンはSYLKではフィールド区切り文字として扱われるため、データ値ではエスケープせずに使用することはできません。SYLKファイル内の文字列にセミコロン(;)を含める場合は、文字列が「WIDGET;;AXC1254」のように表示されるように、前に別のセミコロンを付ける必要があります。MS Excelはインポート時に最初のセミコロンを削除し、データ要素は「WIDGET;AXC1254」と表示されます

SYLK入力ファイルの各行は260文字以内である必要があります。そうでない場合、Microsoft Excelはエラーメッセージを表示し、長すぎる行の読み込みをスキップします。

説明

以下はサンプルSYLKファイルの内容です。

ID;PC;Y1;X1;K"1行目"C;Y2;X1;K"2行目"C;Y3;X1;K"合計"C;Y1;X2;K11C;Y2;X2;K22C;Y3;X2;K0;ER1C2+R2C2E

このファイルは、SYLKをサポートするスプレッドシートアプリケーションで読み込まれると、次のように表示されます。

行111
行222
合計33

SYLKファイルは、セミコロンで区切られたフィールドのリストを持つ一連のレコードで構成されています。このファイルでは、IDレコード(特にID;ファイル先頭の)はマジックナンバーとして機能し、すべてのSYLKファイルはレコードで始まる必要があるため、ファイルをSYLKファイルとして識別しますIDP値のないフィールドは、ファイルがMicrosoft ExcelまたはMicrosoftの古いスプレッドシートアプリケーションMultiplanによって生成されていないことを示します。各Cレコードは、スプレッドシートのセルにある1つのセル(フィールドとフィールド(X,Y)の値)を表します。フィールドは各セルの生の値を定義します。テキスト文字列は引用符で囲まれます。それ以外の場合、値は引用符なしでリストされます。日付と時刻は、設定されたエポックからの整数および小数日数として内部的に保存され、カスタムセル書式設定オプションを使用してそれに応じて表示されます。フィールドは、セルの値を式の値(ここでは、より一般的な数式に相当)として定義します。最後に、レコードはファイルの終わりを示します。これはファイル内の最後のレコードである必要があります。XYKE=B1+B2E

書式設定

レコードFは、セルにスタイルを定義して適用するために使用されP、フォント情報とともに共通の数値書式を定義するために使用できます。例:

ID;PP;PGeneralP;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;K11C;Y2;X2;K22C;Y3;X2;K0;ER1C2+R2C2F;P2;C2E

は次のように表示されます。

行111.00
行222.00
合計33.00

レコードFのフィールドは、 3番目で最後から2番目のレコードP2の数値書式が使用されていることを示しており、レコードのフィールドはその書式を2番目の列に適用します。レコードのインデックスは0から始まり、列と行は1から始まり、1から始まり、次の数値書式が定義されています。PC2P

  • P0:一般的な数値書式。ファイルにリストされているとおりに数値を表示します。
  • P1:千単位の区切りを使用し、小数点以下のない数値書式。
  • P2(2列目に適用):と同じ数値書式ですが、P1小数点以下の桁数が2です。
  • P3:と同じ数値書式ですが、P2先頭にドル記号が付きます

WレコードのフィールドF、列のグループの幅を文字数で定義します。たとえば、レコードはF;W1 1 20F;W2 2 30スプレッドシートの最初の2列の幅をそれぞれ20文字と30文字に設定します。同様に、レコードF;W1 5 5は最初の5列の幅をそれぞれ5文字に設定します。

FレコードのフィールドはFセル、列、行、またはスプレッドシートの数値書式とテキスト配置の両方を定義します。Pレコードとは異なり、このフィールドは基本的な数値書式セットのみをサポートします。例として、F;FD3Cレコードは3桁の数字と中央揃えのテキストのデフォルトの数値書式を使用します。

次のSYLKファイル:

ID;PP;PGeneralC;Y1;X1;K「行1 左揃え」F;P0;FG0LC;Y2;X1;K「行2 右揃え」F;P0;FG0RC;Y3;X1;K「中央揃え合計」F;P0;FG0CC;Y1;X2;K11C;Y2;X2;K22C;Y3;X2;K0;ER1C2+R2C2F;Y1;X2;FF2LF;Y2;X2;FF2RF;Y3;X2;F$2CF;W1 2 25E

誤った列幅は無視され、次のように表示されます。

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レコード
スプレッドシートの行数と列数を示すために使用されるレコード。レコードの前に置くことが推奨されています推奨は誰ですか?。サポートされているフィールド:CF
フィールド名前説明使用
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、、、、、およびフィールドはすべて存在せず、およびフィールドが存在する必要あります。これは、およびフィールドが、共有値または式のコピー元の行と列を定義するためですEGKMRCRC任意
X列位置セルの1インデックスの列番号必須
Y行位置セルの1インデックスの行番号。このフィールドが省略されている場合は、最後に定義されたYフィールドの値が使用されます。任意
Eレコード
ファイルの終わりを示すレコード。ファイルの最後のレコードである必要があります。
Fレコード
任意のレコードに続くレコードでP、それらのレコード(またはレコード自体で記述されたフィールド)で記述された書式をFスプレッドシート全体、または単一のセル、列、または行に適用します。サポートされているフィールド:
フィールド名前説明使用
C1インデックスの列番号。存在する場合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、、、、、、、、フィールドすべて存在せず、次のフィールドの1つ以上も存在している必要があります:、、またはEGHKNWXYPFS任意
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フィールド形式のセル保護を使用し、そうでない場合はPフィールド形式のセル保護を使用します。任意
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マクロシート。[説明が必要]これは、レコード内のフィールドまたはフィールドが最初に出現する前、およびマクロのみの機能を使用する最初のレコードの前に出現する必要があります。 [誰によると? ]FGNNC任意
G存在する場合、値の反復と循環参照を許可します。 の形式を取ります。は反復の最大回数、 はステップテストであり、これより小さい場合は存在します。[説明が必要]⟨iter⟩ ⟨delta⟩⟨iter⟩⟨delta⟩任意
L存在する場合、セル参照はA1スタイルを使用します。ただし、SYLKファイル自体は、存在する場合でも、R1C1式の中で内部的に スタイルの参照を使用します。任意
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の構文は次の場所にあります

  • Microsoft SYLKの概要(役立つ情報については、「SYLKファイル形式の悪用」の記事もご覧ください)
  • GFF形式の概要:Microsoft SYLK

および以下を参照:

  • comp.apps.spreadsheets FAQ
  • Excelのヒント:Unixの日付タイムスタンプの変換

Excelでの読み込みと保存に関する制限:

  • Microsoft.com Excelの機能

参考文献

  1. ^ 「LibreOffice Calc - サポートされているファイル形式」。2016年11月12日
  2. ^ ab 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. ^ 「Excel:SYLKファイル形式の追加のPレコードフィールド」。Microsoft KnowledgeBaseアーカイブ。1997年11月2日。 2025年3月10日閲覧
  6. ^ French, Ted (2019年7月8日).「Excelのシリアル番号とシリアル日付」。Lifewire 2025年3月9日閲覧。
Retrieved from "https://en.wikipedia.org/w/index.php?title=Symbolic_Link_(SYLK)&oldid=1312230705"