SYmbolic LinK (SYLK)
Encyclopedia
Symbolic Link is a Microsoft
file format typically used to exchange data between applications, specifically spreadsheets. SYLK files conventionally have a
characters, it can be easily created and processed by other applications, such as databases.
Microsoft does not publish a SYLK specification. Variants of the format are supported by Multiplan
, Microsoft Excel
, Microsoft Works
, OpenOffice.org
, and Gnumeric
.
Note that even if a SYLK file is created by an application that supports Unicode (for example Microsoft Excel), the SYLK file will be encoded in the current system's ANSI
code page, not in Unicode. If the application contained characters that were displayable in Unicode but have no codepoint in the current system's code page, they will be converted to question marks ('?') in the SYLK file.
Also note that if a character string in the SYLK file is to contain a semicolon then it should be prefixed with another semicolon so the string would appear as i.e.; "WIDGET#04;;AXC1254". MS Excel will strip the first semicolon on import and the data element will appear as "WIDGET#04;AXC1254". It appears that the semicolon acts as an escape character of sorts.
ID;P
C;Y1;X1;K"Row 1"
C;Y2;X1;K"Row 2"
C;Y3;X1;K"Total"
C;Y1;X2;K11
C;Y2;X2;K22
C;Y3;X2;K0;ER1C2+R2C2
E
would be displayed like this when read by an appropriate spreadsheet:
where P0 is for General, P1 is for no decimal, P2 is for 2 digits, P3 has leading $ sign with 2 decimal points as defined below.
ID;P
P;PGeneral
P;P_(* #,##0_);;_(* \-#,##0_);;_(* "-"_);;_(@_)
P;P_(* #,##0.00_);;_(* \(#,##0.00\);;_(* "-"??_);;_(@_)
P;P_("$"* #,##0.00_);;_("$"* \(#,##0.00\);;_("$"* "-"??_);;_(@_)
C;Y1;X1;K"Row 1"
C;Y2;X1;K"Row 2"
C;Y3;X1;K"Total"
C;Y1;X2;K11
C;Y2;X2;K22
C;Y3;X2;K0;ER1C2+R2C2
F;P2;C2
E
would be displayed like this when read by an appropriate spreadsheet:
For example : Adding these SYLK codes will adjust the column width of column 1 and 2 to 20 and 30 respectively.
< n > is the number of digits.
< c2 > is one of the following 1-character alignment codes:
D default
C center
G general(textleft, numbersright)
L left justify
R right justify
For Example : The following SYLK code demonstrates the cell formatting properties
Date and time are stored as a floating point value. The whole number part is a number of days from the Jan 1 1900 (if the O record contains the ;V0 directive, specifying 1900 as the starting point for calculations), the fraction is the number of seconds divided by 86400 (60*60*24, number of seconds in a day). Conversion to unix time can be done by subtracting the difference between Jan 1 1970 and Jan 1 1900 (25,569 days) and then multiplying by 86400; converting from unix time to SYLK datetime is done by dividing the value by 86400 and then adding 25569. The cell style has to be set to some date formatting value, e.g. P;Pdd/mm/yyyy\ hh:mm:ss to be displayed properly.
Excel has a limit of 255 characters in a cell. This limit is not present in LibreOffice.
Syntax for SYLK can be found at
and at
Microsoft
Microsoft Corporation is an American public multinational corporation headquartered in Redmond, Washington, USA that develops, manufactures, licenses, and supports a wide range of products and services predominantly related to computing through its various product divisions...
file format typically used to exchange data between applications, specifically spreadsheets. SYLK files conventionally have a
.slk
suffix. Composed of only displayable ANSIWindows code page
Windows code pages are sets of characters or code pages used in Microsoft Windows from the 1980s and 1990s...
characters, it can be easily created and processed by other applications, such as databases.
Microsoft does not publish a SYLK specification. Variants of the format are supported by Multiplan
MultiPlan
Multiplan was an early spreadsheet program developed by Microsoft. Known initially by the code name "EP" , it was introduced in 1982 as a competitor for VisiCalc....
, Microsoft Excel
Microsoft Excel
Microsoft Excel is a proprietary commercial spreadsheet application written and distributed by Microsoft for Microsoft Windows and Mac OS X. It features calculation, graphing tools, pivot tables, and a macro programming language called Visual Basic for Applications...
, Microsoft Works
Microsoft Works
Microsoft Works is an integrated package software that is produced by Microsoft. Works is smaller, less expensive, and has fewer features than Microsoft Office or other major office suites. Its core functionality includes a word processor, a spreadsheet and a database management system...
, OpenOffice.org
OpenOffice.org
OpenOffice.org, commonly known as OOo or OpenOffice, is an open-source application suite whose main components are for word processing, spreadsheets, presentations, graphics, and databases. OpenOffice is available for a number of different computer operating systems, is distributed as free software...
, and Gnumeric
Gnumeric
Gnumeric is a spreadsheet program that is part of the GNOME Free Software Desktop Project. Gnumeric version 1.0 was released December 31, 2001. Gnumeric is distributed as free software under the GNU GPL license; it is intended to replace proprietary and other spreadsheet programs such as Microsoft...
.
Note that even if a SYLK file is created by an application that supports Unicode (for example Microsoft Excel), the SYLK file will be encoded in the current system's ANSI
Windows code page
Windows code pages are sets of characters or code pages used in Microsoft Windows from the 1980s and 1990s...
code page, not in Unicode. If the application contained characters that were displayable in Unicode but have no codepoint in the current system's code page, they will be converted to question marks ('?') in the SYLK file.
Also note that if a character string in the SYLK file is to contain a semicolon then it should be prefixed with another semicolon so the string would appear as i.e.; "WIDGET#04;;AXC1254". MS Excel will strip the first semicolon on import and the data element will appear as "WIDGET#04;AXC1254". It appears that the semicolon acts as an escape character of sorts.
Sample SYLK code
As an example, the following SYLK code in a text file with the .slk extension:ID;P
C;Y1;X1;K"Row 1"
C;Y2;X1;K"Row 2"
C;Y3;X1;K"Total"
C;Y1;X2;K11
C;Y2;X2;K22
C;Y3;X2;K0;ER1C2+R2C2
E
would be displayed like this when read by an appropriate spreadsheet:
Row 1 | 11 |
Row 2 | 22 |
Total | 33 |
Sample SYLK code (for numeric formatting)
The formatting of 2 decimal digits is applied to Column 2 usingF;P2;C2
where P0 is for General, P1 is for no decimal, P2 is for 2 digits, P3 has leading $ sign with 2 decimal points as defined below.
ID;P
P;PGeneral
P;P_(* #,##0_);;_(* \-#,##0_);;_(* "-"_);;_(@_)
P;P_(* #,##0.00_);;_(* \(#,##0.00\);;_(* "-"??_);;_(@_)
P;P_("$"* #,##0.00_);;_("$"* \(#,##0.00\);;_("$"* "-"??_);;_(@_)
C;Y1;X1;K"Row 1"
C;Y2;X1;K"Row 2"
C;Y3;X1;K"Total"
C;Y1;X2;K11
C;Y2;X2;K22
C;Y3;X2;K0;ER1C2+R2C2
F;P2;C2
E
would be displayed like this when read by an appropriate spreadsheet:
Row 1 | 11.00 |
Row 2 | 22.00 |
Total | 33.00 |
Sample SYLK code (for column width)
F;W< n1 > [S] < n2 > [S] < n3 > defines the widths of a group of columns:
[S] is one space
< n1 > is the first column
< n2 > is the last column
< n3 > is the width of columns in number of characters
For example : Adding these SYLK codes will adjust the column width of column 1 and 2 to 20 and 30 respectively.
F;W1 1 20
F;W2 2 30
Sample SYLK code (cell formatting properties)
;F < cl > < n > < c2 >
< cl > is one of the following 1-character formatting codes:
D default
C continuous cross-cell display
E scientific exponentiation
F fixed decimal point
G general format
$ leading$and2decimal points
- bar graph, one asterisk per unit (5 would be *****)
< n > is the number of digits.
< c2 > is one of the following 1-character alignment codes:
D default
C center
G general(textleft, numbersright)
L left justify
R right justify
For Example : The following SYLK code demonstrates the cell formatting properties
ID;P
P;PGeneral
C;Y1;X1;K"Row 1 Left Justify"
F;P0;FG0L
C;Y2;X1;K"Row 2 Right Justify"
F;P0;FG0R
C;Y3;X1;K"Total at Center"
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
SYLK Syntax
SYLK_file ::=
Record +
Record ::=
RecordType Field* newline
ID record:
Use:
A header to identify spreadsheet type and creator.
Must be first record in the file.
Record type:
ID
Mandatory fields:
;P program
-- file creator
-- possible creators include:
-- MP (Multiplan)
-- XL (Excel)
Possible fields:
;N
-- If present, file uses ;N style cell protection
-- If absent, file uses ;P style cell protection
;E
-- If present, NE records are redundant
-- If absent, NE records are not redundant
B record
Use:
Tells number of rows and columns in the spreadsheet.
Recommended that it come before C and F records
Record type:
B
Mandatory fields:
;X columns
-- tells maximum number of columns
;Y rows
-- tells maximum number of rows
C record
Use:
Cell contents
Record type:
C
Mandatory fields:
;X column
-- column position (one based)
;Y row
-- row position (one based)
Possible fields:
;E expression
-- expression for the cell
;K value
-- value of the cell
;C column
-- column reference
;R row
-- row reference
;G
-- defines shared value
;D
-- defines shared expression
;S
-- references shared value or shared expression
;N
-- If present, the cell is not protected.
-- If absent and ;N is present in the ID record, cell is protected.
;P
-- If present, cell is protected.
-- If absent and ;N is absent in the ID record, cell is not protected.
;H
-- If present, cell is hidden.
-- If absent, cell is not hidden.
;M expression
-- matrix expression from (X,Y) to (C,R)
;I
-- inside a matrix
Compatible fields:
If ;G is present, ;E must be absent.
If ;G is present, ;K must be present.
If ;D is present, ;E must be present.
If ;S is present, ;E, ;K, ;G, ;D, and ;M must be absent.
If ;S is present, ;R and ;C must be present. (They define the row and column that the shared value/expression is copied from.)
If ;N is present in the ID record, ;P must be absent.
If ;N is absent from the ID record, ;N must be absent.
If ;M is present, ;E must be absent.
If ;I is present, ;K and ;E must be absent
P record
Use:
Cell format
If F records are present, precedes them.
Mandatory fields:
;P formatting
-- Excel style cell format specification
F record
Use:
Format
If P record(s) are present, follows them.
Possible fields:
;X column
-- column (one based)
;Y row
-- row (one based)
;C column
-- column (one based)
;R row
-- row (one based)
;F format
-- Cell/row/column format
-- The format of format is
-- ch1 digits ch2
-- ch1 is
-- D default
-- C currency
-- E exponent
-- F fixed
-- G general
-- $ dollar
-- * graph
-- % percent
-- digits is number of digits after decimal point
-- ch2 is alignment
-- D default
-- C center
-- G standard
-- L left
-- R right
-- - ignored
-- X fill
;D format
-- Default format.
-- The format of format is
-- ch1 digits ch2
-- ch1 is
-- C currency
-- E exponent
-- F fixed
-- G general
-- $ dollar
-- * graph
-- % percent
-- digits is number of digits after decimal point
-- ch2 is alignment
-- C center
-- G standard
-- L left
-- R right
-- - ignored
-- X fill
;E
-- show formulas
;K
-- show commas
;W col1 col2 width
-- set column widths
;N fontid size
-- font to use
;P index
-- Excel cell format, number of the P record (e.g. P0 means the first P record, which is usually declared as P;PGeneral
;S style
-- style
-- The following characters can be part of style
-- I italic
-- D bold
-- T gridline top
-- L gridline left
-- B gridline bottom
-- R gridline right
-- S shaded background
;H
-- If present, don't show row/column headers
-- If absent in the entire file, show row/column headers
;G
-- If present, don't show default gridlines
-- If absent in the entire file, show default gridlines
Compatible fields:
At least one of ;X, ;Y, ;C, ;R, ;D, ;E, ;K, ;W, ;P, ;H, or ;G must be present.
If ;X or ;Y is present, both ;X and ;Y must be present. (This sets cell format.)
If ;X is present, ;R, ;C, ;E, ;K, ;W, ;N, ;H, ;G must be absent.
If ;R is present, ;X, ;Y, ;C, ;E, ;K, ;W, ;N, ;H, ;G must be absent. (This sets default row format.)
If ;C is present, ;X, ;Y, ;R, ;E, ;K, ;W, ;N, ;H, ;G must be absent. (This sets default column format.)
If ;D is present, ;X, ;Y, ;R, ;C must be absent. (This sets default spreadsheet format.)
If ;X, ;Y, ;R, ;C are present, ;P and/or ;F and/or ;S must be present.
O record
Use:
Options
Possible fields:
;A iter delta
-- If present, allow value iteration
-- If absent, circular references are not allowed.
-- iter (maximum number of iterations)
-- delta (step test. If smaller, then finished.)
;C
-- completion test at nearest preceding C record
;P
-- sheet is protected
;L
-- use A1 mode references
-- Even if ;L is given R1C1 references are used in SYLK file expressions.
;M
-- If present, use manual recalculation.
-- If absent, use automatic recalculation.
;E
-- Macro sheet.
-- This should appear before the first appearance of a ;G or ;F field in a NN record.
-- This should appear before the first C record which uses a macro-only function.
;V value
-- value indicates the base date used for calculating serial date values
-- 0 01 January 1900
-- 4 01 January 1904
NU record
Use:
file name substitution
If NE record(s) are present, must precede them.
Mandatory fields:
;L filename
-- old filename
;F filename
-- new filename
NE record
Use:
external link
Mandatory fields:
;E expression
-- Target area on spreadsheet
;F filename
-- Source file
;S expression
-- Source area on external sheet
NN record
Use:
Defines names
More efficient if NN appears before name use.
Mandatory fields:
;N name
-- name
;E expression
-- expression describing value of name
Possible fields:
;G ch1 ch2
-- runable name (macro) with command key alias
;K ch1 ch2
-- ordinary name with unused comman aliases
;F
-- usable as a function
Compatible fields:
If ;G is present, ;K must be absent.
W record
Use:
Window definitions
NL record
Use:
Chart external link
E record
Use:
End of file.
Must be last record.
Date and time are stored as a floating point value. The whole number part is a number of days from the Jan 1 1900 (if the O record contains the ;V0 directive, specifying 1900 as the starting point for calculations), the fraction is the number of seconds divided by 86400 (60*60*24, number of seconds in a day). Conversion to unix time can be done by subtracting the difference between Jan 1 1970 and Jan 1 1900 (25,569 days) and then multiplying by 86400; converting from unix time to SYLK datetime is done by dividing the value by 86400 and then adding 25569. The cell style has to be set to some date formatting value, e.g. P;Pdd/mm/yyyy\ hh:mm:ss to be displayed properly.
Excel has a limit of 255 characters in a cell. This limit is not present in LibreOffice.
External links
Detailed examples can also be found at hereSyntax for SYLK can be found at
and at