forked from sheetjs/sheetjs
		
	version bump 0.18.6
This commit is contained in:
		
							parent
							
								
									b1dca24a0b
								
							
						
					
					
						commit
						ed18acd63d
					
				@ -119,6 +119,7 @@ utils
 | 
			
		||||
commonjs
 | 
			
		||||
async
 | 
			
		||||
uncheck
 | 
			
		||||
vendoring
 | 
			
		||||
 | 
			
		||||
 - demos/altjs/README.md
 | 
			
		||||
ChakraCore
 | 
			
		||||
 | 
			
		||||
@ -4,6 +4,12 @@ This log is intended to keep track of backwards-incompatible changes, including
 | 
			
		||||
but not limited to API changes and file location changes.  Minor behavioral
 | 
			
		||||
changes may not be included if they are not expected to break existing code.
 | 
			
		||||
 | 
			
		||||
## v0.18.6
 | 
			
		||||
 | 
			
		||||
* Removed all npm dependencies
 | 
			
		||||
* Auto-correct bad Google Sheets format `d.m`
 | 
			
		||||
* NUMBERS write merge cells, cells up to column "ALL"
 | 
			
		||||
 | 
			
		||||
## v0.18.5
 | 
			
		||||
 | 
			
		||||
* Enabled `sideEffects: false` in package.json
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										57
									
								
								README.md
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										57
									
								
								README.md
									
									
									
									
									
								
							@ -119,7 +119,7 @@ port calculations to web apps; automate common spreadsheet tasks, and much more!
 | 
			
		||||
**Standalone Browser Scripts**
 | 
			
		||||
 | 
			
		||||
The complete browser standalone build is saved to `dist/xlsx.full.min.js` and
 | 
			
		||||
can be directly added to a page with a `script` tag:
 | 
			
		||||
can be directly added to a page with a `<script>` tag:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<script lang="javascript" src="dist/xlsx.full.min.js"></script>
 | 
			
		||||
@ -140,6 +140,9 @@ A specific release can be referenced by version:
 | 
			
		||||
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-0.18.5/package/dist/xlsx.full.min.js"></script>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
For production use, scripts should be downloaded and added to a public folder
 | 
			
		||||
alongside other scripts.
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
<details>
 | 
			
		||||
@ -157,8 +160,8 @@ A slimmer build is generated at `dist/xlsx.mini.min.js`. Compared to full build:
 | 
			
		||||
These scripts are also available on the CDN:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!-- use xlsx.core.min.js from the latest version -->
 | 
			
		||||
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.core.min.js"></script>
 | 
			
		||||
<!-- use xlsx.mini.min.js from the latest version -->
 | 
			
		||||
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.mini.min.js"></script>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
@ -173,21 +176,21 @@ $ bower install js-xlsx
 | 
			
		||||
**ECMAScript Modules**
 | 
			
		||||
 | 
			
		||||
The ECMAScript Module build is saved to `xlsx.mjs` and can be directly added to
 | 
			
		||||
a page with a `script` tag using `type=module`:
 | 
			
		||||
a page with a `script` tag using `type="module"`:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<script type="module">
 | 
			
		||||
import { read, writeFileXLSX } from "./xlsx.mjs";
 | 
			
		||||
import { read, writeFileXLSX } from "https://cdn.sheetjs.com/xlsx-latest/package/xlsx.mjs";
 | 
			
		||||
 | 
			
		||||
/* load the codepage support library for extended support with older formats  */
 | 
			
		||||
import { set_cptable } from "./xlsx.mjs";
 | 
			
		||||
import * as cptable from './dist/cpexcel.full.mjs';
 | 
			
		||||
import { set_cptable } from "https://cdn.sheetjs.com/xlsx-latest/package/xlsx.mjs";
 | 
			
		||||
import * as cptable from 'https://cdn.sheetjs.com/xlsx-latest/package/dist/cpexcel.full.mjs';
 | 
			
		||||
