diff --git a/.gitignore b/.gitignore index 0ed4589..dd85dc5 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,7 @@ tmp *.[xX][mM][lL] *.[xX][lL][mM][lL] *.[uU][oO][sS] -*.[wW][kKqQbB][S1234567890] +*.[wW][kKqQbB][sS1234567890] *.[qQ][pP][wW] *.[fF][mM][3tT] *.[bB][iI][fF][fF][23458] diff --git a/bits/27_csfutils.js b/bits/27_csfutils.js index d8781d8..885f109 100644 --- a/bits/27_csfutils.js +++ b/bits/27_csfutils.js @@ -108,6 +108,13 @@ function sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ { return { SheetNames: [n], Sheets: sheets }; } +function sheet_new(opts) { + var out = {}; + var o = opts || {}; + if(o.dense) out["!data"] = []; + return out; +} + function sheet_add_aoa(_ws/*:?Worksheet*/, data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ { var o = opts || {}; var dense = _ws ? (_ws["!data"] != null) : o.dense; diff --git a/bits/47_styxml.js b/bits/47_styxml.js index a5d2a1d..be10ce4 100644 --- a/bits/47_styxml.js +++ b/bits/47_styxml.js @@ -311,7 +311,7 @@ function parse_cellXfs(t, styles, opts) { case '': case '': case '': break; /* 18.8.45 xf CT_Xf */ - case '': + case '': case '': xf = y; delete xf[0]; for(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]]) @@ -325,7 +325,7 @@ function parse_cellXfs(t, styles, opts) { case '': break; /* 18.8.1 alignment CT_CellAlignment */ - case '': + case '': case '': var alignment = {}; if(y.vertical) alignment.vertical = y.vertical; if(y.horizontal) alignment.horizontal = y.horizontal; @@ -337,12 +337,12 @@ function parse_cellXfs(t, styles, opts) { case '': break; /* 18.8.33 protection CT_CellProtection */ - case '': break; case '': case '': break; /* note: sometimes mc:AlternateContent appears bare */ - case '': pass = true; break; case '': pass = false; break; /* 18.2.10 extLst CT_ExtensionList ? */ diff --git a/bits/90_utils.js b/bits/90_utils.js index 7891f58..231c375 100644 --- a/bits/90_utils.js +++ b/bits/90_utils.js @@ -297,9 +297,11 @@ function wb_sheet_idx(wb/*:Workbook*/, sh/*:number|string*/) { } else throw new Error("Cannot find sheet |" + sh + "|"); } -/* simple blank workbook object */ -function book_new()/*:Workbook*/ { - return { SheetNames: [], Sheets: {} }; +/* simple blank or single-sheet workbook object */ +function book_new(ws/*:?Worksheet*/, wsname/*:?string*/)/*:Workbook*/ { + var wb = { SheetNames: [], Sheets: {} }; + if(ws) book_append_sheet(wb, ws, wsname || "Sheet1"); + return wb; } /* add a worksheet to the end of a given workbook */ diff --git a/bits/95_api.js b/bits/95_api.js index f943e4e..b7b3614 100644 --- a/bits/95_api.js +++ b/bits/95_api.js @@ -9,6 +9,7 @@ var utils/*:any*/ = { decode_cell: decode_cell, decode_range: decode_range, format_cell: format_cell, + sheet_new: sheet_new, sheet_add_aoa: sheet_add_aoa, sheet_add_json: sheet_add_json, sheet_add_dom: sheet_add_dom, diff --git a/packages/xlsx-cli/README.md b/packages/xlsx-cli/README.md index 81e6a7d..380a24a 100644 --- a/packages/xlsx-cli/README.md +++ b/packages/xlsx-cli/README.md @@ -2,19 +2,52 @@ This is a standalone version of the CLI tool for [SheetJS](https://sheetjs.com). -For newer versions of node, the tool should be invoked with `npx`: +The main distribution point is + +### Modern NodeJS + +For newer versions of NodeJS, the tool should be invoked with `npx`: ```bash -$ npx xlsx-cli --help # help and usage info -$ npx xlsx-cli --xlsx test.csv # generates test.csv.xlsx from test.csv +$ npx -p https://cdn.sheetjs.com/xlsx-cli/xlsx-cli-1.1.4.tgz xlsx-cli --help # help and usage info +$ npx -p https://cdn.sheetjs.com/xlsx-cli/xlsx-cli-1.1.4.tgz xlsx-cli test.xlsx # print first worksheet in CSV format +$ npx -p https://cdn.sheetjs.com/xlsx-cli/xlsx-cli-1.1.4.tgz xlsx-cli --xlsx test.csv # generates test.csv.xlsx from test.csv ``` -For older versions of node, the tool should be installed globally: +No install step is required. `npx` will ask to install the module on first run. + +### Legacy NodeJS + +For older versions of NodeJS, the tool should be installed globally: ```bash -$ sudo npm install -g xlsx-cli # install globally (once) - -$ xlsx-cli --help # help and usage info -$ npx xlsx-cli --xlsx test.csv # generates test.csv.xlsx from test.csv +$ npm install -g https://cdn.sheetjs.com/xlsx-cli/xlsx-cli-1.1.4.tgz # install globally (once) ``` +If the global `node_modules` directory is owned by an administrator account, +the install should be run as the `root` user or administrator: + +```bash +$ sudo npm install -g https://cdn.sheetjs.com/xlsx-cli/xlsx-cli-1.1.4.tgz # install globally (once, if root permissions are required) +``` + +The module will configure the `xlsx-cli` command. + +```bash +$ xlsx-cli --help # help and usage info +$ npx xlsx-cli --xlsx test.csv # generates test.csv.xlsx from test.csv +``` + +## Usage + +`xlsx-cli --help` displays full usage information. + +By default, `xlsx-cli path/to/file` will parse the file and print CSV rows from +the first worksheet in the file. + +`xlsx-cli path/to/file ws_name` will use the second argument to determine the +worksheet from which rows are generated + +`xlsx-cli path/to/file --xlsx` will generate a XLSX workbook and save it to a +file whose name is determined by appending `.xlsx` to the name. For example, +`xlsx-cli input.xlsb --xlsx` will save the generated file to `input.xlsb.xlsx` diff --git a/packages/xlsx-cli/package.json b/packages/xlsx-cli/package.json index b624024..37047dd 100644 --- a/packages/xlsx-cli/package.json +++ b/packages/xlsx-cli/package.json @@ -1,6 +1,6 @@ { "name": "xlsx-cli", - "version": "1.1.3", + "version": "1.1.4", "author": "sheetjs", "description": "Command-line interface for SheetJS", "keywords": [ diff --git a/types/index.d.ts b/types/index.d.ts index aabdd4b..25b8d24 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -968,8 +968,11 @@ export interface XLSX$Utils { /* --- General Utilities --- */ - /** Creates a new workbook */ - book_new(): WorkBook; + /** Create a new workbook */ + book_new(ws?: WorkSheet, wsname?: string): WorkBook; + + /** Create a new worksheet */ + sheet_new(opts?: DenseOption): WorkSheet; /** Append a worksheet to a workbook, returns new worksheet name */ book_append_sheet(workbook: WorkBook, worksheet: WorkSheet, name?: string, roll?: boolean): string;