From cfe4da2e5662e50b8fa4870382bc1281b0215547 Mon Sep 17 00:00:00 2001 From: SheetJS Date: Thu, 5 May 2022 02:27:25 -0400 Subject: [PATCH] clarify Multiplan DOS support --- .gitignore | 1 + .npmignore | 4 +++- README.md | 14 ++++++++------ bits/77_parsetab.js | 10 ++++++++++ bits/87_read.js | 5 +++++ docbits/85_filetype.md | 14 ++++++++------ misc/docs/README.md | 14 ++++++++------ 7 files changed, 43 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 03476cc..ed518b3 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ tmp *.[rR][tT][fF] *.[eE][tT][hH] *.[nN][uU][mM][bB][eE][rR][sS] +*.[mM][oO][dD] *.123 *.htm *.html diff --git a/.npmignore b/.npmignore index b3698ff..ba5e695 100644 --- a/.npmignore +++ b/.npmignore @@ -19,11 +19,12 @@ tmp *.[pP][dD][fF] *.[sS][lL][kK] *.socialcalc -*.[xX][lL][sSwWcCaAtTmM] +*.[xX][lL][sSwWcCaAtTmMrR] *.[xX][lL][sSaAtT][xXmMbB] *.[oO][dD][sS] *.[fF][oO][dD][sS] *.[xX][mM][lL] +*.[xX][lL][mM][lL] *.[uU][oO][sS] *.[wW][kKqQbB][S1234567890] *.[qQ][pP][wW] @@ -32,6 +33,7 @@ tmp *.[rR][tT][fF] *.[eE][tT][hH] *.[nN][uU][mM][bB][eE][rR][sS] +*.[mM][oO][dD] *.123 *.htm *.html diff --git a/README.md b/README.md index 59f0606..319b492 100644 --- a/README.md +++ b/README.md @@ -4061,7 +4061,7 @@ Despite the library name `xlsx`, it supports numerous spreadsheet file formats: | Excel 5.0/95 (XLS BIFF5) | ✔ | ✔ | | Excel 4.0 (XLS/XLW BIFF4) | ✔ | ✔ | | Excel 3.0 (XLS BIFF3) | ✔ | ✔ | -| Excel 2.0/2.1 (XLS BIFF2) | ✔ | ✔ | +| Excel 2.0/2.1 / Multiplan 4.x DOS (XLS BIFF2) | ✔ | ✔ | | **Excel Supported Text Formats** |:-----:|:-----:| | Delimiter-Separated Values (CSV/TXT) | ✔ | ✔ | | Data Interchange Format (DIF) | ✔ | ✔ | @@ -4126,6 +4126,11 @@ the concept of a workbook (`XLW` files) but also had single-sheet `XLS` format. The structure is largely similar to the Lotus 1-2-3 file formats. BIFF5/8/12 extended the format in various ways but largely stuck to the same record format. +Multiplan 4 "Normal" files are identical in structure to BIFF2 and use the same +cell value records. There are some different record types for more advanced +features like Print Settings. The BIFF2 writer generates files that can be read +in Multiplan 4 and the parser can extract values from "Normal" files. + There is no official specification for any of these formats. Excel 95 can write files in these formats, so record lengths and fields were determined by writing in all of the supported formats and comparing files. Excel 2016 can generate @@ -4252,11 +4257,8 @@ reader understands DBF Level 7 extensions like DATETIME. - **Symbolic Link (SYLK)** -There is no real documentation. All knowledge was gathered by saving files in -various versions of Excel to deduce the meaning of fields. Notes: - -- Plain formulae are stored in the RC form. -- Column widths are rounded to integral characters. + is an informal specification based on our +experimentation and previous documentation efforts. - **Lotus Formatted Text (PRN)** diff --git a/bits/77_parsetab.js b/bits/77_parsetab.js index 578204d..38232ce 100644 --- a/bits/77_parsetab.js +++ b/bits/77_parsetab.js @@ -1319,6 +1319,16 @@ var XLSRecordEnum = { /*::[*/0x08cb/*::]*/: { /* n:"CrtCoopt", */ }, /*::[*/0x08d6/*::]*/: { /* n:"FRTArchId$", */ r:12 }, + /* --- multiplan 4 records --- */ + /*::[*/0x0065/*::]*/: { /* n:"", */ }, // one per window + /*::[*/0x0066/*::]*/: { /* n:"", */ }, // calc settings + /*::[*/0x0069/*::]*/: { /* n:"", */ }, // print header + /*::[*/0x006a/*::]*/: { /* n:"", */ }, // print footer + /*::[*/0x006b/*::]*/: { /* n:"", */ }, // print settings + /*::[*/0x006d/*::]*/: { /* n:"", */ }, // one per window + /*::[*/0x0070/*::]*/: { /* n:"", */ }, // includes default col width + /*::[*/0x0072/*::]*/: { /* n:"", */ }, // includes selected cell + /*::[*/0x7262/*::]*/: {} }; diff --git a/bits/87_read.js b/bits/87_read.js index c55302e..a5773cd 100644 --- a/bits/87_read.js +++ b/bits/87_read.js @@ -107,6 +107,11 @@ function readSync(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ { case 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o); break; case 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o); case 0x89: if(n[1] === 0x50 && n[2] === 0x4E && n[3] === 0x47) throw new Error("PNG Image File is not a spreadsheet"); break; + case 0x08: if(n[1] === 0xE7) throw new Error("Unsupported Multiplan 1.x file!"); break; + case 0x0C: + if(n[1] === 0xEC) throw new Error("Unsupported Multiplan 2.x file!"); + if(n[1] === 0xED) throw new Error("Unsupported Multiplan 3.x file!"); + break; } if(DBF_SUPPORTED_VERSIONS.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o); return read_prn(data, d, o, str); diff --git a/docbits/85_filetype.md b/docbits/85_filetype.md index ffa265b..5f30dae 100644 --- a/docbits/85_filetype.md +++ b/docbits/85_filetype.md @@ -12,7 +12,7 @@ Despite the library name `xlsx`, it supports numerous spreadsheet file formats: | Excel 5.0/95 (XLS BIFF5) | ✔ | ✔ | | Excel 4.0 (XLS/XLW BIFF4) | ✔ | ✔ | | Excel 3.0 (XLS BIFF3) | ✔ | ✔ | -| Excel 2.0/2.1 (XLS BIFF2) | ✔ | ✔ | +| Excel 2.0/2.1 / Multiplan 4.x DOS (XLS BIFF2) | ✔ | ✔ | | **Excel Supported Text Formats** |:-----:|:-----:| | Delimiter-Separated Values (CSV/TXT) | ✔ | ✔ | | Data Interchange Format (DIF) | ✔ | ✔ | @@ -77,6 +77,11 @@ the concept of a workbook (`XLW` files) but also had single-sheet `XLS` format. The structure is largely similar to the Lotus 1-2-3 file formats. BIFF5/8/12 extended the format in various ways but largely stuck to the same record format. +Multiplan 4 "Normal" files are identical in structure to BIFF2 and use the same +cell value records. There are some different record types for more advanced +features like Print Settings. The BIFF2 writer generates files that can be read +in Multiplan 4 and the parser can extract values from "Normal" files. + There is no official specification for any of these formats. Excel 95 can write files in these formats, so record lengths and fields were determined by writing in all of the supported formats and comparing files. Excel 2016 can generate @@ -203,11 +208,8 @@ reader understands DBF Level 7 extensions like DATETIME. - **Symbolic Link (SYLK)** -There is no real documentation. All knowledge was gathered by saving files in -various versions of Excel to deduce the meaning of fields. Notes: - -- Plain formulae are stored in the RC form. -- Column widths are rounded to integral characters. + is an informal specification based on our +experimentation and previous documentation efforts. - **Lotus Formatted Text (PRN)** diff --git a/misc/docs/README.md b/misc/docs/README.md index fd57684..3c5e6c6 100644 --- a/misc/docs/README.md +++ b/misc/docs/README.md @@ -3836,7 +3836,7 @@ Despite the library name `xlsx`, it supports numerous spreadsheet file formats: | Excel 5.0/95 (XLS BIFF5) | ✔ | ✔ | | Excel 4.0 (XLS/XLW BIFF4) | ✔ | ✔ | | Excel 3.0 (XLS BIFF3) | ✔ | ✔ | -| Excel 2.0/2.1 (XLS BIFF2) | ✔ | ✔ | +| Excel 2.0/2.1 / Multiplan 4.x DOS (XLS BIFF2) | ✔ | ✔ | | **Excel Supported Text Formats** |:-----:|:-----:| | Delimiter-Separated Values (CSV/TXT) | ✔ | ✔ | | Data Interchange Format (DIF) | ✔ | ✔ | @@ -3899,6 +3899,11 @@ the concept of a workbook (`XLW` files) but also had single-sheet `XLS` format. The structure is largely similar to the Lotus 1-2-3 file formats. BIFF5/8/12 extended the format in various ways but largely stuck to the same record format. +Multiplan 4 "Normal" files are identical in structure to BIFF2 and use the same +cell value records. There are some different record types for more advanced +features like Print Settings. The BIFF2 writer generates files that can be read +in Multiplan 4 and the parser can extract values from "Normal" files. + There is no official specification for any of these formats. Excel 95 can write files in these formats, so record lengths and fields were determined by writing in all of the supported formats and comparing files. Excel 2016 can generate @@ -4025,11 +4030,8 @@ reader understands DBF Level 7 extensions like DATETIME. - **Symbolic Link (SYLK)** -There is no real documentation. All knowledge was gathered by saving files in -various versions of Excel to deduce the meaning of fields. Notes: - -- Plain formulae are stored in the RC form. -- Column widths are rounded to integral characters. + is an informal specification based on our +experimentation and previous documentation efforts. - **Lotus Formatted Text (PRN)**