set_cptable(cptable);
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The [npm package](https://www.npmjs.org/package/xlsx) also exposes the module
 | 
			
		||||
with the `module` parameter, supported in Angular and other projects:
 | 
			
		||||
The NodeJS package also exposes the module with the `module` parameter, which is
 | 
			
		||||
supported in Angular and other projects:
 | 
			
		||||
 | 
			
		||||
```ts
 | 
			
		||||
import { read, writeFileXLSX } from "xlsx";
 | 
			
		||||
@ -213,19 +216,31 @@ XLSX.set_cptable(cptable);
 | 
			
		||||
 | 
			
		||||
**NodeJS**
 | 
			
		||||
 | 
			
		||||
Modules are available on [the public npm registry](https://www.npmjs.org/package/xlsx):
 | 
			
		||||
Tarballs are available on <https://cdn.sheetjs.com>.
 | 
			
		||||
 | 
			
		||||
<https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz> is a link to the latest
 | 
			
		||||
version and will refresh on each release.
 | 
			
		||||
 | 
			
		||||
Each individual version can be referenced using a similar URL pattern.
 | 
			
		||||
<https://cdn.sheetjs.com/xlsx-0.18.6/xlsx-0.18.6.tgz> is the URL for `0.18.6`
 | 
			
		||||
 | 
			
		||||
For general stability, "vendoring" modules is the recommended approach:
 | 
			
		||||
 | 
			
		||||
1) Download the tarball (`xlsx-<version>.tgz`) for the desired version.
 | 
			
		||||
 | 
			
		||||
2) Create a `vendor` subdirectory at the root of your project and move the
 | 
			
		||||
   tarball to that folder.  Add it to your project repository.
 | 
			
		||||
 | 
			
		||||
3) Install the tarball using a package manager:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ pnpm install xlsx  # using pnpm
 | 
			
		||||
$ yarn add xlsx      # using yarn
 | 
			
		||||
$ npm install xlsx   # using npm
 | 
			
		||||
# note : replace $VERSION with the actual version (e.g. latest or 0.18.6)
 | 
			
		||||
$ npm  install --save file:vendor/xlsx-$VERSION.tgz # npm
 | 
			
		||||
$ pnpm install --save file:vendor/xlsx-$VERSION.tgz # pnpm
 | 
			
		||||
$ yarn add            file:vendor/xlsx-$VERSION.tgz # yarn
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Tarballs are also available on <https://cdn.sheetjs.com>:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ npm install https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz
 | 
			
		||||
```
 | 
			
		||||
The package will be installed and accessible as `xlsx`.
 | 
			
		||||
 | 
			
		||||
By default, the module supports `require`:
 | 
			
		||||
 | 
			
		||||
@ -253,9 +268,9 @@ XLSX.set_cptable(cpexcel);
 | 
			
		||||
 | 
			
		||||
**Photoshop and InDesign**
 | 
			
		||||
 | 
			
		||||
`dist/xlsx.extendscript.js` is an ExtendScript build for Photoshop and InDesign
 | 
			
		||||
that is included in the `npm` package.  It can be directly referenced with a
 | 
			
		||||
`#include` directive:
 | 
			
		||||
`dist/xlsx.extendscript.js` is an ExtendScript build for Photoshop and InDesign.
 | 
			
		||||
<https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.extendscript.js> is the
 | 
			
		||||
latest build.  It can be directly referenced with a `#include` directive:
 | 
			
		||||
 | 
			
		||||
```extendscript
 | 
			
		||||
#include "xlsx.extendscript.js"
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
XLSX.version = '0.18.5';
 | 
			
		||||
XLSX.version = '0.18.6';
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ var VT_UI4      = 0x0013;
 | 
			
		||||
//var VT_UI8      = 0x0015;
 | 
			
		||||
//var VT_INT      = 0x0016;
 | 
			
		||||
//var VT_UINT     = 0x0017;
 | 
			
		||||
var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPWSTR   = 0x001F;
 | 
			
		||||
var VT_FILETIME = 0x0040;
 | 
			
		||||
var VT_BLOB     = 0x0041;
 | 
			
		||||
@ -33,7 +33,7 @@ var VT_BLOB     = 0x0041;
 | 
			
		||||
var VT_CF       = 0x0047;
 | 
			
		||||
//var VT_CLSID    = 0x0048;
 | 
			
		||||
//var VT_VERSIONED_STREAM = 0x0049;
 | 
			
		||||
var VT_VECTOR   = 0x1000;
 | 
			
		||||
//var VT_VECTOR   = 0x1000;
 | 
			
		||||
var VT_VECTOR_VARIANT = 0x100C;
 | 
			
		||||
var VT_VECTOR_LPSTR   = 0x101E;
 | 
			
		||||
//var VT_ARRAY    = 0x2000;
 | 
			
		||||
 | 
			
		||||
@ -16,16 +16,16 @@ function parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*::, them
 | 
			
		||||
	if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];
 | 
			
		||||
	return s;
 | 
			
		||||
}
 | 
			
		||||
function write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {
 | 
			
		||||
	var o = [XML_HEADER, writextag('chartsheet', null, {
 | 
			
		||||
		'xmlns': XMLNS_main[0],
 | 
			
		||||
		'xmlns:r': XMLNS.r
 | 
			
		||||
	})];
 | 
			
		||||
	o[o.length] = writextag("drawing", null, {"r:id": "rId1"});
 | 
			
		||||
	add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW);
 | 
			
		||||
	if(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace("/>",">"); }
 | 
			
		||||
	return o.join("");
 | 
			
		||||
}
 | 
			
		||||
//function write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {
 | 
			
		||||
//	var o = [XML_HEADER, writextag('chartsheet', null, {
 | 
			
		||||
//		'xmlns': XMLNS_main[0],
 | 
			
		||||
//		'xmlns:r': XMLNS.r
 | 
			
		||||
//	})];
 | 
			
		||||
//	o[o.length] = writextag("drawing", null, {"r:id": "rId1"});
 | 
			
		||||
//	add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW);
 | 
			
		||||
//	if(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace("/>",">"); }
 | 
			
		||||
//	return o.join("");
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
/* [MS-XLSB] 2.4.331 BrtCsProp */
 | 
			
		||||
function parse_BrtCsProp(data, length/*:number*/) {
 | 
			
		||||
@ -81,22 +81,22 @@ function parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, styles*/
 | 
			
		||||
	if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];
 | 
			
		||||
	return s;
 | 
			
		||||
}
 | 
			
		||||
function write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {
 | 
			
		||||
	var ba = buf_array();
 | 
			
		||||
	write_record(ba, 0x0081 /* BrtBeginSheet */);
 | 
			
		||||
	/* [BrtCsProp] */
 | 
			
		||||
	/* CSVIEWS */
 | 
			
		||||
	/* [[BrtCsProtectionIso] BrtCsProtection] */
 | 
			
		||||
	/* [USERCSVIEWS] */
 | 
			
		||||
	/* [BrtMargins] */
 | 
			
		||||
	/* [BrtCsPageSetup] */
 | 
			
		||||
	/* [HEADERFOOTER] */
 | 
			
		||||
	/* BrtDrawing */
 | 
			
		||||
	/* [BrtLegacyDrawing] */
 | 
			
		||||
	/* [BrtLegacyDrawingHF] */
 | 
			
		||||
	/* [BrtBkHim] */
 | 
			
		||||
	/* [WEBPUBITEMS] */
 | 
			
		||||
	/* FRTCHARTSHEET */
 | 
			
		||||
	write_record(ba, 0x0082 /* BrtEndSheet */);
 | 
			
		||||
	return ba.end();
 | 
			
		||||
}
 | 
			
		||||
//function write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {
 | 
			
		||||
//	var ba = buf_array();
 | 
			
		||||
//	write_record(ba, 0x0081 /* BrtBeginSheet */);
 | 
			
		||||
//	/* [BrtCsProp] */
 | 
			
		||||
//	/* CSVIEWS */
 | 
			
		||||
//	/* [[BrtCsProtectionIso] BrtCsProtection] */
 | 
			
		||||
//	/* [USERCSVIEWS] */
 | 
			
		||||
//	/* [BrtMargins] */
 | 
			
		||||
//	/* [BrtCsPageSetup] */
 | 
			
		||||
//	/* [HEADERFOOTER] */
 | 
			
		||||
//	/* BrtDrawing */
 | 
			
		||||
//	/* [BrtLegacyDrawing] */
 | 
			
		||||
//	/* [BrtLegacyDrawingHF] */
 | 
			
		||||
//	/* [BrtBkHim] */
 | 
			
		||||
//	/* [WEBPUBITEMS] */
 | 
			
		||||
//	/* FRTCHARTSHEET */
 | 
			
		||||
//	write_record(ba, 0x0082 /* BrtEndSheet */);
 | 
			
		||||
//	return ba.end();
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
@ -28,10 +28,6 @@ function parse_sty(data, name/*:string*/, themes, opts) {
 | 
			
		||||
	return parse_sty_xml((data/*:any*/), themes, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_theme(data/*:string*/, name/*:string*/, opts) {
 | 
			
		||||
	return parse_theme_xml(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_sst(data, name/*:string*/, opts)/*:SST*/ {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_sst_bin((data/*:any*/), opts);
 | 
			
		||||
	return parse_sst_xml((data/*:any*/), opts);
 | 
			
		||||
@ -56,37 +52,3 @@ function parse_xlmeta(data, name/*:string*/, opts) {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_xlmeta_bin((data/*:any*/), name, opts);
 | 
			
		||||
	return parse_xlmeta_xml((data/*:any*/), name, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_wb(wb, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_wb_bin : write_wb_xml)(wb, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_ws(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line no-unused-vars
 | 
			
		||||
function write_cs(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sty(data, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sty_bin : write_sty_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sst(data/*:SST*/, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sst_bin : write_sst_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_cmnt(data/*:Array<any>*/, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_comments_bin : write_comments_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
function write_cc(data, name:string, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cc_bin : write_cc_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
function write_xlmeta(name/*:string*/) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_xlmeta_bin : write_xlmeta_xml)();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -938,19 +938,17 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
  cfb.FileIndex.map(function(fi, idx) {
 | 
			
		||||
    return [fi, cfb.FullPaths[idx]];
 | 
			
		||||
  }).forEach(function(row) {
 | 
			
		||||
    var fi = row[0], fp = row[1];
 | 
			
		||||
    var fi = row[0];
 | 
			
		||||
    if (!fi.name.match(/\.iwa/))
 | 
			
		||||
      return;
 | 
			
		||||
    var x2 = parse_iwa_file(decompress_iwa_file(fi.content));
 | 
			
		||||
    x2.forEach(function(ia) {
 | 
			
		||||
      ia.messages.forEach(function(m) {
 | 
			
		||||
        indices_varint.forEach(function(ivi) {
 | 
			
		||||
          if (ia.messages.some(function(mess) {
 | 
			
		||||
            return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
 | 
			
		||||
          })) {
 | 
			
		||||
            dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      indices_varint.forEach(function(ivi) {
 | 
			
		||||
        if (ia.messages.some(function(mess) {
 | 
			
		||||
          return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
 | 
			
		||||
        })) {
 | 
			
		||||
          dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
@ -1156,10 +1154,9 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
              delete tile[7];
 | 
			
		||||
              var rowload = new Uint8Array(tiledata[5][0].data);
 | 
			
		||||
              tiledata[5] = [];
 | 
			
		||||
              var cnt = 0;
 | 
			
		||||
              for (var R2 = 0; R2 <= range.e.r; ++R2) {
 | 
			
		||||
                var tilerow = parse_shallow(rowload);
 | 
			
		||||
                cnt += write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
 | 
			
		||||
                write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
 | 
			
		||||
                tilerow[1][0].data = write_varint49(R2);
 | 
			
		||||
                tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
@ -104,7 +104,7 @@ function parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
		strs = [];
 | 
			
		||||
		if(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }
 | 
			
		||||
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"",dir.themes[0], opts);
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme_xml(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"", opts);
 | 
			
		||||
 | 
			
		||||
		if(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,3 @@
 | 
			
		||||
/* XLSX and XLSB writing are very similar.  Originally they were unified in one
 | 
			
		||||
   export function.  This is horrible for tree shaking in the common case (most
 | 
			
		||||
   applications need to export files in one format) so this function supports
 | 
			
		||||
   both formats while write_zip_xlsx only handles XLSX */
 | 
			
		||||
function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	_shapeid = 1024;
 | 
			
		||||
	if(wb && !wb.SSF) {
 | 
			
		||||
@ -65,7 +61,7 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
			/* falls through */
 | 
			
		||||
		default:
 | 
			
		||||
			f = "xl/worksheets/sheet" + rId + "." + wbext;
 | 
			
		||||
			zip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));
 | 
			
		||||
			zip_add_file(zip, f, write_ws_bin(rId-1, opts, wb, wsrels));
 | 
			
		||||
			ct.sheets.push(f);
 | 
			
		||||
			add_rels(opts.wbrels, -1, "worksheets/sheet" + rId + "." + wbext, RELS.WS[0]);
 | 
			
		||||
		}
 | 
			
		||||
@ -76,7 +72,7 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
			var cf = "";
 | 
			
		||||
			if(comments && comments.length > 0) {
 | 
			
		||||
				cf = "xl/comments" + rId + "." + wbext;
 | 
			
		||||
				zip_add_file(zip, cf, write_cmnt(comments, cf, opts));
 | 
			
		||||
				zip_add_file(zip, cf, write_comments_bin(comments, opts));
 | 
			
		||||
				ct.comments.push(cf);
 | 
			
		||||
				add_rels(wsrels, -1, "../comments" + rId + "." + wbext, RELS.CMNT);
 | 
			
		||||
				need_vml = true;
 | 
			
		||||
@ -93,13 +89,13 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
 | 
			
		||||
	if(opts.Strings != null && opts.Strings.length > 0) {
 | 
			
		||||
		f = "xl/sharedStrings." + wbext;
 | 
			
		||||
		zip_add_file(zip, f, write_sst(opts.Strings, f, opts));
 | 
			
		||||
		zip_add_file(zip, f, write_sst_bin(opts.Strings, opts));
 | 
			
		||||
		ct.strs.push(f);
 | 
			
		||||
		add_rels(opts.wbrels, -1, "sharedStrings." + wbext, RELS.SST);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/workbook." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_wb(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_wb_bin(wb, opts));
 | 
			
		||||
	ct.workbooks.push(f);
 | 
			
		||||
	add_rels(opts.rels, 1, f, RELS.WB);
 | 
			
		||||
 | 
			
		||||
@ -113,7 +109,7 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	/* TODO: something more intelligent with styles */
 | 
			
		||||
 | 
			
		||||
	f = "xl/styles." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_sty(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_sty_bin(wb, opts));
 | 
			
		||||
	ct.styles.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "styles." + wbext, RELS.STY);
 | 
			
		||||
 | 
			
		||||
@ -125,7 +121,7 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/metadata." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta(f));
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta_bin());
 | 
			
		||||
	ct.metadata.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "metadata." + wbext, RELS.XLMETA);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -94,7 +94,7 @@ enables testing the development version of the library.  In order to use this
 | 
			
		||||
demo in other applications, add the `xlsx` dependency:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ npm install --save xlsx
 | 
			
		||||
$ npm install --save https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## SystemJS Configuration
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ if [ ! -e SheetJSIonic ]; then
 | 
			
		||||
	ionic cordova plugin add cordova-plugin-file </dev/null
 | 
			
		||||
	npm install --save @ionic-native/core
 | 
			
		||||
	npm install --save @ionic-native/file
 | 
			
		||||
	npm install --save xlsx
 | 
			
		||||
	npm install --save https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz
 | 
			
		||||
	cp ../ionic-app.module.ts src/app/app.module.ts
 | 
			
		||||
	cd -
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
if [ ! -e SheetJSNS ]; then
 | 
			
		||||
	ns create SheetJSNS --ng
 | 
			
		||||
	cd SheetJSNS
 | 
			
		||||
	npm install xlsx
 | 
			
		||||
	npm install --save https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz
 | 
			
		||||
	cd ..
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -8,4 +8,5 @@ lint:
 | 
			
		||||
	eslint *.js
 | 
			
		||||
.PHONY: run
 | 
			
		||||
run:
 | 
			
		||||
	electron .
 | 
			
		||||
	npm i
 | 
			
		||||
	npx electron .
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
	"dependencies": {
 | 
			
		||||
		"@electron/remote": "^2.0.5",
 | 
			
		||||
		"electron": "^17.1.0",
 | 
			
		||||
		"xlsx": "^0.18.3"
 | 
			
		||||
		"xlsx": "https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz"
 | 
			
		||||
	},
 | 
			
		||||
	"scripts": {
 | 
			
		||||
		"start": "electron ."
 | 
			
		||||
 | 
			
		||||
@ -7,11 +7,11 @@ aws: lambda-proxy
 | 
			
		||||
 | 
			
		||||
.PHONY: lambda-proxy
 | 
			
		||||
lambda-proxy:
 | 
			
		||||
	cd LambdaProxy; mkdir -p node_modules; npm install xlsx busboy; sam local start-api; cd -
 | 
			
		||||
	cd LambdaProxy; mkdir -p node_modules; npm install https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz busboy; sam local start-api; cd -
 | 
			
		||||
 | 
			
		||||
.PHONY: init-azure
 | 
			
		||||
init-azure:
 | 
			
		||||
	cd AzureHTTPTrigger; mkdir -p node_modules; npm install xlsx formidable fs
 | 
			
		||||
	cd AzureHTTPTrigger; mkdir -p node_modules; npm install https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz formidable fs
 | 
			
		||||
 | 
			
		||||
.PHONY: azure
 | 
			
		||||
azure: init-azure
 | 
			
		||||
 | 
			
		||||
@ -30,7 +30,7 @@ utility can stream rows to a standard HTTP response.  `XLSX.utils.sheet_to_json`
 | 
			
		||||
can generate an array of objects that can be fed to another service.
 | 
			
		||||
 | 
			
		||||
At the simplest level, a file on the filesystem can be converted using the bin
 | 
			
		||||
script that ships with the `npm` module:
 | 
			
		||||
script that ships with the NodeJS package:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ xlsx /path/to/uploads/file > /tmp/new_csv_file
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ meteor out of the box.
 | 
			
		||||
Using the npm module, the library can be imported from client or server side:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
import XLSX from 'xlsx'
 | 
			
		||||
import * as XLSX from 'xlsx'
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
All of the functions and utilities are available in both realms. Since the core
 | 
			
		||||
@ -71,7 +71,7 @@ This tree does not include the `.meteor` structure.  Rebuild the project with:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
meteor create .
 | 
			
		||||
npm install babel-runtime meteor-node-stubs xlsx
 | 
			
		||||
npm install babel-runtime meteor-node-stubs https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz
 | 
			
		||||
meteor
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,4 +4,4 @@ init:
 | 
			
		||||
 | 
			
		||||
.PHONY: run
 | 
			
		||||
run:
 | 
			
		||||
	nw .
 | 
			
		||||
	npx nw .
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
# NW.js
 | 
			
		||||
 | 
			
		||||
This library is compatible with NW.js and should just work out of the box.
 | 
			
		||||
The demonstration uses NW.js 0.24 with the dist script.
 | 
			
		||||
The demonstration uses NW.js 0.63.0 with the dist script.
 | 
			
		||||
 | 
			
		||||
## Reading data
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
	"version": "0.0.0",
 | 
			
		||||
	"main": "index.html",
 | 
			
		||||
	"dependencies": {
 | 
			
		||||
		"nw": "~0.24.4",
 | 
			
		||||
		"xlsx": "*"
 | 
			
		||||
		"nw": "~0.63.0",
 | 
			
		||||
		"xlsx": "https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@
 | 
			
		||||
    "react-dom": "^17.0.2",
 | 
			
		||||
    "react-scripts": "4.0.3",
 | 
			
		||||
    "typescript": "^4.1.2",
 | 
			
		||||
    "xlsx": "^0.18.3"
 | 
			
		||||
    "xlsx": "https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "start": "react-scripts start",
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@
 | 
			
		||||
if [ ! -e SheetJS ]; then react-native init SheetJS --version="0.67.2"; fi
 | 
			
		||||
 | 
			
		||||
# Install dependencies
 | 
			
		||||
cd SheetJS; npm i -S xlsx react-native-table-component; cd -
 | 
			
		||||
cd SheetJS; npm i -S https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz react-native-table-component; cd -
 | 
			
		||||
 | 
			
		||||
cd SheetJS; npm i -S react-native-file-access@2.x; cd -
 | 
			
		||||
# cd SheetJS; npm i -S react-native-fs; cd -
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ appropriate error checking or other production-level features.
 | 
			
		||||
The following commands are required in order to test the [Express](https://github.com/expressjs/express) demo:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
npm install express printj xlsx express-formidable
 | 
			
		||||
npm install express printj express-formidable https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz
 | 
			
		||||
node express.js
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,7 @@ node express.js
 | 
			
		||||
The following commands are required in order to test the [Koa](https://github.com/koajs/koa) demo:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
npm install koa printj formidable xlsx
 | 
			
		||||
npm install koa printj formidable https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz
 | 
			
		||||
node koa.js
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@ -34,7 +34,7 @@ node koa.js
 | 
			
		||||
The following commands are required in order to test the [Hapi](https://github.com/hapijs/hapi) demo:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
npm install hapi@16.x printj tiny-worker xlsx
 | 
			
		||||
npm install hapi@16.x printj tiny-worker https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz
 | 
			
		||||
node hapi.js
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ if [ ! -e xlsx-demo ]; then
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
cd xlsx-demo
 | 
			
		||||
npm i --save xlsx
 | 
			
		||||
npm i --save https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz
 | 
			
		||||
npm i --save-dev @types/multer
 | 
			
		||||
 | 
			
		||||
if [ ! -e src/sheetjs/sheetjs.module.ts ]; then
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@
 | 
			
		||||
  },
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
		"xlsx": "*"
 | 
			
		||||
    "xlsx": "https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "typescript": "~2.6.1",
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@ vue: ## Simple server for vue
 | 
			
		||||
 | 
			
		||||
.PHONY: nuxt
 | 
			
		||||
nuxt: ## nuxt.js demo
 | 
			
		||||
	npm i xlsx @nuxt/content
 | 
			
		||||
	npm i https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz @nuxt/content
 | 
			
		||||
	npx nuxt
 | 
			
		||||
 | 
			
		||||
.PHONY: weex
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "vue": "^3.2.25",
 | 
			
		||||
    "vue3-table-lite": "^1.1.7-1",
 | 
			
		||||
    "xlsx": "^0.18.3"
 | 
			
		||||
    "xlsx": "https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@vitejs/plugin-vue": "^2.2.0",
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										28
									
								
								dist/xlsx.core.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										28
									
								
								dist/xlsx.core.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.core.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.core.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										271
									
								
								dist/xlsx.extendscript.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										271
									
								
								dist/xlsx.extendscript.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -160,7 +160,7 @@ var DO_NOT_EXPORT_CODEPAGE = true;
 | 
			
		||||
/*global exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
 | 
			
		||||
var XLSX = {};
 | 
			
		||||
function make_xlsx_lib(XLSX){
 | 
			
		||||
XLSX.version = '0.18.5';
 | 
			
		||||
XLSX.version = '0.18.6';
 | 
			
		||||
var current_codepage = 1200, current_ansi = 1252;
 | 
			
		||||
/*global cptable:true, window */
 | 
			
		||||
var $cptable;
 | 
			
		||||
@ -1121,7 +1121,7 @@ function eval_fmt(fmt, v, opts, flen) {
 | 
			
		||||
			case 'A': case 'a': case '上':
 | 
			
		||||
				var q={t:c, v:c};
 | 
			
		||||
				if(dt==null) dt=SSF_parse_date_code(v, opts);
 | 
			
		||||
				if(fmt.substr(i, 3).toUpperCase() === "A/P") { if(dt!=null) q.v = dt.H >= 12 ? "P" : "A"; q.t = 'T'; hr='h';i+=3;}
 | 
			
		||||
				if(fmt.substr(i, 3).toUpperCase() === "A/P") { if(dt!=null) q.v = dt.H >= 12 ? fmt.charAt(i+2) : c; q.t = 'T'; hr='h';i+=3;}
 | 
			
		||||
				else if(fmt.substr(i,5).toUpperCase() === "AM/PM") { if(dt!=null) q.v = dt.H >= 12 ? "PM" : "AM"; q.t = 'T'; i+=5; hr='h'; }
 | 
			
		||||
				else if(fmt.substr(i,5).toUpperCase() === "上午/下午") { if(dt!=null) q.v = dt.H >= 12 ? "下午" : "上午"; q.t = 'T'; i+=5; hr='h'; }
 | 
			
		||||
				else { q.t = "t"; ++i; }
 | 
			
		||||
@ -1446,6 +1446,15 @@ function dateNF_fix(str, dateNF, match) {
 | 
			
		||||
	return datestr + "T" + timestr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* table of bad formats written by third-party tools */
 | 
			
		||||
var bad_formats = {
 | 
			
		||||
	"d.m": "d\\.m" // Issue #2571 Google Sheets writes invalid format 'd.m', correct format is 'd"."m' or 'd\\.m'
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function SSF__load(fmt, idx) {
 | 
			
		||||
	return SSF_load(bad_formats[fmt] || fmt, idx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */
 | 
			
		||||
/* vim: set ts=2: */
 | 
			
		||||
/*jshint eqnull:true */
 | 
			
		||||
@ -1549,7 +1558,7 @@ return CRC32;
 | 
			
		||||
/* [MS-CFB] v20171201 */
 | 
			
		||||
var CFB = (function _CFB(){
 | 
			
		||||
var exports = {};
 | 
			
		||||
exports.version = '1.2.1';
 | 
			
		||||
exports.version = '1.2.2';
 | 
			
		||||
/* [MS-CFB] 2.6.4 */
 | 
			
		||||
function namecmp(l, r) {
 | 
			
		||||
	var L = l.split("/"), R = r.split("/");
 | 
			
		||||
@ -1849,7 +1858,7 @@ function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {
 | 
			
		||||
			if((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;
 | 
			
		||||
			fat_addrs.push(q);
 | 
			
		||||
		}
 | 
			
		||||
		sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);
 | 
			
		||||
		if(cnt >= 1) sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -2025,7 +2034,9 @@ function rebuild_cfb(cfb, f) {
 | 
			
		||||
	for(i = 0; i < data.length; ++i) {
 | 
			
		||||
		var dad = dirname(data[i][0]);
 | 
			
		||||
		s = fullPaths[dad];
 | 
			
		||||
		if(!s) {
 | 
			
		||||
		while(!s) {
 | 
			
		||||
			while(dirname(dad) && !fullPaths[dirname(dad)]) dad = dirname(dad);
 | 
			
		||||
 | 
			
		||||
			data.push([dad, ({
 | 
			
		||||
				name: filename(dad).replace("/",""),
 | 
			
		||||
				type: 1,
 | 
			
		||||
@ -2033,8 +2044,12 @@ function rebuild_cfb(cfb, f) {
 | 
			
		||||
				ct: now, mt: now,
 | 
			
		||||
				content: null
 | 
			
		||||
			})]);
 | 
			
		||||
 | 
			
		||||
			// Add name to set
 | 
			
		||||
			fullPaths[dad] = true;
 | 
			
		||||
 | 
			
		||||
			dad = dirname(data[i][0]);
 | 
			
		||||
			s = fullPaths[dad];
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -2082,7 +2097,7 @@ function _write(cfb, options) {
 | 
			
		||||
		for(var i = 0; i < cfb.FileIndex.length; ++i) {
 | 
			
		||||
			var file = cfb.FileIndex[i];
 | 
			
		||||
			if(!file.content) continue;
 | 
			
		||||
var flen = file.content.length;
 | 
			
		||||
			var flen = file.content.length;
 | 
			
		||||
			if(flen > 0){
 | 
			
		||||
				if(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;
 | 
			
		||||
				else fat_size += (flen + 0x01FF) >> 9;
 | 
			
		||||
@ -2170,6 +2185,10 @@ flen = file.content.length;
 | 
			
		||||
		file = cfb.FileIndex[i];
 | 
			
		||||
		if(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;
 | 
			
		||||
		var _nm = (i === 0 && _opts.root) || file.name;
 | 
			
		||||
		if(_nm.length > 32) {
 | 
			
		||||
			console.error("Name " + _nm + " will be truncated to " + _nm.slice(0,32));
 | 
			
		||||
			_nm = _nm.slice(0, 32);
 | 
			
		||||
		}
 | 
			
		||||
		flen = 2*(_nm.length+1);
 | 
			
		||||
		o.write_shift(64, _nm, "utf16le");
 | 
			
		||||
		o.write_shift(2, flen);
 | 
			
		||||
@ -2805,6 +2824,7 @@ function parse_zip(file, options) {
 | 
			
		||||
		parse_local_file(blob, csz, usz, o, EF);
 | 
			
		||||
		blob.l = L;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4740,7 +4760,7 @@ var VT_UI4      = 0x0013;
 | 
			
		||||
//var VT_UI8      = 0x0015;
 | 
			
		||||
//var VT_INT      = 0x0016;
 | 
			
		||||
//var VT_UINT     = 0x0017;
 | 
			
		||||
var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPWSTR   = 0x001F;
 | 
			
		||||
var VT_FILETIME = 0x0040;
 | 
			
		||||
var VT_BLOB     = 0x0041;
 | 
			
		||||
@ -4752,7 +4772,7 @@ var VT_BLOB     = 0x0041;
 | 
			
		||||
var VT_CF       = 0x0047;
 | 
			
		||||
//var VT_CLSID    = 0x0048;
 | 
			
		||||
//var VT_VERSIONED_STREAM = 0x0049;
 | 
			
		||||
var VT_VECTOR   = 0x1000;
 | 
			
		||||
//var VT_VECTOR   = 0x1000;
 | 
			
		||||
var VT_VECTOR_VARIANT = 0x100C;
 | 
			
		||||
var VT_VECTOR_LPSTR   = 0x101E;
 | 
			
		||||
//var VT_ARRAY    = 0x2000;
 | 
			
		||||
@ -10513,7 +10533,7 @@ function parse_numFmts(t, styles, opts) {
 | 
			
		||||
						for(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;
 | 
			
		||||
						styles.NumberFmt[j] = f;
 | 
			
		||||
					}
 | 
			
		||||
					SSF_load(f,j);
 | 
			
		||||
					SSF__load(f,j);
 | 
			
		||||
				}
 | 
			
		||||
			} break;
 | 
			
		||||
			case '</numFmt>': break;
 | 
			
		||||
@ -10880,7 +10900,7 @@ function parse_sty_bin(data, themes, opts) {
 | 
			
		||||
	recordhopper(data, function hopper_sty(val, R, RT) {
 | 
			
		||||
		switch(RT) {
 | 
			
		||||
			case 0x002C: /* BrtFmt */
 | 
			
		||||
				styles.NumberFmt[val[0]] = val[1]; SSF_load(val[1], val[0]);
 | 
			
		||||
				styles.NumberFmt[val[0]] = val[1]; SSF__load(val[1], val[0]);
 | 
			
		||||
				break;
 | 
			
		||||
			case 0x002B: /* BrtFont */
 | 
			
		||||
				styles.Fonts.push(val);
 | 
			
		||||
@ -14591,7 +14611,7 @@ function get_cell_style(styles, cell, opts) {
 | 
			
		||||
	var i = 0x3c, len = styles.length;
 | 
			
		||||
	if(z == null && opts.ssf) {
 | 
			
		||||
		for(; i < 0x188; ++i) if(opts.ssf[i] == null) {
 | 
			
		||||
			SSF_load(cell.z, i);
 | 
			
		||||
			SSF__load(cell.z, i);
 | 
			
		||||
			// $FlowIgnore
 | 
			
		||||
			opts.ssf[i] = cell.z;
 | 
			
		||||
			opts.revssf[cell.z] = z = i;
 | 
			
		||||
@ -14617,7 +14637,7 @@ function safe_format(p, fmtid, fillid, opts, themes, styles) {
 | 
			
		||||
	if(p.t === 'z' && !opts.cellStyles) return;
 | 
			
		||||
	if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
 | 
			
		||||
	if((!opts || opts.cellText !== false) && p.t !== 'z') try {
 | 
			
		||||
		if(table_fmt[fmtid] == null) SSF_load(SSFImplicit[fmtid] || "General", fmtid);
 | 
			
		||||
		if(table_fmt[fmtid] == null) SSF__load(SSFImplicit[fmtid] || "General", fmtid);
 | 
			
		||||
		if(p.t === 'e') p.w = p.w || BErr[p.v];
 | 
			
		||||
		else if(fmtid === 0) {
 | 
			
		||||
			if(p.t === 'n') {
 | 
			
		||||
@ -16404,16 +16424,16 @@ function parse_cs_xml(data, opts, idx, rels, wb) {
 | 
			
		||||
	if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];
 | 
			
		||||
	return s;
 | 
			
		||||
}
 | 
			
		||||
function write_cs_xml(idx, opts, wb, rels) {
 | 
			
		||||
	var o = [XML_HEADER, writextag('chartsheet', null, {
 | 
			
		||||
		'xmlns': XMLNS_main[0],
 | 
			
		||||
		'xmlns:r': XMLNS.r
 | 
			
		||||
	})];
 | 
			
		||||
	o[o.length] = writextag("drawing", null, {"r:id": "rId1"});
 | 
			
		||||
	add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW);
 | 
			
		||||
	if(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace("/>",">"); }
 | 
			
		||||
	return o.join("");
 | 
			
		||||
}
 | 
			
		||||
//function write_cs_xml(idx, opts, wb, rels) {
 | 
			
		||||
//	var o = [XML_HEADER, writextag('chartsheet', null, {
 | 
			
		||||
//		'xmlns': XMLNS_main[0],
 | 
			
		||||
//		'xmlns:r': XMLNS.r
 | 
			
		||||
//	})];
 | 
			
		||||
//	o[o.length] = writextag("drawing", null, {"r:id": "rId1"});
 | 
			
		||||
//	add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW);
 | 
			
		||||
//	if(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace("/>",">"); }
 | 
			
		||||
//	return o.join("");
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
/* [MS-XLSB] 2.4.331 BrtCsProp */
 | 
			
		||||
function parse_BrtCsProp(data, length) {
 | 
			
		||||
@ -16469,25 +16489,25 @@ function parse_cs_bin(data, opts, idx, rels, wb) {
 | 
			
		||||
	if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];
 | 
			
		||||
	return s;
 | 
			
		||||
}
 | 
			
		||||
function write_cs_bin() {
 | 
			
		||||
	var ba = buf_array();
 | 
			
		||||
	write_record(ba, 0x0081 /* BrtBeginSheet */);
 | 
			
		||||
	/* [BrtCsProp] */
 | 
			
		||||
	/* CSVIEWS */
 | 
			
		||||
	/* [[BrtCsProtectionIso] BrtCsProtection] */
 | 
			
		||||
	/* [USERCSVIEWS] */
 | 
			
		||||
	/* [BrtMargins] */
 | 
			
		||||
	/* [BrtCsPageSetup] */
 | 
			
		||||
	/* [HEADERFOOTER] */
 | 
			
		||||
	/* BrtDrawing */
 | 
			
		||||
	/* [BrtLegacyDrawing] */
 | 
			
		||||
	/* [BrtLegacyDrawingHF] */
 | 
			
		||||
	/* [BrtBkHim] */
 | 
			
		||||
	/* [WEBPUBITEMS] */
 | 
			
		||||
	/* FRTCHARTSHEET */
 | 
			
		||||
	write_record(ba, 0x0082 /* BrtEndSheet */);
 | 
			
		||||
	return ba.end();
 | 
			
		||||
}
 | 
			
		||||
//function write_cs_bin() {
 | 
			
		||||
//	var ba = buf_array();
 | 
			
		||||
//	write_record(ba, 0x0081 /* BrtBeginSheet */);
 | 
			
		||||
//	/* [BrtCsProp] */
 | 
			
		||||
//	/* CSVIEWS */
 | 
			
		||||
//	/* [[BrtCsProtectionIso] BrtCsProtection] */
 | 
			
		||||
//	/* [USERCSVIEWS] */
 | 
			
		||||
//	/* [BrtMargins] */
 | 
			
		||||
//	/* [BrtCsPageSetup] */
 | 
			
		||||
//	/* [HEADERFOOTER] */
 | 
			
		||||
//	/* BrtDrawing */
 | 
			
		||||
//	/* [BrtLegacyDrawing] */
 | 
			
		||||
//	/* [BrtLegacyDrawingHF] */
 | 
			
		||||
//	/* [BrtBkHim] */
 | 
			
		||||
//	/* [WEBPUBITEMS] */
 | 
			
		||||
//	/* FRTCHARTSHEET */
 | 
			
		||||
//	write_record(ba, 0x0082 /* BrtEndSheet */);
 | 
			
		||||
//	return ba.end();
 | 
			
		||||
//}
 | 
			
		||||
/* 18.2.28 (CT_WorkbookProtection) Defaults */
 | 
			
		||||
var WBPropsDef = [
 | 
			
		||||
	['allowRefreshQuery',           false, "bool"],
 | 
			
		||||
@ -17204,10 +17224,6 @@ function parse_sty(data, name, themes, opts) {
 | 
			
		||||
	return parse_sty_xml((data), themes, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_theme(data, name, opts) {
 | 
			
		||||
	return parse_theme_xml(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_sst(data, name, opts) {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_sst_bin((data), opts);
 | 
			
		||||
	return parse_sst_xml((data), opts);
 | 
			
		||||
@ -17232,40 +17248,6 @@ function parse_xlmeta(data, name, opts) {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_xlmeta_bin((data), name, opts);
 | 
			
		||||
	return parse_xlmeta_xml((data), name, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_wb(wb, name, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_wb_bin : write_wb_xml)(wb, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_ws(data, name, opts, wb, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line no-unused-vars
 | 
			
		||||
function write_cs(data, name, opts, wb, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sty(data, name, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sty_bin : write_sty_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sst(data, name, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sst_bin : write_sst_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_cmnt(data, name, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_comments_bin : write_comments_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
function write_cc(data, name:string, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cc_bin : write_cc_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
function write_xlmeta(name) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_xlmeta_bin : write_xlmeta_xml)();
 | 
			
		||||
}
 | 
			
		||||
var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
 | 
			
		||||
var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;
 | 
			
		||||
function xlml_parsexmltag(tag, skip_root) {
 | 
			
		||||
@ -17608,7 +17590,7 @@ for(var cma = c; cma <= cc; ++cma) {
 | 
			
		||||
			stag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || "General");
 | 
			
		||||
			if(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];
 | 
			
		||||
			for(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == stag.nf) break;
 | 
			
		||||
			if(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == null) { SSF_load(stag.nf, ssfidx); break; }
 | 
			
		||||
			if(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == null) { SSF__load(stag.nf, ssfidx); break; }
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case 'column' /*case 'Column'*/:
 | 
			
		||||
@ -18986,14 +18968,14 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;
 | 
			
		||||
					if(opts.biff == 4) {
 | 
			
		||||
						BIFF2FmtTable[BIFF2Fmt++] = val[1];
 | 
			
		||||
						for(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(table_fmt[b4idx] == val[1]) break;
 | 
			
		||||
						if(b4idx >= 163) SSF_load(val[1], BIFF2Fmt + 163);
 | 
			
		||||
						if(b4idx >= 163) SSF__load(val[1], BIFF2Fmt + 163);
 | 
			
		||||
					}
 | 
			
		||||
					else SSF_load(val[1], val[0]);
 | 
			
		||||
					else SSF__load(val[1], val[0]);
 | 
			
		||||
				} break;
 | 
			
		||||
				case 0x001e /* BIFF2FORMAT */: {
 | 
			
		||||
					BIFF2FmtTable[BIFF2Fmt++] = val;
 | 
			
		||||
					for(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(table_fmt[b2idx] == val) break;
 | 
			
		||||
					if(b2idx >= 163) SSF_load(val, BIFF2Fmt + 163);
 | 
			
		||||
					if(b2idx >= 163) SSF__load(val, BIFF2Fmt + 163);
 | 
			
		||||
				} break;
 | 
			
		||||
 | 
			
		||||
				case 0x00e5 /* MergeCells */: merges = merges.concat(val); break;
 | 
			
		||||
@ -22459,10 +22441,6 @@ function parse_old_storage(buf, sst, rsst, v) {
 | 
			
		||||
      {
 | 
			
		||||
        if (ridx > -1)
 | 
			
		||||
          ret = { t: "s", v: rsst[ridx] };
 | 
			
		||||
        else if (sidx > -1)
 | 
			
		||||
          ret = { t: "s", v: sst[sidx] };
 | 
			
		||||
        else if (!isNaN(ieee))
 | 
			
		||||
          ret = { t: "n", v: ieee };
 | 
			
		||||
        else
 | 
			
		||||
          throw new Error("Unsupported cell type ".concat(buf.slice(0, 4)));
 | 
			
		||||
      }
 | 
			
		||||
@ -22855,24 +22833,32 @@ function parse_numbers_iwa(cfb) {
 | 
			
		||||
    throw new Error("Cannot find Document root");
 | 
			
		||||
  return parse_TN_DocumentArchive(M, docroot);
 | 
			
		||||
}
 | 
			
		||||
function write_tile_row(tri, data, SST) {
 | 
			
		||||
  var _a, _b, _c, _d;
 | 
			
		||||
function write_tile_row(tri, data, SST, wide) {
 | 
			
		||||
  var _a, _b;
 | 
			
		||||
  if (!((_a = tri[6]) == null ? void 0 : _a[0]) || !((_b = tri[7]) == null ? void 0 : _b[0]))
 | 
			
		||||
    throw "Mutation only works on post-BNC storages!";
 | 
			
		||||
  var wide_offsets = ((_d = (_c = tri[8]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && varint_to_i32(tri[8][0].data) > 0 || false;
 | 
			
		||||
  if (wide_offsets)
 | 
			
		||||
    throw "Math only works with normal offsets";
 | 
			
		||||
  var cnt = 0;
 | 
			
		||||
  if (tri[7][0].data.length < 2 * data.length) {
 | 
			
		||||
    var new_7 = new Uint8Array(2 * data.length);
 | 
			
		||||
    new_7.set(tri[7][0].data);
 | 
			
		||||
    tri[7][0].data = new_7;
 | 
			
		||||
  }
 | 
			
		||||
  if (tri[4][0].data.length < 2 * data.length) {
 | 
			
		||||
    var new_4 = new Uint8Array(2 * data.length);
 | 
			
		||||
    new_4.set(tri[4][0].data);
 | 
			
		||||
    tri[4][0].data = new_4;
 | 
			
		||||
  }
 | 
			
		||||
  var dv = u8_to_dataview(tri[7][0].data), last_offset = 0, cell_storage = [];
 | 
			
		||||
  var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage = [];
 | 
			
		||||
  var width = wide ? 4 : 1;
 | 
			
		||||
  for (var C = 0; C < data.length; ++C) {
 | 
			
		||||
    if (data[C] == null) {
 | 
			
		||||
      dv.setUint16(C * 2, 65535, true);
 | 
			
		||||
      _dv.setUint16(C * 2, 65535);
 | 
			
		||||
      continue;
 | 
			
		||||
    }
 | 
			
		||||
    dv.setUint16(C * 2, last_offset, true);
 | 
			
		||||
    _dv.setUint16(C * 2, _last_offset, true);
 | 
			
		||||
    dv.setUint16(C * 2, last_offset / width, true);
 | 
			
		||||
    _dv.setUint16(C * 2, _last_offset / width, true);
 | 
			
		||||
    var celload, _celload;
 | 
			
		||||
    switch (typeof data[C]) {
 | 
			
		||||
      case "string":
 | 
			
		||||
@ -22892,17 +22878,21 @@ function write_tile_row(tri, data, SST) {
 | 
			
		||||
    }
 | 
			
		||||
    cell_storage.push(celload);
 | 
			
		||||
    last_offset += celload.length;
 | 
			
		||||
    _cell_storage.push(_celload);
 | 
			
		||||
    _last_offset += _celload.length;
 | 
			
		||||
    {
 | 
			
		||||
      _cell_storage.push(_celload);
 | 
			
		||||
      _last_offset += _celload.length;
 | 
			
		||||
    }
 | 
			
		||||
    ++cnt;
 | 
			
		||||
  }
 | 
			
		||||
  tri[2][0].data = write_varint49(cnt);
 | 
			
		||||
  tri[5][0].data = write_varint49(5);
 | 
			
		||||
  for (; C < tri[7][0].data.length / 2; ++C) {
 | 
			
		||||
    dv.setUint16(C * 2, 65535, true);
 | 
			
		||||
    _dv.setUint16(C * 2, 65535, true);
 | 
			
		||||
  }
 | 
			
		||||
  tri[6][0].data = u8concat(cell_storage);
 | 
			
		||||
  tri[3][0].data = u8concat(_cell_storage);
 | 
			
		||||
  tri[8] = [{ type: 0, data: write_varint49(wide ? 1 : 0) }];
 | 
			
		||||
  return cnt;
 | 
			
		||||
}
 | 
			
		||||
function write_iwam(type, payload) {
 | 
			
		||||
@ -22911,7 +22901,9 @@ function write_iwam(type, payload) {
 | 
			
		||||
    data: payload
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
var USE_WIDE_ROWS = true;
 | 
			
		||||
function write_numbers_iwa(wb, opts) {
 | 
			
		||||
  var _a;
 | 
			
		||||
  if (!opts || !opts.numbers)
 | 
			
		||||
    throw new Error("Must pass a `numbers` option -- check the README");
 | 
			
		||||
  var ws = wb.Sheets[wb.SheetNames[0]];
 | 
			
		||||
@ -22920,13 +22912,13 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
  var range = decode_range(ws["!ref"]);
 | 
			
		||||
  range.s.r = range.s.c = 0;
 | 
			
		||||
  var trunc = false;
 | 
			
		||||
  if (range.e.c > 9) {
 | 
			
		||||
  if (range.e.c > 999) {
 | 
			
		||||
    trunc = true;
 | 
			
		||||
    range.e.c = 9;
 | 
			
		||||
    range.e.c = 999;
 | 
			
		||||
  }
 | 
			
		||||
  if (range.e.r > 49) {
 | 
			
		||||
  if (range.e.r > 254) {
 | 
			
		||||
    trunc = true;
 | 
			
		||||
    range.e.r = 49;
 | 
			
		||||
    range.e.r = 254;
 | 
			
		||||
  }
 | 
			
		||||
  if (trunc)
 | 
			
		||||
    console.error("The Numbers writer is currently limited to ".concat(encode_range(range)));
 | 
			
		||||
@ -22968,19 +22960,17 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
  cfb.FileIndex.map(function(fi, idx) {
 | 
			
		||||
    return [fi, cfb.FullPaths[idx]];
 | 
			
		||||
  }).forEach(function(row) {
 | 
			
		||||
    var fi = row[0], fp = row[1];
 | 
			
		||||
    var fi = row[0];
 | 
			
		||||
    if (!fi.name.match(/\.iwa/))
 | 
			
		||||
      return;
 | 
			
		||||
    var x2 = parse_iwa_file(decompress_iwa_file(fi.content));
 | 
			
		||||
    x2.forEach(function(ia) {
 | 
			
		||||
      ia.messages.forEach(function(m) {
 | 
			
		||||
        indices_varint.forEach(function(ivi) {
 | 
			
		||||
          if (ia.messages.some(function(mess) {
 | 
			
		||||
            return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
 | 
			
		||||
          })) {
 | 
			
		||||
            dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      indices_varint.forEach(function(ivi) {
 | 
			
		||||
        if (ia.messages.some(function(mess) {
 | 
			
		||||
          return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
 | 
			
		||||
        })) {
 | 
			
		||||
          dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
@ -23084,12 +23074,13 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
        if (_x[0].id != row_header_ref)
 | 
			
		||||
          throw "Bad HeaderStorageBucket";
 | 
			
		||||
        var base_bucket = parse_shallow(_x[0].messages[0].data);
 | 
			
		||||
        for (R = 0; R < data.length; ++R) {
 | 
			
		||||
          var _bucket = parse_shallow(base_bucket[2][0].data);
 | 
			
		||||
          _bucket[1][0].data = write_varint49(R);
 | 
			
		||||
          _bucket[4][0].data = write_varint49(data[R].length);
 | 
			
		||||
          base_bucket[2][R] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
 | 
			
		||||
        }
 | 
			
		||||
        if ((_a = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a[0])
 | 
			
		||||
          for (R = 0; R < data.length; ++R) {
 | 
			
		||||
            var _bucket = parse_shallow(base_bucket[2][0].data);
 | 
			
		||||
            _bucket[1][0].data = write_varint49(R);
 | 
			
		||||
            _bucket[4][0].data = write_varint49(data[R].length);
 | 
			
		||||
            base_bucket[2][R] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
 | 
			
		||||
          }
 | 
			
		||||
        _x[0].messages[0].data = write_shallow(base_bucket);
 | 
			
		||||
      }
 | 
			
		||||
      oldbucket.content = compress_iwa_file(write_iwa_file(_x));
 | 
			
		||||
@ -23166,7 +23157,7 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
      var tile = parse_shallow(store[3][0].data);
 | 
			
		||||
      {
 | 
			
		||||
        var t = tile[1][0];
 | 
			
		||||
        delete tile[2];
 | 
			
		||||
        tile[3] = [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }];
 | 
			
		||||
        var tl = parse_shallow(t.data);
 | 
			
		||||
        {
 | 
			
		||||
          var tileref = parse_TSP_Reference(tl[2][0].data);
 | 
			
		||||
@ -23185,17 +23176,19 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
              delete tile[7];
 | 
			
		||||
              var rowload = new Uint8Array(tiledata[5][0].data);
 | 
			
		||||
              tiledata[5] = [];
 | 
			
		||||
              var cnt = 0;
 | 
			
		||||
              for (var R2 = 0; R2 <= range.e.r; ++R2) {
 | 
			
		||||
                var tilerow = parse_shallow(rowload);
 | 
			
		||||
                cnt += write_tile_row(tilerow, data[R2], SST);
 | 
			
		||||
                write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
 | 
			
		||||
                tilerow[1][0].data = write_varint49(R2);
 | 
			
		||||
                tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
 | 
			
		||||
              }
 | 
			
		||||
              tiledata[1] = [{ type: 0, data: write_varint49(range.e.c + 1) }];
 | 
			
		||||
              tiledata[2] = [{ type: 0, data: write_varint49(range.e.r + 1) }];
 | 
			
		||||
              tiledata[3] = [{ type: 0, data: write_varint49(cnt) }];
 | 
			
		||||
              tiledata[1] = [{ type: 0, data: write_varint49(0) }];
 | 
			
		||||
              tiledata[2] = [{ type: 0, data: write_varint49(0) }];
 | 
			
		||||
              tiledata[3] = [{ type: 0, data: write_varint49(0) }];
 | 
			
		||||
              tiledata[4] = [{ type: 0, data: write_varint49(range.e.r + 1) }];
 | 
			
		||||
              tiledata[6] = [{ type: 0, data: write_varint49(5) }];
 | 
			
		||||
              tiledata[7] = [{ type: 0, data: write_varint49(1) }];
 | 
			
		||||
              tiledata[8] = [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }];
 | 
			
		||||
            }
 | 
			
		||||
            tileroot.messages[0].data = write_shallow(tiledata);
 | 
			
		||||
            tentry.content = compress_iwa_file(write_iwa_file(tx));
 | 
			
		||||
@ -23365,7 +23358,7 @@ function parse_zip(zip, opts) {
 | 
			
		||||
		strs = [];
 | 
			
		||||
		if(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }
 | 
			
		||||
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"",dir.themes[0], opts);
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme_xml(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"", opts);
 | 
			
		||||
 | 
			
		||||
		if(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);
 | 
			
		||||
	}
 | 
			
		||||
@ -23548,18 +23541,7 @@ if(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std7
 | 
			
		||||
	throw new Error("File is password-protected");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_zip(wb, opts) {
 | 
			
		||||
	if(opts.bookType == "ods") return write_ods(wb, opts);
 | 
			
		||||
	if(opts.bookType == "numbers") return write_numbers_iwa(wb, opts);
 | 
			
		||||
	if(opts.bookType == "xlsb") return write_zip_xlsxb(wb, opts);
 | 
			
		||||
	return write_zip_xlsx(wb, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* XLSX and XLSB writing are very similar.  Originally they were unified in one
 | 
			
		||||
   export function.  This is horrible for tree shaking in the common case (most
 | 
			
		||||
   applications need to export files in one format) so this function supports
 | 
			
		||||
   both formats while write_zip_xlsx only handles XLSX */
 | 
			
		||||
function write_zip_xlsxb(wb, opts) {
 | 
			
		||||
function write_zip_xlsb(wb, opts) {
 | 
			
		||||
	_shapeid = 1024;
 | 
			
		||||
	if(wb && !wb.SSF) {
 | 
			
		||||
		wb.SSF = dup(table_fmt);
 | 
			
		||||
@ -23621,7 +23603,7 @@ f = "docProps/app.xml";
 | 
			
		||||
			/* falls through */
 | 
			
		||||
		default:
 | 
			
		||||
			f = "xl/worksheets/sheet" + rId + "." + wbext;
 | 
			
		||||
			zip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));
 | 
			
		||||
			zip_add_file(zip, f, write_ws_bin(rId-1, opts, wb, wsrels));
 | 
			
		||||
			ct.sheets.push(f);
 | 
			
		||||
			add_rels(opts.wbrels, -1, "worksheets/sheet" + rId + "." + wbext, RELS.WS[0]);
 | 
			
		||||
		}
 | 
			
		||||
@ -23632,7 +23614,7 @@ f = "docProps/app.xml";
 | 
			
		||||
			var cf = "";
 | 
			
		||||
			if(comments && comments.length > 0) {
 | 
			
		||||
				cf = "xl/comments" + rId + "." + wbext;
 | 
			
		||||
				zip_add_file(zip, cf, write_cmnt(comments, cf, opts));
 | 
			
		||||
				zip_add_file(zip, cf, write_comments_bin(comments, opts));
 | 
			
		||||
				ct.comments.push(cf);
 | 
			
		||||
				add_rels(wsrels, -1, "../comments" + rId + "." + wbext, RELS.CMNT);
 | 
			
		||||
				need_vml = true;
 | 
			
		||||
@ -23649,13 +23631,13 @@ f = "docProps/app.xml";
 | 
			
		||||
 | 
			
		||||
	if(opts.Strings != null && opts.Strings.length > 0) {
 | 
			
		||||
		f = "xl/sharedStrings." + wbext;
 | 
			
		||||
		zip_add_file(zip, f, write_sst(opts.Strings, f, opts));
 | 
			
		||||
		zip_add_file(zip, f, write_sst_bin(opts.Strings, opts));
 | 
			
		||||
		ct.strs.push(f);
 | 
			
		||||
		add_rels(opts.wbrels, -1, "sharedStrings." + wbext, RELS.SST);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/workbook." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_wb(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_wb_bin(wb, opts));
 | 
			
		||||
	ct.workbooks.push(f);
 | 
			
		||||
	add_rels(opts.rels, 1, f, RELS.WB);
 | 
			
		||||
 | 
			
		||||
@ -23669,7 +23651,7 @@ f = "docProps/app.xml";
 | 
			
		||||
	/* TODO: something more intelligent with styles */
 | 
			
		||||
 | 
			
		||||
	f = "xl/styles." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_sty(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_sty_bin(wb, opts));
 | 
			
		||||
	ct.styles.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "styles." + wbext, RELS.STY);
 | 
			
		||||
 | 
			
		||||
@ -23681,7 +23663,7 @@ f = "docProps/app.xml";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/metadata." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta(f));
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta_bin());
 | 
			
		||||
	ct.metadata.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "metadata." + wbext, RELS.XLMETA);
 | 
			
		||||
 | 
			
		||||
@ -23977,6 +23959,15 @@ function write_cfb_ctr(cfb, o) {
 | 
			
		||||
	return CFB.write(cfb, o);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_zip(wb, opts) {
 | 
			
		||||
	switch(opts.bookType) {
 | 
			
		||||
		case "ods": return write_ods(wb, opts);
 | 
			
		||||
		case "numbers": return write_numbers_iwa(wb, opts);
 | 
			
		||||
		case "xlsb": return write_zip_xlsb(wb, opts);
 | 
			
		||||
		default: return write_zip_xlsx(wb, opts);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_zip_type(wb, opts) {
 | 
			
		||||
	var o = dup(opts||{});
 | 
			
		||||
	var z = write_zip(wb, o);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										32
									
								
								dist/xlsx.full.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										32
									
								
								dist/xlsx.full.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.full.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.full.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										16
									
								
								dist/xlsx.mini.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										16
									
								
								dist/xlsx.mini.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.mini.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.mini.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -5,7 +5,7 @@
 | 
			
		||||
**Standalone Browser Scripts**
 | 
			
		||||
 | 
			
		||||
The complete browser standalone build is saved to `dist/xlsx.full.min.js` and
 | 
			
		||||
can be directly added to a page with a `script` tag:
 | 
			
		||||
can be directly added to a page with a `<script>` tag:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<script lang="javascript" src="dist/xlsx.full.min.js"></script>
 | 
			
		||||
@ -26,6 +26,9 @@ A specific release can be referenced by version:
 | 
			
		||||
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-0.18.5/package/dist/xlsx.full.min.js"></script>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
For production use, scripts should be downloaded and added to a public folder
 | 
			
		||||
alongside other scripts.
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
<details>
 | 
			
		||||
@ -43,8 +46,8 @@ A slimmer build is generated at `dist/xlsx.mini.min.js`. Compared to full build:
 | 
			
		||||
These scripts are also available on the CDN:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!-- use xlsx.core.min.js from the latest version -->
 | 
			
		||||
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.core.min.js"></script>
 | 
			
		||||
<!-- use xlsx.mini.min.js from the latest version -->
 | 
			
		||||
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.mini.min.js"></script>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
@ -59,21 +62,21 @@ $ bower install js-xlsx
 | 
			
		||||
**ECMAScript Modules**
 | 
			
		||||
 | 
			
		||||
The ECMAScript Module build is saved to `xlsx.mjs` and can be directly added to
 | 
			
		||||
a page with a `script` tag using `type=module`:
 | 
			
		||||
a page with a `script` tag using `type="module"`:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<script type="module">
 | 
			
		||||
import { read, writeFileXLSX } from "./xlsx.mjs";
 | 
			
		||||
import { read, writeFileXLSX } from "https://cdn.sheetjs.com/xlsx-latest/package/xlsx.mjs";
 | 
			
		||||
 | 
			
		||||
/* load the codepage support library for extended support with older formats  */
 | 
			
		||||
import { set_cptable } from "./xlsx.mjs";
 | 
			
		||||
import * as cptable from './dist/cpexcel.full.mjs';
 | 
			
		||||
import { set_cptable } from "https://cdn.sheetjs.com/xlsx-latest/package/xlsx.mjs";
 | 
			
		||||
import * as cptable from 'https://cdn.sheetjs.com/xlsx-latest/package/dist/cpexcel.full.mjs';
 | 
			
		||||
set_cptable(cptable);
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The [npm package](https://www.npmjs.org/package/xlsx) also exposes the module
 | 
			
		||||
with the `module` parameter, supported in Angular and other projects:
 | 
			
		||||
The NodeJS package also exposes the module with the `module` parameter, which is
 | 
			
		||||
supported in Angular and other projects:
 | 
			
		||||
 | 
			
		||||
```ts
 | 
			
		||||
import { read, writeFileXLSX } from "xlsx";
 | 
			
		||||
@ -99,19 +102,31 @@ XLSX.set_cptable(cptable);
 | 
			
		||||
 | 
			
		||||
**NodeJS**
 | 
			
		||||
 | 
			
		||||
Modules are available on [the public npm registry](https://www.npmjs.org/package/xlsx):
 | 
			
		||||
Tarballs are available on <https://cdn.sheetjs.com>.
 | 
			
		||||
 | 
			
		||||
<https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz> is a link to the latest
 | 
			
		||||
version and will refresh on each release.
 | 
			
		||||
 | 
			
		||||
Each individual version can be referenced using a similar URL pattern.
 | 
			
		||||
<https://cdn.sheetjs.com/xlsx-0.18.6/xlsx-0.18.6.tgz> is the URL for `0.18.6`
 | 
			
		||||
 | 
			
		||||
For general stability, "vendoring" modules is the recommended approach:
 | 
			
		||||
 | 
			
		||||
1) Download the tarball (`xlsx-<version>.tgz`) for the desired version.
 | 
			
		||||
 | 
			
		||||
2) Create a `vendor` subdirectory at the root of your project and move the
 | 
			
		||||
   tarball to that folder.  Add it to your project repository.
 | 
			
		||||
 | 
			
		||||
