| シンボリックリンク(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⟩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オプション 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フィールドは必ず存在する必要があります。オプション
- 次のフィールドのうち少なくとも 1 つが存在する必要があります:
C、、、、、、、、、、、、または。DEGHKPRWXY - フィールド
XとYフィールドはセル形式を定義し、Rフィールドはデフォルトの行形式を定義し、Cフィールドはデフォルトのセル形式を定義し、Dフィールドはデフォルトのスプレッドシート形式を設定します。 ID記録- スプレッドシートの種類と作成者を識別するために使用されるヘッダーレコード。ファイルの最初のレコードである必要があります。サポートされているフィールド:
分野 名前 説明 使用 E存在する場合、 NEレコードは冗長であると見なされます。オプション N存在する場合、ファイルは N-field スタイルのセルの保護を使用し、存在しない場合はP-field スタイルのセルの保護を使用します。オプション Pプログラム ファイルの作成者。以下が含まれ ます。 CL、Microsoft Excelの場合、MP、Multiplan(Microsoft)用- または価値がない。
必須
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フォントサイズ フォーマットのフォントサイズ(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 の構文は次の場所にあります。
- Microsoft SYLK の概要( SYLK ファイル形式の悪用に関する記事も参照してください。役立つ情報がいくつかあります)
- GFF 形式の概要: Microsoft SYLK
そして:
Excel での読み取りと保存に関する制限:
参考文献
- ^ 「LibreOffice Calc - サポートされているファイル形式」。2016年11月12日。
- ^ a b Stan Hegt (2019年10月30日). 「SYLKファイル形式の悪用」 . outflank.nl . 2019年12月14日閲覧。
- ^ "「SYLK: ファイルを開くと「ファイル形式が無効です」というエラーメッセージが表示される」。2015年8月18日閲覧。
- ^ 「Excel CSVインポートでSYLKファイル形式エラーが返される」 2012年1月9日. 2015年8月18日閲覧。
- ^ a b「Excel: SYLKファイル形式の追加のPレコードフィールド」。Microsoft KnowledgeBaseアーカイブ。1997年11月2日。 2025年3月10日閲覧。
- ^ a b French, Ted (2019年7月8日). 「Excelのシリアル番号とシリアル日付」 Lifewire . 2025年3月9日閲覧。