3) Install the tarball using a package manager:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ pnpm install xlsx  # using pnpm
 | 
			
		||||
$ yarn add xlsx      # using yarn
 | 
			
		||||
$ npm install xlsx   # using npm
 | 
			
		||||
# note : replace $VERSION with the actual version (e.g. latest or 0.18.6)
 | 
			
		||||
$ npm  install --save file:vendor/xlsx-$VERSION.tgz # npm
 | 
			
		||||
$ pnpm install --save file:vendor/xlsx-$VERSION.tgz # pnpm
 | 
			
		||||
$ yarn add            file:vendor/xlsx-$VERSION.tgz # yarn
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Tarballs are also available on <https://cdn.sheetjs.com>:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ npm install https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz
 | 
			
		||||
```
 | 
			
		||||
The package will be installed and accessible as `xlsx`.
 | 
			
		||||
 | 
			
		||||
By default, the module supports `require`:
 | 
			
		||||
 | 
			
		||||
@ -139,9 +154,9 @@ XLSX.set_cptable(cpexcel);
 | 
			
		||||
 | 
			
		||||
**Photoshop and InDesign**
 | 
			
		||||
 | 
			
		||||
`dist/xlsx.extendscript.js` is an ExtendScript build for Photoshop and InDesign
 | 
			
		||||
that is included in the `npm` package.  It can be directly referenced with a
 | 
			
		||||
`#include` directive:
 | 
			
		||||
`dist/xlsx.extendscript.js` is an ExtendScript build for Photoshop and InDesign.
 | 
			
		||||
<https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.extendscript.js> is the
 | 
			
		||||
latest build.  It can be directly referenced with a `#include` directive:
 | 
			
		||||
 | 
			
		||||
```extendscript
 | 
			
		||||
#include "xlsx.extendscript.js"
 | 
			
		||||
 | 
			
		||||
@ -116,7 +116,7 @@ port calculations to web apps; automate common spreadsheet tasks, and much more!
 | 
			
		||||
**Standalone Browser Scripts**
 | 
			
		||||
 | 
			
		||||
The complete browser standalone build is saved to `dist/xlsx.full.min.js` and
 | 
			
		||||
can be directly added to a page with a `script` tag:
 | 
			
		||||
can be directly added to a page with a `<script>` tag:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<script lang="javascript" src="dist/xlsx.full.min.js"></script>
 | 
			
		||||
@ -137,6 +137,9 @@ A specific release can be referenced by version:
 | 
			
		||||
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-0.18.5/package/dist/xlsx.full.min.js"></script>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
For production use, scripts should be downloaded and added to a public folder
 | 
			
		||||
alongside other scripts.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The complete single-file version is generated at `dist/xlsx.full.min.js`
 | 
			
		||||
@ -151,8 +154,8 @@ A slimmer build is generated at `dist/xlsx.mini.min.js`. Compared to full build:
 | 
			
		||||
These scripts are also available on the CDN:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!-- use xlsx.core.min.js from the latest version -->
 | 
			
		||||
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.core.min.js"></script>
 | 
			
		||||
<!-- use xlsx.mini.min.js from the latest version -->
 | 
			
		||||
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.mini.min.js"></script>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -166,21 +169,21 @@ $ bower install js-xlsx
 | 
			
		||||
**ECMAScript Modules**
 | 
			
		||||
 | 
			
		||||
The ECMAScript Module build is saved to `xlsx.mjs` and can be directly added to
 | 
			
		||||
a page with a `script` tag using `type=module`:
 | 
			
		||||
a page with a `script` tag using `type="module"`:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<script type="module">
 | 
			
		||||
import { read, writeFileXLSX } from "./xlsx.mjs";
 | 
			
		||||
import { read, writeFileXLSX } from "https://cdn.sheetjs.com/xlsx-latest/package/xlsx.mjs";
 | 
			
		||||
 | 
			
		||||
/* load the codepage support library for extended support with older formats  */
 | 
			
		||||
import { set_cptable } from "./xlsx.mjs";
 | 
			
		||||
import * as cptable from './dist/cpexcel.full.mjs';
 | 
			
		||||
import { set_cptable } from "https://cdn.sheetjs.com/xlsx-latest/package/xlsx.mjs";
 | 
			
		||||
import * as cptable from 'https://cdn.sheetjs.com/xlsx-latest/package/dist/cpexcel.full.mjs';
 | 
			
		||||
set_cptable(cptable);
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The [npm package](https://www.npmjs.org/package/xlsx) also exposes the module
 | 
			
		||||
with the `module` parameter, supported in Angular and other projects:
 | 
			
		||||
The NodeJS package also exposes the module with the `module` parameter, which is
 | 
			
		||||
supported in Angular and other projects:
 | 
			
		||||
 | 
			
		||||
```ts
 | 
			
		||||
import { read, writeFileXLSX } from "xlsx";
 | 
			
		||||
@ -206,19 +209,31 @@ XLSX.set_cptable(cptable);
 | 
			
		||||
 | 
			
		||||
**NodeJS**
 | 
			
		||||
 | 
			
		||||
Modules are available on [the public npm registry](https://www.npmjs.org/package/xlsx):
 | 
			
		||||
Tarballs are available on <https://cdn.sheetjs.com>.
 | 
			
		||||
 | 
			
		||||
<https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz> is a link to the latest
 | 
			
		||||
version and will refresh on each release.
 | 
			
		||||
 | 
			
		||||
Each individual version can be referenced using a similar URL pattern.
 | 
			
		||||
<https://cdn.sheetjs.com/xlsx-0.18.6/xlsx-0.18.6.tgz> is the URL for `0.18.6`
 | 
			
		||||
 | 
			
		||||
For general stability, "vendoring" modules is the recommended approach:
 | 
			
		||||
 | 
			
		||||
1) Download the tarball (`xlsx-<version>.tgz`) for the desired version.
 | 
			
		||||
 | 
			
		||||
2) Create a `vendor` subdirectory at the root of your project and move the
 | 
			
		||||
   tarball to that folder.  Add it to your project repository.
 | 
			
		||||
 | 
			
		||||
3) Install the tarball using a package manager:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ pnpm install xlsx  # using pnpm
 | 
			
		||||
$ yarn add xlsx      # using yarn
 | 
			
		||||
$ npm install xlsx   # using npm
 | 
			
		||||
# note : replace $VERSION with the actual version (e.g. latest or 0.18.6)
 | 
			
		||||
$ npm  install --save file:vendor/xlsx-$VERSION.tgz # npm
 | 
			
		||||
$ pnpm install --save file:vendor/xlsx-$VERSION.tgz # pnpm
 | 
			
		||||
$ yarn add            file:vendor/xlsx-$VERSION.tgz # yarn
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Tarballs are also available on <https://cdn.sheetjs.com>:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ npm install https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz
 | 
			
		||||
```
 | 
			
		||||
The package will be installed and accessible as `xlsx`.
 | 
			
		||||
 | 
			
		||||
By default, the module supports `require`:
 | 
			
		||||
 | 
			
		||||
@ -246,9 +261,9 @@ XLSX.set_cptable(cpexcel);
 | 
			
		||||
 | 
			
		||||
**Photoshop and InDesign**
 | 
			
		||||
 | 
			
		||||
`dist/xlsx.extendscript.js` is an ExtendScript build for Photoshop and InDesign
 | 
			
		||||
that is included in the `npm` package.  It can be directly referenced with a
 | 
			
		||||
`#include` directive:
 | 
			
		||||
`dist/xlsx.extendscript.js` is an ExtendScript build for Photoshop and InDesign.
 | 
			
		||||
<https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.extendscript.js> is the
 | 
			
		||||
latest build.  It can be directly referenced with a `#include` directive:
 | 
			
		||||
 | 
			
		||||
```extendscript
 | 
			
		||||
#include "xlsx.extendscript.js"
 | 
			
		||||
 | 
			
		||||
@ -938,19 +938,17 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
  cfb.FileIndex.map(function(fi, idx) {
 | 
			
		||||
    return [fi, cfb.FullPaths[idx]];
 | 
			
		||||
  }).forEach(function(row) {
 | 
			
		||||
    var fi = row[0], fp = row[1];
 | 
			
		||||
    var fi = row[0];
 | 
			
		||||
    if (!fi.name.match(/\.iwa/))
 | 
			
		||||
      return;
 | 
			
		||||
    var x2 = parse_iwa_file(decompress_iwa_file(fi.content));
 | 
			
		||||
    x2.forEach(function(ia) {
 | 
			
		||||
      ia.messages.forEach(function(m) {
 | 
			
		||||
        indices_varint.forEach(function(ivi) {
 | 
			
		||||
          if (ia.messages.some(function(mess) {
 | 
			
		||||
            return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
 | 
			
		||||
          })) {
 | 
			
		||||
            dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      indices_varint.forEach(function(ivi) {
 | 
			
		||||
        if (ia.messages.some(function(mess) {
 | 
			
		||||
          return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
 | 
			
		||||
        })) {
 | 
			
		||||
          dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
@ -1156,10 +1154,9 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
              delete tile[7];
 | 
			
		||||
              var rowload = new Uint8Array(tiledata[5][0].data);
 | 
			
		||||
              tiledata[5] = [];
 | 
			
		||||
              var cnt = 0;
 | 
			
		||||
              for (var R2 = 0; R2 <= range.e.r; ++R2) {
 | 
			
		||||
                var tilerow = parse_shallow(rowload);
 | 
			
		||||
                cnt += write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
 | 
			
		||||
                write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
 | 
			
		||||
                tilerow[1][0].data = write_varint49(R2);
 | 
			
		||||
                tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
@ -830,18 +830,16 @@ function write_numbers_iwa(wb: WorkBook, opts: any): CFB$Container {
 | 
			
		||||
 | 
			
		||||
	/* build dependent tree */
 | 
			
		||||
	cfb.FileIndex.map((fi, idx): [CFB$Entry, string] => ([fi, cfb.FullPaths[idx]])).forEach(row => {
 | 
			
		||||
		var fi = row[0], fp = row[1];
 | 
			
		||||
		var fi = row[0];
 | 
			
		||||
		if(!fi.name.match(/\.iwa/)) return;
 | 
			
		||||
		var x = parse_iwa_file(decompress_iwa_file(fi.content as Uint8Array));
 | 
			
		||||
 | 
			
		||||
		x.forEach(ia => {
 | 
			
		||||
			ia.messages.forEach(m => {
 | 
			
		||||
				indices_varint.forEach(ivi => {
 | 
			
		||||
					if(ia.messages.some(mess => varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]))) {
 | 
			
		||||
						dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
					}
 | 
			
		||||
				})
 | 
			
		||||
			});
 | 
			
		||||
			indices_varint.forEach(ivi => {
 | 
			
		||||
				if(ia.messages.some(mess => varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]))) {
 | 
			
		||||
					dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
@ -1043,10 +1041,10 @@ function write_numbers_iwa(wb: WorkBook, opts: any): CFB$Container {
 | 
			
		||||
							delete tiledata[6]; delete tile[7];
 | 
			
		||||
							var rowload = new Uint8Array(tiledata[5][0].data);
 | 
			
		||||
							tiledata[5] = [];
 | 
			
		||||
							var cnt = 0;
 | 
			
		||||
							//var cnt = 0;
 | 
			
		||||
							for(var R = 0; R <= range.e.r; ++R) {
 | 
			
		||||
								var tilerow = parse_shallow(rowload);
 | 
			
		||||
								cnt += write_tile_row(tilerow, data[R], SST, USE_WIDE_ROWS);
 | 
			
		||||
								/* cnt += */ write_tile_row(tilerow, data[R], SST, USE_WIDE_ROWS);
 | 
			
		||||
								tilerow[1][0].data = write_varint49(R);
 | 
			
		||||
								tiledata[5].push({data: write_shallow(tilerow), type: 2});
 | 
			
		||||
							}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										18
									
								
								package.json
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										18
									
								
								package.json
									
									
									
									
									
								
							@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
	"name": "xlsx",
 | 
			
		||||
	"version": "0.18.5",
 | 
			
		||||
	"version": "0.18.6",
 | 
			
		||||
	"author": "sheetjs",
 | 
			
		||||
	"description": "SheetJS Spreadsheet data parser and writer",
 | 
			
		||||
	"keywords": [
 | 
			
		||||
@ -34,21 +34,18 @@
 | 
			
		||||
	},
 | 
			
		||||
	"sideEffects": false,
 | 
			
		||||
	"dependencies": {
 | 
			
		||||
		"adler-32": "~1.3.1",
 | 
			
		||||
		"cfb": "~1.2.2",
 | 
			
		||||
		"codepage": "~1.15.0",
 | 
			
		||||
		"crc-32": "~1.2.2",
 | 
			
		||||
		"ssf": "~0.11.2",
 | 
			
		||||
		"wmf": "~1.0.1",
 | 
			
		||||
		"word": "~0.3.0"
 | 
			
		||||
	},
 | 
			
		||||
	"devDependencies": {
 | 
			
		||||
		"@sheetjs/uglify-js": "~2.7.3",
 | 
			
		||||
		"@types/node": "^8.5.9",
 | 
			
		||||
		"acorn": "7.4.1",
 | 
			
		||||
		"adler-32": "~1.3.1",
 | 
			
		||||
		"alex": "8.1.1",
 | 
			
		||||
		"blanket": "~1.2.3",
 | 
			
		||||
		"cfb": "~1.2.2",
 | 
			
		||||
		"codepage": "~1.15.0",
 | 
			
		||||
		"commander": "~2.17.1",
 | 
			
		||||
		"crc-32": "~1.2.2",
 | 
			
		||||
		"dtslint": "^0.1.2",
 | 
			
		||||
		"eslint": "7.23.0",
 | 
			
		||||
		"eslint-plugin-html": "^6.1.2",
 | 
			
		||||
@ -59,7 +56,10 @@
 | 
			
		||||
		"markdown-spellcheck": "^1.3.1",
 | 
			
		||||
		"mocha": "~2.5.3",
 | 
			
		||||
		"sinon": "^1.17.7",
 | 
			
		||||
		"typescript": "2.2.0"
 | 
			
		||||
		"ssf": "~0.11.2",
 | 
			
		||||
		"typescript": "2.2.0",
 | 
			
		||||
		"wmf": "~1.0.1",
 | 
			
		||||
		"word": "~0.3.0"
 | 
			
		||||
	},
 | 
			
		||||
	"repository": {
 | 
			
		||||
		"type": "git",
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										139
									
								
								xlsx.flow.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										139
									
								
								xlsx.flow.js
									
									
									
									
									
								
							@ -4,7 +4,7 @@
 | 
			
		||||
/*global exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
 | 
			
		||||
var XLSX = {};
 | 
			
		||||
function make_xlsx_lib(XLSX){
 | 
			
		||||
XLSX.version = '0.18.5';
 | 
			
		||||
XLSX.version = '0.18.6';
 | 
			
		||||
var current_codepage = 1200, current_ansi = 1252;
 | 
			
		||||
/*:: declare var cptable:any; */
 | 
			
		||||
/*global cptable:true, window */
 | 
			
		||||
@ -4689,7 +4689,7 @@ var VT_UI4      = 0x0013;
 | 
			
		||||
//var VT_UI8      = 0x0015;
 | 
			
		||||
//var VT_INT      = 0x0016;
 | 
			
		||||
//var VT_UINT     = 0x0017;
 | 
			
		||||
var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPWSTR   = 0x001F;
 | 
			
		||||
var VT_FILETIME = 0x0040;
 | 
			
		||||
var VT_BLOB     = 0x0041;
 | 
			
		||||
@ -4701,7 +4701,7 @@ var VT_BLOB     = 0x0041;
 | 
			
		||||
var VT_CF       = 0x0047;
 | 
			
		||||
//var VT_CLSID    = 0x0048;
 | 
			
		||||
//var VT_VERSIONED_STREAM = 0x0049;
 | 
			
		||||
var VT_VECTOR   = 0x1000;
 | 
			
		||||
//var VT_VECTOR   = 0x1000;
 | 
			
		||||
var VT_VECTOR_VARIANT = 0x100C;
 | 
			
		||||
var VT_VECTOR_LPSTR   = 0x101E;
 | 
			
		||||
//var VT_ARRAY    = 0x2000;
 | 
			
		||||
@ -16363,16 +16363,16 @@ function parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*::, them
 | 
			
		||||
	if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];
 | 
			
		||||
	return s;
 | 
			
		||||
}
 | 
			
		||||
function write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {
 | 
			
		||||
	var o = [XML_HEADER, writextag('chartsheet', null, {
 | 
			
		||||
		'xmlns': XMLNS_main[0],
 | 
			
		||||
		'xmlns:r': XMLNS.r
 | 
			
		||||
	})];
 | 
			
		||||
	o[o.length] = writextag("drawing", null, {"r:id": "rId1"});
 | 
			
		||||
	add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW);
 | 
			
		||||
	if(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace("/>",">"); }
 | 
			
		||||
	return o.join("");
 | 
			
		||||
}
 | 
			
		||||
//function write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {
 | 
			
		||||
//	var o = [XML_HEADER, writextag('chartsheet', null, {
 | 
			
		||||
//		'xmlns': XMLNS_main[0],
 | 
			
		||||
//		'xmlns:r': XMLNS.r
 | 
			
		||||
//	})];
 | 
			
		||||
//	o[o.length] = writextag("drawing", null, {"r:id": "rId1"});
 | 
			
		||||
//	add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW);
 | 
			
		||||
//	if(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace("/>",">"); }
 | 
			
		||||
//	return o.join("");
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
/* [MS-XLSB] 2.4.331 BrtCsProp */
 | 
			
		||||
function parse_BrtCsProp(data, length/*:number*/) {
 | 
			
		||||
@ -16428,25 +16428,25 @@ function parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, styles*/
 | 
			
		||||
	if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];
 | 
			
		||||
	return s;
 | 
			
		||||
}
 | 
			
		||||
function write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {
 | 
			
		||||
	var ba = buf_array();
 | 
			
		||||
	write_record(ba, 0x0081 /* BrtBeginSheet */);
 | 
			
		||||
	/* [BrtCsProp] */
 | 
			
		||||
	/* CSVIEWS */
 | 
			
		||||
	/* [[BrtCsProtectionIso] BrtCsProtection] */
 | 
			
		||||
	/* [USERCSVIEWS] */
 | 
			
		||||
	/* [BrtMargins] */
 | 
			
		||||
	/* [BrtCsPageSetup] */
 | 
			
		||||
	/* [HEADERFOOTER] */
 | 
			
		||||
	/* BrtDrawing */
 | 
			
		||||
	/* [BrtLegacyDrawing] */
 | 
			
		||||
	/* [BrtLegacyDrawingHF] */
 | 
			
		||||
	/* [BrtBkHim] */
 | 
			
		||||
	/* [WEBPUBITEMS] */
 | 
			
		||||
	/* FRTCHARTSHEET */
 | 
			
		||||
	write_record(ba, 0x0082 /* BrtEndSheet */);
 | 
			
		||||
	return ba.end();
 | 
			
		||||
}
 | 
			
		||||
//function write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {
 | 
			
		||||
//	var ba = buf_array();
 | 
			
		||||
//	write_record(ba, 0x0081 /* BrtBeginSheet */);
 | 
			
		||||
//	/* [BrtCsProp] */
 | 
			
		||||
//	/* CSVIEWS */
 | 
			
		||||
//	/* [[BrtCsProtectionIso] BrtCsProtection] */
 | 
			
		||||
//	/* [USERCSVIEWS] */
 | 
			
		||||
//	/* [BrtMargins] */
 | 
			
		||||
//	/* [BrtCsPageSetup] */
 | 
			
		||||
//	/* [HEADERFOOTER] */
 | 
			
		||||
//	/* BrtDrawing */
 | 
			
		||||
//	/* [BrtLegacyDrawing] */
 | 
			
		||||
//	/* [BrtLegacyDrawingHF] */
 | 
			
		||||
//	/* [BrtBkHim] */
 | 
			
		||||
//	/* [WEBPUBITEMS] */
 | 
			
		||||
//	/* FRTCHARTSHEET */
 | 
			
		||||
//	write_record(ba, 0x0082 /* BrtEndSheet */);
 | 
			
		||||
//	return ba.end();
 | 
			
		||||
//}
 | 
			
		||||
/* 18.2.28 (CT_WorkbookProtection) Defaults */
 | 
			
		||||
var WBPropsDef = [
 | 
			
		||||
	['allowRefreshQuery',           false, "bool"],
 | 
			
		||||
@ -17165,10 +17165,6 @@ function parse_sty(data, name/*:string*/, themes, opts) {
 | 
			
		||||
	return parse_sty_xml((data/*:any*/), themes, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_theme(data/*:string*/, name/*:string*/, opts) {
 | 
			
		||||
	return parse_theme_xml(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_sst(data, name/*:string*/, opts)/*:SST*/ {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_sst_bin((data/*:any*/), opts);
 | 
			
		||||
	return parse_sst_xml((data/*:any*/), opts);
 | 
			
		||||
@ -17193,40 +17189,6 @@ function parse_xlmeta(data, name/*:string*/, opts) {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_xlmeta_bin((data/*:any*/), name, opts);
 | 
			
		||||
	return parse_xlmeta_xml((data/*:any*/), name, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_wb(wb, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_wb_bin : write_wb_xml)(wb, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_ws(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line no-unused-vars
 | 
			
		||||
function write_cs(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sty(data, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sty_bin : write_sty_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sst(data/*:SST*/, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sst_bin : write_sst_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_cmnt(data/*:Array<any>*/, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_comments_bin : write_comments_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
function write_cc(data, name:string, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cc_bin : write_cc_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
function write_xlmeta(name/*:string*/) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_xlmeta_bin : write_xlmeta_xml)();
 | 
			
		||||
}
 | 
			
		||||
var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
 | 
			
		||||
var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;
 | 
			
		||||
function xlml_parsexmltag(tag/*:string*/, skip_root/*:?boolean*/) {
 | 
			
		||||
@ -22952,19 +22914,17 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
  cfb.FileIndex.map(function(fi, idx) {
 | 
			
		||||
    return [fi, cfb.FullPaths[idx]];
 | 
			
		||||
  }).forEach(function(row) {
 | 
			
		||||
    var fi = row[0], fp = row[1];
 | 
			
		||||
    var fi = row[0];
 | 
			
		||||
    if (!fi.name.match(/\.iwa/))
 | 
			
		||||
      return;
 | 
			
		||||
    var x2 = parse_iwa_file(decompress_iwa_file(fi.content));
 | 
			
		||||
    x2.forEach(function(ia) {
 | 
			
		||||
      ia.messages.forEach(function(m) {
 | 
			
		||||
        indices_varint.forEach(function(ivi) {
 | 
			
		||||
          if (ia.messages.some(function(mess) {
 | 
			
		||||
            return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
 | 
			
		||||
          })) {
 | 
			
		||||
            dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      indices_varint.forEach(function(ivi) {
 | 
			
		||||
        if (ia.messages.some(function(mess) {
 | 
			
		||||
          return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
 | 
			
		||||
        })) {
 | 
			
		||||
          dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
@ -23170,10 +23130,9 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
              delete tile[7];
 | 
			
		||||
              var rowload = new Uint8Array(tiledata[5][0].data);
 | 
			
		||||
              tiledata[5] = [];
 | 
			
		||||
              var cnt = 0;
 | 
			
		||||
              for (var R2 = 0; R2 <= range.e.r; ++R2) {
 | 
			
		||||
                var tilerow = parse_shallow(rowload);
 | 
			
		||||
                cnt += write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
 | 
			
		||||
                write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
 | 
			
		||||
                tilerow[1][0].data = write_varint49(R2);
 | 
			
		||||
                tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
 | 
			
		||||
              }
 | 
			
		||||
@ -23353,7 +23312,7 @@ function parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
		strs = [];
 | 
			
		||||
		if(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }
 | 
			
		||||
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"",dir.themes[0], opts);
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme_xml(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"", opts);
 | 
			
		||||
 | 
			
		||||
		if(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);
 | 
			
		||||
	}
 | 
			
		||||
@ -23538,10 +23497,6 @@ function parse_xlsxcfb(cfb, _opts/*:?ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
	throw new Error("File is password-protected");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* XLSX and XLSB writing are very similar.  Originally they were unified in one
 | 
			
		||||
   export function.  This is horrible for tree shaking in the common case (most
 | 
			
		||||
   applications need to export files in one format) so this function supports
 | 
			
		||||
   both formats while write_zip_xlsx only handles XLSX */
 | 
			
		||||
function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	_shapeid = 1024;
 | 
			
		||||
	if(wb && !wb.SSF) {
 | 
			
		||||
@ -23605,7 +23560,7 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
			/* falls through */
 | 
			
		||||
		default:
 | 
			
		||||
			f = "xl/worksheets/sheet" + rId + "." + wbext;
 | 
			
		||||
			zip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));
 | 
			
		||||
			zip_add_file(zip, f, write_ws_bin(rId-1, opts, wb, wsrels));
 | 
			
		||||
			ct.sheets.push(f);
 | 
			
		||||
			add_rels(opts.wbrels, -1, "worksheets/sheet" + rId + "." + wbext, RELS.WS[0]);
 | 
			
		||||
		}
 | 
			
		||||
@ -23616,7 +23571,7 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
			var cf = "";
 | 
			
		||||
			if(comments && comments.length > 0) {
 | 
			
		||||
				cf = "xl/comments" + rId + "." + wbext;
 | 
			
		||||
				zip_add_file(zip, cf, write_cmnt(comments, cf, opts));
 | 
			
		||||
				zip_add_file(zip, cf, write_comments_bin(comments, opts));
 | 
			
		||||
				ct.comments.push(cf);
 | 
			
		||||
				add_rels(wsrels, -1, "../comments" + rId + "." + wbext, RELS.CMNT);
 | 
			
		||||
				need_vml = true;
 | 
			
		||||
@ -23633,13 +23588,13 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
 | 
			
		||||
	if(opts.Strings != null && opts.Strings.length > 0) {
 | 
			
		||||
		f = "xl/sharedStrings." + wbext;
 | 
			
		||||
		zip_add_file(zip, f, write_sst(opts.Strings, f, opts));
 | 
			
		||||
		zip_add_file(zip, f, write_sst_bin(opts.Strings, opts));
 | 
			
		||||
		ct.strs.push(f);
 | 
			
		||||
		add_rels(opts.wbrels, -1, "sharedStrings." + wbext, RELS.SST);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/workbook." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_wb(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_wb_bin(wb, opts));
 | 
			
		||||
	ct.workbooks.push(f);
 | 
			
		||||
	add_rels(opts.rels, 1, f, RELS.WB);
 | 
			
		||||
 | 
			
		||||
@ -23653,7 +23608,7 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	/* TODO: something more intelligent with styles */
 | 
			
		||||
 | 
			
		||||
	f = "xl/styles." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_sty(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_sty_bin(wb, opts));
 | 
			
		||||
	ct.styles.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "styles." + wbext, RELS.STY);
 | 
			
		||||
 | 
			
		||||
@ -23665,7 +23620,7 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/metadata." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta(f));
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta_bin());
 | 
			
		||||
	ct.metadata.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "metadata." + wbext, RELS.XLMETA);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										139
									
								
								xlsx.js
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										139
									
								
								xlsx.js
									
									
									
										generated
									
									
									
								
							@ -4,7 +4,7 @@
 | 
			
		||||
/*global exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
 | 
			
		||||
var XLSX = {};
 | 
			
		||||
function make_xlsx_lib(XLSX){
 | 
			
		||||
XLSX.version = '0.18.5';
 | 
			
		||||
XLSX.version = '0.18.6';
 | 
			
		||||
var current_codepage = 1200, current_ansi = 1252;
 | 
			
		||||
/*global cptable:true, window */
 | 
			
		||||
var $cptable;
 | 
			
		||||
@ -4604,7 +4604,7 @@ var VT_UI4      = 0x0013;
 | 
			
		||||
//var VT_UI8      = 0x0015;
 | 
			
		||||
//var VT_INT      = 0x0016;
 | 
			
		||||
//var VT_UINT     = 0x0017;
 | 
			
		||||
var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPWSTR   = 0x001F;
 | 
			
		||||
var VT_FILETIME = 0x0040;
 | 
			
		||||
var VT_BLOB     = 0x0041;
 | 
			
		||||
@ -4616,7 +4616,7 @@ var VT_BLOB     = 0x0041;
 | 
			
		||||
var VT_CF       = 0x0047;
 | 
			
		||||
//var VT_CLSID    = 0x0048;
 | 
			
		||||
//var VT_VERSIONED_STREAM = 0x0049;
 | 
			
		||||
var VT_VECTOR   = 0x1000;
 | 
			
		||||
//var VT_VECTOR   = 0x1000;
 | 
			
		||||
var VT_VECTOR_VARIANT = 0x100C;
 | 
			
		||||
var VT_VECTOR_LPSTR   = 0x101E;
 | 
			
		||||
//var VT_ARRAY    = 0x2000;
 | 
			
		||||
@ -16268,16 +16268,16 @@ function parse_cs_xml(data, opts, idx, rels, wb) {
 | 
			
		||||
	if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];
 | 
			
		||||
	return s;
 | 
			
		||||
}
 | 
			
		||||
function write_cs_xml(idx, opts, wb, rels) {
 | 
			
		||||
	var o = [XML_HEADER, writextag('chartsheet', null, {
 | 
			
		||||
		'xmlns': XMLNS_main[0],
 | 
			
		||||
		'xmlns:r': XMLNS.r
 | 
			
		||||
	})];
 | 
			
		||||
	o[o.length] = writextag("drawing", null, {"r:id": "rId1"});
 | 
			
		||||
	add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW);
 | 
			
		||||
	if(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace("/>",">"); }
 | 
			
		||||
	return o.join("");
 | 
			
		||||
}
 | 
			
		||||
//function write_cs_xml(idx, opts, wb, rels) {
 | 
			
		||||
//	var o = [XML_HEADER, writextag('chartsheet', null, {
 | 
			
		||||
//		'xmlns': XMLNS_main[0],
 | 
			
		||||
//		'xmlns:r': XMLNS.r
 | 
			
		||||
//	})];
 | 
			
		||||
//	o[o.length] = writextag("drawing", null, {"r:id": "rId1"});
 | 
			
		||||
//	add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW);
 | 
			
		||||
//	if(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace("/>",">"); }
 | 
			
		||||
//	return o.join("");
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
/* [MS-XLSB] 2.4.331 BrtCsProp */
 | 
			
		||||
function parse_BrtCsProp(data, length) {
 | 
			
		||||
@ -16333,25 +16333,25 @@ function parse_cs_bin(data, opts, idx, rels, wb) {
 | 
			
		||||
	if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];
 | 
			
		||||
	return s;
 | 
			
		||||
}
 | 
			
		||||
function write_cs_bin() {
 | 
			
		||||
	var ba = buf_array();
 | 
			
		||||
	write_record(ba, 0x0081 /* BrtBeginSheet */);
 | 
			
		||||
	/* [BrtCsProp] */
 | 
			
		||||
	/* CSVIEWS */
 | 
			
		||||
	/* [[BrtCsProtectionIso] BrtCsProtection] */
 | 
			
		||||
	/* [USERCSVIEWS] */
 | 
			
		||||
	/* [BrtMargins] */
 | 
			
		||||
	/* [BrtCsPageSetup] */
 | 
			
		||||
	/* [HEADERFOOTER] */
 | 
			
		||||
	/* BrtDrawing */
 | 
			
		||||
	/* [BrtLegacyDrawing] */
 | 
			
		||||
	/* [BrtLegacyDrawingHF] */
 | 
			
		||||
	/* [BrtBkHim] */
 | 
			
		||||
	/* [WEBPUBITEMS] */
 | 
			
		||||
	/* FRTCHARTSHEET */
 | 
			
		||||
	write_record(ba, 0x0082 /* BrtEndSheet */);
 | 
			
		||||
	return ba.end();
 | 
			
		||||
}
 | 
			
		||||
//function write_cs_bin() {
 | 
			
		||||
//	var ba = buf_array();
 | 
			
		||||
//	write_record(ba, 0x0081 /* BrtBeginSheet */);
 | 
			
		||||
//	/* [BrtCsProp] */
 | 
			
		||||
//	/* CSVIEWS */
 | 
			
		||||
//	/* [[BrtCsProtectionIso] BrtCsProtection] */
 | 
			
		||||
//	/* [USERCSVIEWS] */
 | 
			
		||||
//	/* [BrtMargins] */
 | 
			
		||||
//	/* [BrtCsPageSetup] */
 | 
			
		||||
//	/* [HEADERFOOTER] */
 | 
			
		||||
//	/* BrtDrawing */
 | 
			
		||||
//	/* [BrtLegacyDrawing] */
 | 
			
		||||
//	/* [BrtLegacyDrawingHF] */
 | 
			
		||||
//	/* [BrtBkHim] */
 | 
			
		||||
//	/* [WEBPUBITEMS] */
 | 
			
		||||
//	/* FRTCHARTSHEET */
 | 
			
		||||
//	write_record(ba, 0x0082 /* BrtEndSheet */);
 | 
			
		||||
//	return ba.end();
 | 
			
		||||
//}
 | 
			
		||||
/* 18.2.28 (CT_WorkbookProtection) Defaults */
 | 
			
		||||
var WBPropsDef = [
 | 
			
		||||
	['allowRefreshQuery',           false, "bool"],
 | 
			
		||||
@ -17068,10 +17068,6 @@ function parse_sty(data, name, themes, opts) {
 | 
			
		||||
	return parse_sty_xml((data), themes, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_theme(data, name, opts) {
 | 
			
		||||
	return parse_theme_xml(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_sst(data, name, opts) {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_sst_bin((data), opts);
 | 
			
		||||
	return parse_sst_xml((data), opts);
 | 
			
		||||
@ -17096,40 +17092,6 @@ function parse_xlmeta(data, name, opts) {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_xlmeta_bin((data), name, opts);
 | 
			
		||||
	return parse_xlmeta_xml((data), name, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_wb(wb, name, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_wb_bin : write_wb_xml)(wb, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_ws(data, name, opts, wb, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line no-unused-vars
 | 
			
		||||
function write_cs(data, name, opts, wb, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sty(data, name, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sty_bin : write_sty_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sst(data, name, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sst_bin : write_sst_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_cmnt(data, name, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_comments_bin : write_comments_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
function write_cc(data, name:string, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cc_bin : write_cc_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
function write_xlmeta(name) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_xlmeta_bin : write_xlmeta_xml)();
 | 
			
		||||
}
 | 
			
		||||
var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
 | 
			
		||||
var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;
 | 
			
		||||
function xlml_parsexmltag(tag, skip_root) {
 | 
			
		||||
@ -22842,19 +22804,17 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
  cfb.FileIndex.map(function(fi, idx) {
 | 
			
		||||
    return [fi, cfb.FullPaths[idx]];
 | 
			
		||||
  }).forEach(function(row) {
 | 
			
		||||
    var fi = row[0], fp = row[1];
 | 
			
		||||
    var fi = row[0];
 | 
			
		||||
    if (!fi.name.match(/\.iwa/))
 | 
			
		||||
      return;
 | 
			
		||||
    var x2 = parse_iwa_file(decompress_iwa_file(fi.content));
 | 
			
		||||
    x2.forEach(function(ia) {
 | 
			
		||||
      ia.messages.forEach(function(m) {
 | 
			
		||||
        indices_varint.forEach(function(ivi) {
 | 
			
		||||
          if (ia.messages.some(function(mess) {
 | 
			
		||||
            return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
 | 
			
		||||
          })) {
 | 
			
		||||
            dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      indices_varint.forEach(function(ivi) {
 | 
			
		||||
        if (ia.messages.some(function(mess) {
 | 
			
		||||
          return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
 | 
			
		||||
        })) {
 | 
			
		||||
          dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
@ -23060,10 +23020,9 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
              delete tile[7];
 | 
			
		||||
              var rowload = new Uint8Array(tiledata[5][0].data);
 | 
			
		||||
              tiledata[5] = [];
 | 
			
		||||
              var cnt = 0;
 | 
			
		||||
              for (var R2 = 0; R2 <= range.e.r; ++R2) {
 | 
			
		||||
                var tilerow = parse_shallow(rowload);
 | 
			
		||||
                cnt += write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
 | 
			
		||||
                write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
 | 
			
		||||
                tilerow[1][0].data = write_varint49(R2);
 | 
			
		||||
                tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
 | 
			
		||||
              }
 | 
			
		||||
@ -23243,7 +23202,7 @@ function parse_zip(zip, opts) {
 | 
			
		||||
		strs = [];
 | 
			
		||||
		if(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }
 | 
			
		||||
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"",dir.themes[0], opts);
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme_xml(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"", opts);
 | 
			
		||||
 | 
			
		||||
		if(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);
 | 
			
		||||
	}
 | 
			
		||||
@ -23426,10 +23385,6 @@ if(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std7
 | 
			
		||||
	throw new Error("File is password-protected");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* XLSX and XLSB writing are very similar.  Originally they were unified in one
 | 
			
		||||
   export function.  This is horrible for tree shaking in the common case (most
 | 
			
		||||
   applications need to export files in one format) so this function supports
 | 
			
		||||
   both formats while write_zip_xlsx only handles XLSX */
 | 
			
		||||
function write_zip_xlsb(wb, opts) {
 | 
			
		||||
	_shapeid = 1024;
 | 
			
		||||
	if(wb && !wb.SSF) {
 | 
			
		||||
@ -23492,7 +23447,7 @@ f = "docProps/app.xml";
 | 
			
		||||
			/* falls through */
 | 
			
		||||
		default:
 | 
			
		||||
			f = "xl/worksheets/sheet" + rId + "." + wbext;
 | 
			
		||||
			zip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));
 | 
			
		||||
			zip_add_file(zip, f, write_ws_bin(rId-1, opts, wb, wsrels));
 | 
			
		||||
			ct.sheets.push(f);
 | 
			
		||||
			add_rels(opts.wbrels, -1, "worksheets/sheet" + rId + "." + wbext, RELS.WS[0]);
 | 
			
		||||
		}
 | 
			
		||||
@ -23503,7 +23458,7 @@ f = "docProps/app.xml";
 | 
			
		||||
			var cf = "";
 | 
			
		||||
			if(comments && comments.length > 0) {
 | 
			
		||||
				cf = "xl/comments" + rId + "." + wbext;
 | 
			
		||||
				zip_add_file(zip, cf, write_cmnt(comments, cf, opts));
 | 
			
		||||
				zip_add_file(zip, cf, write_comments_bin(comments, opts));
 | 
			
		||||
				ct.comments.push(cf);
 | 
			
		||||
				add_rels(wsrels, -1, "../comments" + rId + "." + wbext, RELS.CMNT);
 | 
			
		||||
				need_vml = true;
 | 
			
		||||
@ -23520,13 +23475,13 @@ f = "docProps/app.xml";
 | 
			
		||||
 | 
			
		||||
	if(opts.Strings != null && opts.Strings.length > 0) {
 | 
			
		||||
		f = "xl/sharedStrings." + wbext;
 | 
			
		||||
		zip_add_file(zip, f, write_sst(opts.Strings, f, opts));
 | 
			
		||||
		zip_add_file(zip, f, write_sst_bin(opts.Strings, opts));
 | 
			
		||||
		ct.strs.push(f);
 | 
			
		||||
		add_rels(opts.wbrels, -1, "sharedStrings." + wbext, RELS.SST);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/workbook." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_wb(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_wb_bin(wb, opts));
 | 
			
		||||
	ct.workbooks.push(f);
 | 
			
		||||
	add_rels(opts.rels, 1, f, RELS.WB);
 | 
			
		||||
 | 
			
		||||
@ -23540,7 +23495,7 @@ f = "docProps/app.xml";
 | 
			
		||||
	/* TODO: something more intelligent with styles */
 | 
			
		||||
 | 
			
		||||
	f = "xl/styles." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_sty(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_sty_bin(wb, opts));
 | 
			
		||||
	ct.styles.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "styles." + wbext, RELS.STY);
 | 
			
		||||
 | 
			
		||||
@ -23552,7 +23507,7 @@ f = "docProps/app.xml";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/metadata." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta(f));
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta_bin());
 | 
			
		||||
	ct.metadata.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "metadata." + wbext, RELS.XLMETA);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
/*global exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
 | 
			
		||||
var XLSX = {};
 | 
			
		||||
function make_xlsx_lib(XLSX){
 | 
			
		||||
XLSX.version = '0.18.5';
 | 
			
		||||
XLSX.version = '0.18.6';
 | 
			
		||||
var current_codepage = 1200, current_ansi = 1252;
 | 
			
		||||
 | 
			
		||||
var VALID_ANSI = [ 874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 10000 ];
 | 
			
		||||
@ -967,7 +967,7 @@ function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {
 | 
			
		||||
			case 'A': case 'a': case '上':
 | 
			
		||||
				var q={t:c, v:c};
 | 
			
		||||
				if(dt==null) dt=SSF_parse_date_code(v, opts);
 | 
			
		||||
				if(fmt.substr(i, 3).toUpperCase() === "A/P") { if(dt!=null) q.v = dt.H >= 12 ? "P" : "A"; q.t = 'T'; hr='h';i+=3;}
 | 
			
		||||
				if(fmt.substr(i, 3).toUpperCase() === "A/P") { if(dt!=null) q.v = dt.H >= 12 ? fmt.charAt(i+2) : c; q.t = 'T'; hr='h';i+=3;}
 | 
			
		||||
				else if(fmt.substr(i,5).toUpperCase() === "AM/PM") { if(dt!=null) q.v = dt.H >= 12 ? "PM" : "AM"; q.t = 'T'; i+=5; hr='h'; }
 | 
			
		||||
				else if(fmt.substr(i,5).toUpperCase() === "上午/下午") { if(dt!=null) q.v = dt.H >= 12 ? "下午" : "上午"; q.t = 'T'; i+=5; hr='h'; }
 | 
			
		||||
				else { q.t = "t"; ++i; }
 | 
			
		||||
@ -1299,6 +1299,15 @@ function dateNF_fix(str/*:string*/, dateNF/*:string*/, match/*:Array<string>*/)/
 | 
			
		||||
	return datestr + "T" + timestr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* table of bad formats written by third-party tools */
 | 
			
		||||
var bad_formats = {
 | 
			
		||||
	"d.m": "d\\.m" // Issue #2571 Google Sheets writes invalid format 'd.m', correct format is 'd"."m' or 'd\\.m'
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function SSF__load(fmt, idx) {
 | 
			
		||||
	return SSF_load(bad_formats[fmt] || fmt, idx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*::
 | 
			
		||||
declare var ReadShift:any;
 | 
			
		||||
declare var CheckField:any;
 | 
			
		||||
@ -1434,7 +1443,7 @@ return CRC32;
 | 
			
		||||
/* [MS-CFB] v20171201 */
 | 
			
		||||
var CFB = /*#__PURE__*/(function _CFB(){
 | 
			
		||||
var exports/*:CFBModule*/ = /*::(*/{}/*:: :any)*/;
 | 
			
		||||
exports.version = '1.2.1';
 | 
			
		||||
exports.version = '1.2.2';
 | 
			
		||||
/* [MS-CFB] 2.6.4 */
 | 
			
		||||
function namecmp(l/*:string*/, r/*:string*/)/*:number*/ {
 | 
			
		||||
	var L = l.split("/"), R = r.split("/");
 | 
			
		||||
@ -1734,7 +1743,7 @@ function sleuth_fat(idx/*:number*/, cnt/*:number*/, sectors/*:Array<RawBytes>*/,
 | 
			
		||||
			if((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;
 | 
			
		||||
			fat_addrs.push(q);
 | 
			
		||||
		}
 | 
			
		||||
		sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);
 | 
			
		||||
		if(cnt >= 1) sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1910,7 +1919,9 @@ function rebuild_cfb(cfb/*:CFBContainer*/, f/*:?boolean*/)/*:void*/ {
 | 
			
		||||
	for(i = 0; i < data.length; ++i) {
 | 
			
		||||
		var dad = dirname(data[i][0]);
 | 
			
		||||
		s = fullPaths[dad];
 | 
			
		||||
		if(!s) {
 | 
			
		||||
		while(!s) {
 | 
			
		||||
			while(dirname(dad) && !fullPaths[dirname(dad)]) dad = dirname(dad);
 | 
			
		||||
 | 
			
		||||
			data.push([dad, ({
 | 
			
		||||
				name: filename(dad).replace("/",""),
 | 
			
		||||
				type: 1,
 | 
			
		||||
@ -1918,8 +1929,12 @@ function rebuild_cfb(cfb/*:CFBContainer*/, f/*:?boolean*/)/*:void*/ {
 | 
			
		||||
				ct: now, mt: now,
 | 
			
		||||
				content: null
 | 
			
		||||
			}/*:any*/)]);
 | 
			
		||||
 | 
			
		||||
			// Add name to set
 | 
			
		||||
			fullPaths[dad] = true;
 | 
			
		||||
 | 
			
		||||
			dad = dirname(data[i][0]);
 | 
			
		||||
			s = fullPaths[dad];
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -1967,7 +1982,6 @@ function _write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|strin
 | 
			
		||||
		for(var i = 0; i < cfb.FileIndex.length; ++i) {
 | 
			
		||||
			var file = cfb.FileIndex[i];
 | 
			
		||||
			if(!file.content) continue;
 | 
			
		||||
			/*:: if(file.content == null) throw new Error("unreachable"); */
 | 
			
		||||
			var flen = file.content.length;
 | 
			
		||||
			if(flen > 0){
 | 
			
		||||
				if(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;
 | 
			
		||||
@ -2058,6 +2072,10 @@ function _write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|strin
 | 
			
		||||
		file = cfb.FileIndex[i];
 | 
			
		||||
		if(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;
 | 
			
		||||
		var _nm/*:string*/ = (i === 0 && _opts.root) || file.name;
 | 
			
		||||
		if(_nm.length > 32) {
 | 
			
		||||
			console.error("Name " + _nm + " will be truncated to " + _nm.slice(0,32));
 | 
			
		||||
			_nm = _nm.slice(0, 32);
 | 
			
		||||
		}
 | 
			
		||||
		flen = 2*(_nm.length+1);
 | 
			
		||||
		o.write_shift(64, _nm, "utf16le");
 | 
			
		||||
		o.write_shift(2, flen);
 | 
			
		||||
@ -2696,6 +2714,7 @@ function parse_zip(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/
 | 
			
		||||
		parse_local_file(blob, csz, usz, o, EF);
 | 
			
		||||
		blob.l = L;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4338,7 +4357,7 @@ var VT_UI4      = 0x0013;
 | 
			
		||||
//var VT_UI8      = 0x0015;
 | 
			
		||||
//var VT_INT      = 0x0016;
 | 
			
		||||
//var VT_UINT     = 0x0017;
 | 
			
		||||
var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPWSTR   = 0x001F;
 | 
			
		||||
var VT_FILETIME = 0x0040;
 | 
			
		||||
var VT_BLOB     = 0x0041;
 | 
			
		||||
@ -4350,7 +4369,7 @@ var VT_BLOB     = 0x0041;
 | 
			
		||||
var VT_CF       = 0x0047;
 | 
			
		||||
//var VT_CLSID    = 0x0048;
 | 
			
		||||
//var VT_VERSIONED_STREAM = 0x0049;
 | 
			
		||||
var VT_VECTOR   = 0x1000;
 | 
			
		||||
//var VT_VECTOR   = 0x1000;
 | 
			
		||||
var VT_VECTOR_VARIANT = 0x100C;
 | 
			
		||||
var VT_VECTOR_LPSTR   = 0x101E;
 | 
			
		||||
//var VT_ARRAY    = 0x2000;
 | 
			
		||||
@ -7025,7 +7044,7 @@ function parse_numFmts(t, styles, opts) {
 | 
			
		||||
						for(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;
 | 
			
		||||
						styles.NumberFmt[j] = f;
 | 
			
		||||
					}
 | 
			
		||||
					SSF_load(f,j);
 | 
			
		||||
					SSF__load(f,j);
 | 
			
		||||
				}
 | 
			
		||||
			} break;
 | 
			
		||||
			case '</numFmt>': break;
 | 
			
		||||
@ -8061,7 +8080,7 @@ function get_cell_style(styles/*:Array<any>*/, cell/*:Cell*/, opts) {
 | 
			
		||||
	var i = 0x3c, len = styles.length;
 | 
			
		||||
	if(z == null && opts.ssf) {
 | 
			
		||||
		for(; i < 0x188; ++i) if(opts.ssf[i] == null) {
 | 
			
		||||
			SSF_load(cell.z, i);
 | 
			
		||||
			SSF__load(cell.z, i);
 | 
			
		||||
			// $FlowIgnore
 | 
			
		||||
			opts.ssf[i] = cell.z;
 | 
			
		||||
			opts.revssf[cell.z] = z = i;
 | 
			
		||||
@ -8087,7 +8106,7 @@ function safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, the
 | 
			
		||||
	if(p.t === 'z' && !opts.cellStyles) return;
 | 
			
		||||
	if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
 | 
			
		||||
	if((!opts || opts.cellText !== false) && p.t !== 'z') try {
 | 
			
		||||
		if(table_fmt[fmtid] == null) SSF_load(SSFImplicit[fmtid] || "General", fmtid);
 | 
			
		||||
		if(table_fmt[fmtid] == null) SSF__load(SSFImplicit[fmtid] || "General", fmtid);
 | 
			
		||||
		if(p.t === 'e') p.w = p.w || BErr[p.v];
 | 
			
		||||
		else if(fmtid === 0) {
 | 
			
		||||
			if(p.t === 'n') {
 | 
			
		||||
@ -9276,10 +9295,6 @@ function parse_sty(data, name/*:string*/, themes, opts) {
 | 
			
		||||
	return parse_sty_xml((data/*:any*/), themes, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_theme(data/*:string*/, name/*:string*/, opts) {
 | 
			
		||||
	return parse_theme_xml(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_sst(data, name/*:string*/, opts)/*:SST*/ {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_sst_bin((data/*:any*/), opts);
 | 
			
		||||
	return parse_sst_xml((data/*:any*/), opts);
 | 
			
		||||
@ -9304,40 +9319,6 @@ function parse_xlmeta(data, name/*:string*/, opts) {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_xlmeta_bin((data/*:any*/), name, opts);
 | 
			
		||||
	return parse_xlmeta_xml((data/*:any*/), name, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_wb(wb, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_wb_bin : write_wb_xml)(wb, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_ws(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line no-unused-vars
 | 
			
		||||
function write_cs(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sty(data, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sty_bin : write_sty_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sst(data/*:SST*/, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sst_bin : write_sst_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_cmnt(data/*:Array<any>*/, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_comments_bin : write_comments_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
function write_cc(data, name:string, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cc_bin : write_cc_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
function write_xlmeta(name/*:string*/) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_xlmeta_bin : write_xlmeta_xml)();
 | 
			
		||||
}
 | 
			
		||||
/* note: browser DOM element cannot see mso- style attrs, must parse */
 | 
			
		||||
function html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {
 | 
			
		||||
	var opts = _opts || {};
 | 
			
		||||
@ -10584,7 +10565,7 @@ function parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
		strs = [];
 | 
			
		||||
		if(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }
 | 
			
		||||
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"",dir.themes[0], opts);
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme_xml(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"", opts);
 | 
			
		||||
 | 
			
		||||
		if(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);
 | 
			
		||||
	}
 | 
			
		||||
@ -10769,18 +10750,7 @@ function parse_xlsxcfb(cfb, _opts/*:?ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
	throw new Error("File is password-protected");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_zip(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	if(opts.bookType == "ods") return write_ods(wb, opts);
 | 
			
		||||
	if(opts.bookType == "numbers") return write_numbers_iwa(wb, opts);
 | 
			
		||||
	if(opts.bookType == "xlsb") return write_zip_xlsxb(wb, opts);
 | 
			
		||||
	return write_zip_xlsx(wb, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* XLSX and XLSB writing are very similar.  Originally they were unified in one
 | 
			
		||||
   export function.  This is horrible for tree shaking in the common case (most
 | 
			
		||||
   applications need to export files in one format) so this function supports
 | 
			
		||||
   both formats while write_zip_xlsx only handles XLSX */
 | 
			
		||||
function write_zip_xlsxb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	_shapeid = 1024;
 | 
			
		||||
	if(wb && !wb.SSF) {
 | 
			
		||||
		wb.SSF = dup(table_fmt);
 | 
			
		||||
@ -10843,7 +10813,7 @@ function write_zip_xlsxb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
			/* falls through */
 | 
			
		||||
		default:
 | 
			
		||||
			f = "xl/worksheets/sheet" + rId + "." + wbext;
 | 
			
		||||
			zip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));
 | 
			
		||||
			zip_add_file(zip, f, write_ws_bin(rId-1, opts, wb, wsrels));
 | 
			
		||||
			ct.sheets.push(f);
 | 
			
		||||
			add_rels(opts.wbrels, -1, "worksheets/sheet" + rId + "." + wbext, RELS.WS[0]);
 | 
			
		||||
		}
 | 
			
		||||
@ -10854,7 +10824,7 @@ function write_zip_xlsxb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
			var cf = "";
 | 
			
		||||
			if(comments && comments.length > 0) {
 | 
			
		||||
				cf = "xl/comments" + rId + "." + wbext;
 | 
			
		||||
				zip_add_file(zip, cf, write_cmnt(comments, cf, opts));
 | 
			
		||||
				zip_add_file(zip, cf, write_comments_bin(comments, opts));
 | 
			
		||||
				ct.comments.push(cf);
 | 
			
		||||
				add_rels(wsrels, -1, "../comments" + rId + "." + wbext, RELS.CMNT);
 | 
			
		||||
				need_vml = true;
 | 
			
		||||
@ -10871,13 +10841,13 @@ function write_zip_xlsxb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
 | 
			
		||||
	if(opts.Strings != null && opts.Strings.length > 0) {
 | 
			
		||||
		f = "xl/sharedStrings." + wbext;
 | 
			
		||||
		zip_add_file(zip, f, write_sst(opts.Strings, f, opts));
 | 
			
		||||
		zip_add_file(zip, f, write_sst_bin(opts.Strings, opts));
 | 
			
		||||
		ct.strs.push(f);
 | 
			
		||||
		add_rels(opts.wbrels, -1, "sharedStrings." + wbext, RELS.SST);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/workbook." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_wb(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_wb_bin(wb, opts));
 | 
			
		||||
	ct.workbooks.push(f);
 | 
			
		||||
	add_rels(opts.rels, 1, f, RELS.WB);
 | 
			
		||||
 | 
			
		||||
@ -10891,7 +10861,7 @@ function write_zip_xlsxb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	/* TODO: something more intelligent with styles */
 | 
			
		||||
 | 
			
		||||
	f = "xl/styles." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_sty(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_sty_bin(wb, opts));
 | 
			
		||||
	ct.styles.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "styles." + wbext, RELS.STY);
 | 
			
		||||
 | 
			
		||||
@ -10903,7 +10873,7 @@ function write_zip_xlsxb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/metadata." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta(f));
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta_bin());
 | 
			
		||||
	ct.metadata.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "metadata." + wbext, RELS.XLMETA);
 | 
			
		||||
 | 
			
		||||
@ -11200,6 +11170,15 @@ function write_cfb_ctr(cfb/*:CFBContainer*/, o/*:WriteOpts*/)/*:any*/ {
 | 
			
		||||
	return CFB.write(cfb, o);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_zip(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	switch(opts.bookType) {
 | 
			
		||||
		case "ods": return write_ods(wb, opts);
 | 
			
		||||
		case "numbers": return write_numbers_iwa(wb, opts);
 | 
			
		||||
		case "xlsb": return write_zip_xlsb(wb, opts);
 | 
			
		||||
		default: return write_zip_xlsx(wb, opts);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*:: declare var encrypt_agile:any; */
 | 
			
		||||
function write_zip_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {
 | 
			
		||||
	var o = dup(opts||{});
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										116
									
								
								xlsx.mini.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										116
									
								
								xlsx.mini.js
									
									
									
									
									
								
							@ -4,7 +4,7 @@
 | 
			
		||||
/*global exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
 | 
			
		||||
var XLSX = {};
 | 
			
		||||
function make_xlsx_lib(XLSX){
 | 
			
		||||
XLSX.version = '0.18.5';
 | 
			
		||||
XLSX.version = '0.18.6';
 | 
			
		||||
var current_codepage = 1200, current_ansi = 1252;
 | 
			
		||||
 | 
			
		||||
var VALID_ANSI = [ 874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 10000 ];
 | 
			
		||||
@ -945,7 +945,7 @@ function eval_fmt(fmt, v, opts, flen) {
 | 
			
		||||
			case 'A': case 'a': case '上':
 | 
			
		||||
				var q={t:c, v:c};
 | 
			
		||||
				if(dt==null) dt=SSF_parse_date_code(v, opts);
 | 
			
		||||
				if(fmt.substr(i, 3).toUpperCase() === "A/P") { if(dt!=null) q.v = dt.H >= 12 ? "P" : "A"; q.t = 'T'; hr='h';i+=3;}
 | 
			
		||||
				if(fmt.substr(i, 3).toUpperCase() === "A/P") { if(dt!=null) q.v = dt.H >= 12 ? fmt.charAt(i+2) : c; q.t = 'T'; hr='h';i+=3;}
 | 
			
		||||
				else if(fmt.substr(i,5).toUpperCase() === "AM/PM") { if(dt!=null) q.v = dt.H >= 12 ? "PM" : "AM"; q.t = 'T'; i+=5; hr='h'; }
 | 
			
		||||
				else if(fmt.substr(i,5).toUpperCase() === "上午/下午") { if(dt!=null) q.v = dt.H >= 12 ? "下午" : "上午"; q.t = 'T'; i+=5; hr='h'; }
 | 
			
		||||
				else { q.t = "t"; ++i; }
 | 
			
		||||
@ -1270,6 +1270,15 @@ function dateNF_fix(str, dateNF, match) {
 | 
			
		||||
	return datestr + "T" + timestr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* table of bad formats written by third-party tools */
 | 
			
		||||
var bad_formats = {
 | 
			
		||||
	"d.m": "d\\.m" // Issue #2571 Google Sheets writes invalid format 'd.m', correct format is 'd"."m' or 'd\\.m'
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function SSF__load(fmt, idx) {
 | 
			
		||||
	return SSF_load(bad_formats[fmt] || fmt, idx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */
 | 
			
		||||
/* vim: set ts=2: */
 | 
			
		||||
/*jshint eqnull:true */
 | 
			
		||||
@ -1373,7 +1382,7 @@ return CRC32;
 | 
			
		||||
/* [MS-CFB] v20171201 */
 | 
			
		||||
var CFB = (function _CFB(){
 | 
			
		||||
var exports = {};
 | 
			
		||||
exports.version = '1.2.1';
 | 
			
		||||
exports.version = '1.2.2';
 | 
			
		||||
/* [MS-CFB] 2.6.4 */
 | 
			
		||||
function namecmp(l, r) {
 | 
			
		||||
	var L = l.split("/"), R = r.split("/");
 | 
			
		||||
@ -1673,7 +1682,7 @@ function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {
 | 
			
		||||
			if((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;
 | 
			
		||||
			fat_addrs.push(q);
 | 
			
		||||
		}
 | 
			
		||||
		sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);
 | 
			
		||||
		if(cnt >= 1) sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1849,7 +1858,9 @@ function rebuild_cfb(cfb, f) {
 | 
			
		||||
	for(i = 0; i < data.length; ++i) {
 | 
			
		||||
		var dad = dirname(data[i][0]);
 | 
			
		||||
		s = fullPaths[dad];
 | 
			
		||||
		if(!s) {
 | 
			
		||||
		while(!s) {
 | 
			
		||||
			while(dirname(dad) && !fullPaths[dirname(dad)]) dad = dirname(dad);
 | 
			
		||||
 | 
			
		||||
			data.push([dad, ({
 | 
			
		||||
				name: filename(dad).replace("/",""),
 | 
			
		||||
				type: 1,
 | 
			
		||||
@ -1857,8 +1868,12 @@ function rebuild_cfb(cfb, f) {
 | 
			
		||||
				ct: now, mt: now,
 | 
			
		||||
				content: null
 | 
			
		||||
			})]);
 | 
			
		||||
 | 
			
		||||
			// Add name to set
 | 
			
		||||
			fullPaths[dad] = true;
 | 
			
		||||
 | 
			
		||||
			dad = dirname(data[i][0]);
 | 
			
		||||
			s = fullPaths[dad];
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -1906,7 +1921,7 @@ function _write(cfb, options) {
 | 
			
		||||
		for(var i = 0; i < cfb.FileIndex.length; ++i) {
 | 
			
		||||
			var file = cfb.FileIndex[i];
 | 
			
		||||
			if(!file.content) continue;
 | 
			
		||||
var flen = file.content.length;
 | 
			
		||||
			var flen = file.content.length;
 | 
			
		||||
			if(flen > 0){
 | 
			
		||||
				if(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;
 | 
			
		||||
				else fat_size += (flen + 0x01FF) >> 9;
 | 
			
		||||
@ -1994,6 +2009,10 @@ flen = file.content.length;
 | 
			
		||||
		file = cfb.FileIndex[i];
 | 
			
		||||
		if(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;
 | 
			
		||||
		var _nm = (i === 0 && _opts.root) || file.name;
 | 
			
		||||
		if(_nm.length > 32) {
 | 
			
		||||
			console.error("Name " + _nm + " will be truncated to " + _nm.slice(0,32));
 | 
			
		||||
			_nm = _nm.slice(0, 32);
 | 
			
		||||
		}
 | 
			
		||||
		flen = 2*(_nm.length+1);
 | 
			
		||||
		o.write_shift(64, _nm, "utf16le");
 | 
			
		||||
		o.write_shift(2, flen);
 | 
			
		||||
@ -2629,6 +2648,7 @@ function parse_zip(file, options) {
 | 
			
		||||
		parse_local_file(blob, csz, usz, o, EF);
 | 
			
		||||
		blob.l = L;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4253,7 +4273,7 @@ var VT_UI4      = 0x0013;
 | 
			
		||||
//var VT_UI8      = 0x0015;
 | 
			
		||||
//var VT_INT      = 0x0016;
 | 
			
		||||
//var VT_UINT     = 0x0017;
 | 
			
		||||
var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPWSTR   = 0x001F;
 | 
			
		||||
var VT_FILETIME = 0x0040;
 | 
			
		||||
var VT_BLOB     = 0x0041;
 | 
			
		||||
@ -4265,7 +4285,7 @@ var VT_BLOB     = 0x0041;
 | 
			
		||||
var VT_CF       = 0x0047;
 | 
			
		||||
//var VT_CLSID    = 0x0048;
 | 
			
		||||
//var VT_VERSIONED_STREAM = 0x0049;
 | 
			
		||||
var VT_VECTOR   = 0x1000;
 | 
			
		||||
//var VT_VECTOR   = 0x1000;
 | 
			
		||||
var VT_VECTOR_VARIANT = 0x100C;
 | 
			
		||||
var VT_VECTOR_LPSTR   = 0x101E;
 | 
			
		||||
//var VT_ARRAY    = 0x2000;
 | 
			
		||||
@ -6939,7 +6959,7 @@ function parse_numFmts(t, styles, opts) {
 | 
			
		||||
						for(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;
 | 
			
		||||
						styles.NumberFmt[j] = f;
 | 
			
		||||
					}
 | 
			
		||||
					SSF_load(f,j);
 | 
			
		||||
					SSF__load(f,j);
 | 
			
		||||
				}
 | 
			
		||||
			} break;
 | 
			
		||||
			case '</numFmt>': break;
 | 
			
		||||
@ -7975,7 +7995,7 @@ function get_cell_style(styles, cell, opts) {
 | 
			
		||||
	var i = 0x3c, len = styles.length;
 | 
			
		||||
	if(z == null && opts.ssf) {
 | 
			
		||||
		for(; i < 0x188; ++i) if(opts.ssf[i] == null) {
 | 
			
		||||
			SSF_load(cell.z, i);
 | 
			
		||||
			SSF__load(cell.z, i);
 | 
			
		||||
			// $FlowIgnore
 | 
			
		||||
			opts.ssf[i] = cell.z;
 | 
			
		||||
			opts.revssf[cell.z] = z = i;
 | 
			
		||||
@ -8001,7 +8021,7 @@ function safe_format(p, fmtid, fillid, opts, themes, styles) {
 | 
			
		||||
	if(p.t === 'z' && !opts.cellStyles) return;
 | 
			
		||||
	if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
 | 
			
		||||
	if((!opts || opts.cellText !== false) && p.t !== 'z') try {
 | 
			
		||||
		if(table_fmt[fmtid] == null) SSF_load(SSFImplicit[fmtid] || "General", fmtid);
 | 
			
		||||
		if(table_fmt[fmtid] == null) SSF__load(SSFImplicit[fmtid] || "General", fmtid);
 | 
			
		||||
		if(p.t === 'e') p.w = p.w || BErr[p.v];
 | 
			
		||||
		else if(fmtid === 0) {
 | 
			
		||||
			if(p.t === 'n') {
 | 
			
		||||
@ -9188,10 +9208,6 @@ function parse_sty(data, name, themes, opts) {
 | 
			
		||||
	return parse_sty_xml((data), themes, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_theme(data, name, opts) {
 | 
			
		||||
	return parse_theme_xml(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_sst(data, name, opts) {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_sst_bin((data), opts);
 | 
			
		||||
	return parse_sst_xml((data), opts);
 | 
			
		||||
@ -9216,40 +9232,6 @@ function parse_xlmeta(data, name, opts) {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_xlmeta_bin((data), name, opts);
 | 
			
		||||
	return parse_xlmeta_xml((data), name, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_wb(wb, name, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_wb_bin : write_wb_xml)(wb, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_ws(data, name, opts, wb, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line no-unused-vars
 | 
			
		||||
function write_cs(data, name, opts, wb, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sty(data, name, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sty_bin : write_sty_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sst(data, name, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sst_bin : write_sst_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_cmnt(data, name, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_comments_bin : write_comments_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
function write_cc(data, name:string, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cc_bin : write_cc_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
function write_xlmeta(name) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_xlmeta_bin : write_xlmeta_xml)();
 | 
			
		||||
}
 | 
			
		||||
/* note: browser DOM element cannot see mso- style attrs, must parse */
 | 
			
		||||
function html_to_sheet(str, _opts) {
 | 
			
		||||
	var opts = _opts || {};
 | 
			
		||||
@ -10496,7 +10478,7 @@ function parse_zip(zip, opts) {
 | 
			
		||||
		strs = [];
 | 
			
		||||
		if(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }
 | 
			
		||||
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"",dir.themes[0], opts);
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme_xml(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"", opts);
 | 
			
		||||
 | 
			
		||||
		if(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);
 | 
			
		||||
	}
 | 
			
		||||
@ -10679,18 +10661,7 @@ if(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std7
 | 
			
		||||
	throw new Error("File is password-protected");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_zip(wb, opts) {
 | 
			
		||||
	if(opts.bookType == "ods") return write_ods(wb, opts);
 | 
			
		||||
	if(opts.bookType == "numbers") return write_numbers_iwa(wb, opts);
 | 
			
		||||
	if(opts.bookType == "xlsb") return write_zip_xlsxb(wb, opts);
 | 
			
		||||
	return write_zip_xlsx(wb, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* XLSX and XLSB writing are very similar.  Originally they were unified in one
 | 
			
		||||
   export function.  This is horrible for tree shaking in the common case (most
 | 
			
		||||
   applications need to export files in one format) so this function supports
 | 
			
		||||
   both formats while write_zip_xlsx only handles XLSX */
 | 
			
		||||
function write_zip_xlsxb(wb, opts) {
 | 
			
		||||
function write_zip_xlsb(wb, opts) {
 | 
			
		||||
	_shapeid = 1024;
 | 
			
		||||
	if(wb && !wb.SSF) {
 | 
			
		||||
		wb.SSF = dup(table_fmt);
 | 
			
		||||
@ -10752,7 +10723,7 @@ f = "docProps/app.xml";
 | 
			
		||||
			/* falls through */
 | 
			
		||||
		default:
 | 
			
		||||
			f = "xl/worksheets/sheet" + rId + "." + wbext;
 | 
			
		||||
			zip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));
 | 
			
		||||
			zip_add_file(zip, f, write_ws_bin(rId-1, opts, wb, wsrels));
 | 
			
		||||
			ct.sheets.push(f);
 | 
			
		||||
			add_rels(opts.wbrels, -1, "worksheets/sheet" + rId + "." + wbext, RELS.WS[0]);
 | 
			
		||||
		}
 | 
			
		||||
@ -10763,7 +10734,7 @@ f = "docProps/app.xml";
 | 
			
		||||
			var cf = "";
 | 
			
		||||
			if(comments && comments.length > 0) {
 | 
			
		||||
				cf = "xl/comments" + rId + "." + wbext;
 | 
			
		||||
				zip_add_file(zip, cf, write_cmnt(comments, cf, opts));
 | 
			
		||||
				zip_add_file(zip, cf, write_comments_bin(comments, opts));
 | 
			
		||||
				ct.comments.push(cf);
 | 
			
		||||
				add_rels(wsrels, -1, "../comments" + rId + "." + wbext, RELS.CMNT);
 | 
			
		||||
				need_vml = true;
 | 
			
		||||
@ -10780,13 +10751,13 @@ f = "docProps/app.xml";
 | 
			
		||||
 | 
			
		||||
	if(opts.Strings != null && opts.Strings.length > 0) {
 | 
			
		||||
		f = "xl/sharedStrings." + wbext;
 | 
			
		||||
		zip_add_file(zip, f, write_sst(opts.Strings, f, opts));
 | 
			
		||||
		zip_add_file(zip, f, write_sst_bin(opts.Strings, opts));
 | 
			
		||||
		ct.strs.push(f);
 | 
			
		||||
		add_rels(opts.wbrels, -1, "sharedStrings." + wbext, RELS.SST);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/workbook." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_wb(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_wb_bin(wb, opts));
 | 
			
		||||
	ct.workbooks.push(f);
 | 
			
		||||
	add_rels(opts.rels, 1, f, RELS.WB);
 | 
			
		||||
 | 
			
		||||
@ -10800,7 +10771,7 @@ f = "docProps/app.xml";
 | 
			
		||||
	/* TODO: something more intelligent with styles */
 | 
			
		||||
 | 
			
		||||
	f = "xl/styles." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_sty(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_sty_bin(wb, opts));
 | 
			
		||||
	ct.styles.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "styles." + wbext, RELS.STY);
 | 
			
		||||
 | 
			
		||||
@ -10812,7 +10783,7 @@ f = "docProps/app.xml";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/metadata." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta(f));
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta_bin());
 | 
			
		||||
	ct.metadata.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "metadata." + wbext, RELS.XLMETA);
 | 
			
		||||
 | 
			
		||||
@ -11108,6 +11079,15 @@ function write_cfb_ctr(cfb, o) {
 | 
			
		||||
	return CFB.write(cfb, o);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_zip(wb, opts) {
 | 
			
		||||
	switch(opts.bookType) {
 | 
			
		||||
		case "ods": return write_ods(wb, opts);
 | 
			
		||||
		case "numbers": return write_numbers_iwa(wb, opts);
 | 
			
		||||
		case "xlsb": return write_zip_xlsb(wb, opts);
 | 
			
		||||
		default: return write_zip_xlsx(wb, opts);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_zip_type(wb, opts) {
 | 
			
		||||
	var o = dup(opts||{});
 | 
			
		||||
	var z = write_zip(wb, o);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										139
									
								
								xlsx.mjs
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										139
									
								
								xlsx.mjs
									
									
									
										generated
									
									
									
								
							@ -3,7 +3,7 @@
 | 
			
		||||
/*exported XLSX */
 | 
			
		||||
/*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
 | 
			
		||||
var XLSX = {};
 | 
			
		||||
XLSX.version = '0.18.5';
 | 
			
		||||
XLSX.version = '0.18.6';
 | 
			
		||||
var current_codepage = 1200, current_ansi = 1252;
 | 
			
		||||
 | 
			
		||||
var VALID_ANSI = [ 874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 10000 ];
 | 
			
		||||
@ -4677,7 +4677,7 @@ var VT_UI4      = 0x0013;
 | 
			
		||||
//var VT_UI8      = 0x0015;
 | 
			
		||||
//var VT_INT      = 0x0016;
 | 
			
		||||
//var VT_UINT     = 0x0017;
 | 
			
		||||
var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPWSTR   = 0x001F;
 | 
			
		||||
var VT_FILETIME = 0x0040;
 | 
			
		||||
var VT_BLOB     = 0x0041;
 | 
			
		||||
@ -4689,7 +4689,7 @@ var VT_BLOB     = 0x0041;
 | 
			
		||||
var VT_CF       = 0x0047;
 | 
			
		||||
//var VT_CLSID    = 0x0048;
 | 
			
		||||
//var VT_VERSIONED_STREAM = 0x0049;
 | 
			
		||||
var VT_VECTOR   = 0x1000;
 | 
			
		||||
//var VT_VECTOR   = 0x1000;
 | 
			
		||||
var VT_VECTOR_VARIANT = 0x100C;
 | 
			
		||||
var VT_VECTOR_LPSTR   = 0x101E;
 | 
			
		||||
//var VT_ARRAY    = 0x2000;
 | 
			
		||||
@ -16351,16 +16351,16 @@ function parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*::, them
 | 
			
		||||
	if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];
 | 
			
		||||
	return s;
 | 
			
		||||
}
 | 
			
		||||
function write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {
 | 
			
		||||
	var o = [XML_HEADER, writextag('chartsheet', null, {
 | 
			
		||||
		'xmlns': XMLNS_main[0],
 | 
			
		||||
		'xmlns:r': XMLNS.r
 | 
			
		||||
	})];
 | 
			
		||||
	o[o.length] = writextag("drawing", null, {"r:id": "rId1"});
 | 
			
		||||
	add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW);
 | 
			
		||||
	if(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace("/>",">"); }
 | 
			
		||||
	return o.join("");
 | 
			
		||||
}
 | 
			
		||||
//function write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {
 | 
			
		||||
//	var o = [XML_HEADER, writextag('chartsheet', null, {
 | 
			
		||||
//		'xmlns': XMLNS_main[0],
 | 
			
		||||
//		'xmlns:r': XMLNS.r
 | 
			
		||||
//	})];
 | 
			
		||||
//	o[o.length] = writextag("drawing", null, {"r:id": "rId1"});
 | 
			
		||||
//	add_rels(rels, -1, "../drawings/drawing" + (idx+1) + ".xml", RELS.DRAW);
 | 
			
		||||
//	if(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace("/>",">"); }
 | 
			
		||||
//	return o.join("");
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
/* [MS-XLSB] 2.4.331 BrtCsProp */
 | 
			
		||||
function parse_BrtCsProp(data, length/*:number*/) {
 | 
			
		||||
@ -16416,25 +16416,25 @@ function parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, styles*/
 | 
			
		||||
	if(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];
 | 
			
		||||
	return s;
 | 
			
		||||
}
 | 
			
		||||
function write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {
 | 
			
		||||
	var ba = buf_array();
 | 
			
		||||
	write_record(ba, 0x0081 /* BrtBeginSheet */);
 | 
			
		||||
	/* [BrtCsProp] */
 | 
			
		||||
	/* CSVIEWS */
 | 
			
		||||
	/* [[BrtCsProtectionIso] BrtCsProtection] */
 | 
			
		||||
	/* [USERCSVIEWS] */
 | 
			
		||||
	/* [BrtMargins] */
 | 
			
		||||
	/* [BrtCsPageSetup] */
 | 
			
		||||
	/* [HEADERFOOTER] */
 | 
			
		||||
	/* BrtDrawing */
 | 
			
		||||
	/* [BrtLegacyDrawing] */
 | 
			
		||||
	/* [BrtLegacyDrawingHF] */
 | 
			
		||||
	/* [BrtBkHim] */
 | 
			
		||||
	/* [WEBPUBITEMS] */
 | 
			
		||||
	/* FRTCHARTSHEET */
 | 
			
		||||
	write_record(ba, 0x0082 /* BrtEndSheet */);
 | 
			
		||||
	return ba.end();
 | 
			
		||||
}
 | 
			
		||||
//function write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {
 | 
			
		||||
//	var ba = buf_array();
 | 
			
		||||
//	write_record(ba, 0x0081 /* BrtBeginSheet */);
 | 
			
		||||
//	/* [BrtCsProp] */
 | 
			
		||||
//	/* CSVIEWS */
 | 
			
		||||
//	/* [[BrtCsProtectionIso] BrtCsProtection] */
 | 
			
		||||
//	/* [USERCSVIEWS] */
 | 
			
		||||
//	/* [BrtMargins] */
 | 
			
		||||
//	/* [BrtCsPageSetup] */
 | 
			
		||||
//	/* [HEADERFOOTER] */
 | 
			
		||||
//	/* BrtDrawing */
 | 
			
		||||
//	/* [BrtLegacyDrawing] */
 | 
			
		||||
//	/* [BrtLegacyDrawingHF] */
 | 
			
		||||
//	/* [BrtBkHim] */
 | 
			
		||||
//	/* [WEBPUBITEMS] */
 | 
			
		||||
//	/* FRTCHARTSHEET */
 | 
			
		||||
//	write_record(ba, 0x0082 /* BrtEndSheet */);
 | 
			
		||||
//	return ba.end();
 | 
			
		||||
//}
 | 
			
		||||
/* 18.2.28 (CT_WorkbookProtection) Defaults */
 | 
			
		||||
var WBPropsDef = [
 | 
			
		||||
	['allowRefreshQuery',           false, "bool"],
 | 
			
		||||
@ -17153,10 +17153,6 @@ function parse_sty(data, name/*:string*/, themes, opts) {
 | 
			
		||||
	return parse_sty_xml((data/*:any*/), themes, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_theme(data/*:string*/, name/*:string*/, opts) {
 | 
			
		||||
	return parse_theme_xml(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parse_sst(data, name/*:string*/, opts)/*:SST*/ {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_sst_bin((data/*:any*/), opts);
 | 
			
		||||
	return parse_sst_xml((data/*:any*/), opts);
 | 
			
		||||
@ -17181,40 +17177,6 @@ function parse_xlmeta(data, name/*:string*/, opts) {
 | 
			
		||||
	if(name.slice(-4)===".bin") return parse_xlmeta_bin((data/*:any*/), name, opts);
 | 
			
		||||
	return parse_xlmeta_xml((data/*:any*/), name, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_wb(wb, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_wb_bin : write_wb_xml)(wb, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_ws(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line no-unused-vars
 | 
			
		||||
function write_cs(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sty(data, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sty_bin : write_sty_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_sst(data/*:SST*/, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_sst_bin : write_sst_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_cmnt(data/*:Array<any>*/, name/*:string*/, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_comments_bin : write_comments_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
function write_cc(data, name:string, opts) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_cc_bin : write_cc_xml)(data, opts);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
function write_xlmeta(name/*:string*/) {
 | 
			
		||||
	return (name.slice(-4)===".bin" ? write_xlmeta_bin : write_xlmeta_xml)();
 | 
			
		||||
}
 | 
			
		||||
var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
 | 
			
		||||
var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;
 | 
			
		||||
function xlml_parsexmltag(tag/*:string*/, skip_root/*:?boolean*/) {
 | 
			
		||||
@ -22940,19 +22902,17 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
  cfb.FileIndex.map(function(fi, idx) {
 | 
			
		||||
    return [fi, cfb.FullPaths[idx]];
 | 
			
		||||
  }).forEach(function(row) {
 | 
			
		||||
    var fi = row[0], fp = row[1];
 | 
			
		||||
    var fi = row[0];
 | 
			
		||||
    if (!fi.name.match(/\.iwa/))
 | 
			
		||||
      return;
 | 
			
		||||
    var x2 = parse_iwa_file(decompress_iwa_file(fi.content));
 | 
			
		||||
    x2.forEach(function(ia) {
 | 
			
		||||
      ia.messages.forEach(function(m) {
 | 
			
		||||
        indices_varint.forEach(function(ivi) {
 | 
			
		||||
          if (ia.messages.some(function(mess) {
 | 
			
		||||
            return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
 | 
			
		||||
          })) {
 | 
			
		||||
            dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      indices_varint.forEach(function(ivi) {
 | 
			
		||||
        if (ia.messages.some(function(mess) {
 | 
			
		||||
          return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
 | 
			
		||||
        })) {
 | 
			
		||||
          dependents[ivi[0]].deps.push(ia.id);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
@ -23158,10 +23118,9 @@ function write_numbers_iwa(wb, opts) {
 | 
			
		||||
              delete tile[7];
 | 
			
		||||
              var rowload = new Uint8Array(tiledata[5][0].data);
 | 
			
		||||
              tiledata[5] = [];
 | 
			
		||||
              var cnt = 0;
 | 
			
		||||
              for (var R2 = 0; R2 <= range.e.r; ++R2) {
 | 
			
		||||
                var tilerow = parse_shallow(rowload);
 | 
			
		||||
                cnt += write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
 | 
			
		||||
                write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
 | 
			
		||||
                tilerow[1][0].data = write_varint49(R2);
 | 
			
		||||
                tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
 | 
			
		||||
              }
 | 
			
		||||
@ -23341,7 +23300,7 @@ function parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
		strs = [];
 | 
			
		||||
		if(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }
 | 
			
		||||
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"",dir.themes[0], opts);
 | 
			
		||||
		if(opts.cellStyles && dir.themes.length) themes = parse_theme_xml(getzipstr(zip, dir.themes[0].replace(/^\//,''), true)||"", opts);
 | 
			
		||||
 | 
			
		||||
		if(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);
 | 
			
		||||
	}
 | 
			
		||||
@ -23526,10 +23485,6 @@ function parse_xlsxcfb(cfb, _opts/*:?ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
	throw new Error("File is password-protected");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* XLSX and XLSB writing are very similar.  Originally they were unified in one
 | 
			
		||||
   export function.  This is horrible for tree shaking in the common case (most
 | 
			
		||||
   applications need to export files in one format) so this function supports
 | 
			
		||||
   both formats while write_zip_xlsx only handles XLSX */
 | 
			
		||||
function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	_shapeid = 1024;
 | 
			
		||||
	if(wb && !wb.SSF) {
 | 
			
		||||
@ -23593,7 +23548,7 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
			/* falls through */
 | 
			
		||||
		default:
 | 
			
		||||
			f = "xl/worksheets/sheet" + rId + "." + wbext;
 | 
			
		||||
			zip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));
 | 
			
		||||
			zip_add_file(zip, f, write_ws_bin(rId-1, opts, wb, wsrels));
 | 
			
		||||
			ct.sheets.push(f);
 | 
			
		||||
			add_rels(opts.wbrels, -1, "worksheets/sheet" + rId + "." + wbext, RELS.WS[0]);
 | 
			
		||||
		}
 | 
			
		||||
@ -23604,7 +23559,7 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
			var cf = "";
 | 
			
		||||
			if(comments && comments.length > 0) {
 | 
			
		||||
				cf = "xl/comments" + rId + "." + wbext;
 | 
			
		||||
				zip_add_file(zip, cf, write_cmnt(comments, cf, opts));
 | 
			
		||||
				zip_add_file(zip, cf, write_comments_bin(comments, opts));
 | 
			
		||||
				ct.comments.push(cf);
 | 
			
		||||
				add_rels(wsrels, -1, "../comments" + rId + "." + wbext, RELS.CMNT);
 | 
			
		||||
				need_vml = true;
 | 
			
		||||
@ -23621,13 +23576,13 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
 | 
			
		||||
	if(opts.Strings != null && opts.Strings.length > 0) {
 | 
			
		||||
		f = "xl/sharedStrings." + wbext;
 | 
			
		||||
		zip_add_file(zip, f, write_sst(opts.Strings, f, opts));
 | 
			
		||||
		zip_add_file(zip, f, write_sst_bin(opts.Strings, opts));
 | 
			
		||||
		ct.strs.push(f);
 | 
			
		||||
		add_rels(opts.wbrels, -1, "sharedStrings." + wbext, RELS.SST);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/workbook." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_wb(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_wb_bin(wb, opts));
 | 
			
		||||
	ct.workbooks.push(f);
 | 
			
		||||
	add_rels(opts.rels, 1, f, RELS.WB);
 | 
			
		||||
 | 
			
		||||
@ -23641,7 +23596,7 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	/* TODO: something more intelligent with styles */
 | 
			
		||||
 | 
			
		||||
	f = "xl/styles." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_sty(wb, f, opts));
 | 
			
		||||
	zip_add_file(zip, f, write_sty_bin(wb, opts));
 | 
			
		||||
	ct.styles.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "styles." + wbext, RELS.STY);
 | 
			
		||||
 | 
			
		||||
@ -23653,7 +23608,7 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f = "xl/metadata." + wbext;
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta(f));
 | 
			
		||||
	zip_add_file(zip, f, write_xlmeta_bin());
 | 
			
		||||
	ct.metadata.push(f);
 | 
			
		||||
	add_rels(opts.wbrels, -1, "metadata." + wbext, RELS.XLMETA);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user