forked from sheetjs/sheetjs
		
	HTML DOM Element read
- DOM <table> element parsing (fixes #576 h/t @axolo) - removed InterfaceHdr check (fixes #209 h/t @Batistleman) - gitbook docs
This commit is contained in:
		
							parent
							
								
									b89a876076
								
							
						
					
					
						commit
						65f1c7e58b
					
				| @ -8,6 +8,7 @@ | ||||
| .*/ctest/.* | ||||
| .*/misc/.* | ||||
| .*/perf/.* | ||||
| .*/_book/.* | ||||
| 
 | ||||
| .*/demo/browser.js | ||||
| .*/shim.js | ||||
|  | ||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,5 +1,6 @@ | ||||
| node_modules | ||||
| *.tgz | ||||
| _book/ | ||||
| misc/coverage.html | ||||
| misc/prof.js | ||||
| v8.log | ||||
|  | ||||
| @ -7,6 +7,9 @@ changes may not be included if they are not expected to break existing code. | ||||
| 
 | ||||
| ## Unreleased | ||||
| 
 | ||||
| 
 | ||||
| ## 0.9.7 (2017-03-28) | ||||
| 
 | ||||
| * XLS legacy `!range` field removed | ||||
| * Hyperlink tooltip is stored in the `Tooltip` field | ||||
| 
 | ||||
| @ -15,7 +18,7 @@ changes may not be included if they are not expected to break existing code. | ||||
| * `sheet_to_json` now passes `null` values when `raw` is set to `true` | ||||
| * `sheet_to_json` treats `null` stub cells as values in conjunction with `raw` | ||||
| 
 | ||||
| ## 0.9.5 (2017-03-22)  | ||||
| ## 0.9.5 (2017-03-22) | ||||
| 
 | ||||
| * `cellDates` affects parsing in non-XLSX formats | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										5
									
								
								Makefile
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										5
									
								
								Makefile
									
									
									
									
									
								
							| @ -173,6 +173,11 @@ README.md: $(READEPS) | ||||
| readme: README.md ## Update README Table of Contents
 | ||||
| 	markdown-toc -i README.md | ||||
| 
 | ||||
| .PHONY: book | ||||
| book: README.md ## Update summary for documentation
 | ||||
| 	printf "# Summary\n\n- [xlsx](README.md#xlsx)\n" > misc/docs/SUMMARY.md | ||||
| 	markdown-toc README.md | sed 's/(#/(README.md#/g'>> misc/docs/SUMMARY.md | ||||
| 
 | ||||
| .PHONY: help | ||||
| help: | ||||
| 	@grep -hE '(^[a-zA-Z_-][ a-zA-Z_-]*:.*?|^#[#*])' $(MAKEFILE_LIST) | bash misc/help.sh | ||||
|  | ||||
							
								
								
									
										55
									
								
								README.md
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										55
									
								
								README.md
									
									
									
									
									
								
							| @ -43,6 +43,7 @@ with a unified JS representation, and ES3/ES5 browser compatibility back to IE6. | ||||
|   * [Document Features](#document-features) | ||||
|     + [Formulae](#formulae) | ||||
|     + [Column Properties](#column-properties) | ||||
|     + [Hyperlinks](#hyperlinks) | ||||
| - [Parsing Options](#parsing-options) | ||||
|   * [Input Type](#input-type) | ||||
|   * [Guessing File Type](#guessing-file-type) | ||||
| @ -51,6 +52,7 @@ with a unified JS representation, and ES3/ES5 browser compatibility back to IE6. | ||||
|   * [Output Type](#output-type) | ||||
| - [Utility Functions](#utility-functions) | ||||
|   * [Array of Arrays Input](#array-of-arrays-input) | ||||
|   * [HTML Table Input](#html-table-input) | ||||
|   * [Formulae Output](#formulae-output) | ||||
|   * [CSV and general DSV Output](#csv-and-general-dsv-output) | ||||
|   * [JSON](#json) | ||||
| @ -161,6 +163,13 @@ var workbook = XLSX.readFile('test.xlsx'); | ||||
| /* DO SOMETHING WITH workbook HERE */ | ||||
| ``` | ||||
| 
 | ||||
| - Browser DOM Table element: | ||||
| 
 | ||||
| ```js | ||||
| var worksheet = XLSX.utils.table_to_book(document.getElementById('tableau')); | ||||
| /* DO SOMETHING WITH workbook HERE */ | ||||
| ``` | ||||
| 
 | ||||
| - ajax (for a more complete example that works in older browsers, check the demo | ||||
|   at <http://oss.sheetjs.com/js-xlsx/ajax.html>): | ||||
| 
 | ||||
| @ -449,7 +458,7 @@ for(var R = range.s.r; R <= range.e.r; ++R) { | ||||
| | `h` | HTML rendering of the rich text (if applicable)                        | | ||||
| | `c` | comments associated with the cell                                      | | ||||
| | `z` | number format string associated with the cell (if requested)           | | ||||
| | `l` | cell hyperlink object (.Target holds link, .tooltip is tooltip)        | | ||||
| | `l` | cell hyperlink object (.Target holds link, .Tooltip is tooltip)        | | ||||
| | `s` | the style/theme of the cell (if applicable)                            | | ||||
| 
 | ||||
| Built-in export utilities (such as the CSV exporter) will use the `w` text if it | ||||
| @ -688,6 +697,23 @@ follow the priority order: | ||||
| 2) use `wpx` pixel width if available | ||||
| 3) use `wch` character count if available | ||||
| 
 | ||||
| #### Hyperlinks | ||||
| 
 | ||||
| Hyperlinks are stored in the `l` key of cell objects.  The `Target` field of the | ||||
| hyperlink object is the target of the link, including the URI fragment. Tooltips | ||||
| are stored in the `Tooltip` field and are displayed when you move your mouse | ||||
| over the text. | ||||
| 
 | ||||
| For example, the following snippet creates a link from cell `A3` to | ||||
| <http://sheetjs.com> with the tip `"Find us @ SheetJS.com!"`: | ||||
| 
 | ||||
| ```js | ||||
| ws['A3'].l = { Target:"http://sheetjs.com", Tooltip:"Find us @ SheetJS.com!" }; | ||||
| ``` | ||||
| 
 | ||||
| Note that Excel does not automatically style hyperlinks -- they will generally | ||||
| be displayed as normal text. | ||||
| 
 | ||||
| ## Parsing Options | ||||
| 
 | ||||
| The exported `read` and `readFile` functions accept an options argument: | ||||
| @ -852,6 +878,33 @@ var ws = XLSX.utils.aoa_to_sheet([ | ||||
| ]); | ||||
| ``` | ||||
| 
 | ||||
| ### HTML Table Input | ||||
| 
 | ||||
| `XLSX.utils.table_to_sheet` takes a table DOM element and returns a worksheet | ||||
| resembling the input table.  Numbers are parsed.  All other data will be stored | ||||
| as strings. | ||||
| 
 | ||||
| `XLSX.utils.table_to_book` produces a minimal workbook based on the worksheet. | ||||
| 
 | ||||
| To generate the example sheet, start with the HTML table: | ||||
| 
 | ||||
| ```html | ||||
| <table id="sheetjs"> | ||||
| <tr><td>S</td><td>h</td><td>e</td><td>e</td><td>t</td><td>J</td><td>S</td></tr> | ||||
| <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr> | ||||
| <tr><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td></tr> | ||||
| </table> | ||||
| ``` | ||||
| 
 | ||||
| To process the table: | ||||
| 
 | ||||
| ```js | ||||
| var tbl = document.getElementById('sheetjs'); | ||||
| var wb = XLSX.utils.table_to_book(tbl); | ||||
| ``` | ||||
| 
 | ||||
| Note: `XLSX.read` can handle HTML represented as strings. | ||||
| 
 | ||||
| ### Formulae Output | ||||
| 
 | ||||
| `XLSX.utils.sheet_to_formulae` generates an array of commands that represent | ||||
|  | ||||
| @ -158,7 +158,7 @@ function parse_BOF(blob, length) { | ||||
| function parse_InterfaceHdr(blob, length) { | ||||
| 	if(length === 0) return 0x04b0; | ||||
| 	var q; | ||||
| 	if((q=blob.read_shift(2))!==0x04b0) throw new Error("InterfaceHdr codePage " + q); | ||||
| 	if((q=blob.read_shift(2))!==0x04b0){} | ||||
| 	return 0x04b0; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -33,3 +33,35 @@ function parse_html(str/*:string*/, opts)/*:Workbook*/ { | ||||
| 	ws['!ref'] = encode_range(range); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function parse_dom_table(table/*:HTMLElement*/, opts/*:?any*/)/*:Worksheet*/ { | ||||
| 	var ws/*:Worksheet*/ = ({}/*:any*/); | ||||
| 	var rows = table.getElementsByTagName('tr'); | ||||
| 	var range = {s:{r:0,c:0},e:{r:rows.length - 1,c:0}}; | ||||
| 	var merges = [], midx = 0; | ||||
| 	var R = 0, _C = 0, C = 0, RS = 0, CS = 0; | ||||
| 	for(; R < rows.length; ++R) { | ||||
| 		var row = rows[R]; | ||||
| 		var elts = row.children; | ||||
| 		for(_C = C = 0; _C < elts.length; ++_C) { | ||||
| 			var elt = elts[_C], v = elts[_C].innerText; | ||||
| 			for(midx = 0; midx < merges.length; ++midx) { | ||||
| 				var m = merges[midx]; | ||||
| 				if(m.s.c == C && m.s.r <= R && R <= m.e.r) { C = m.e.c+1; midx = -1; } | ||||
| 			} | ||||
| 			/* TODO: figure out how to extract nonstandard mso- style */ | ||||
| 			CS = +elt.getAttribute("colspan") || 1; | ||||
| 			if((RS = +elt.getAttribute("rowspan"))>0) merges.push({s:{r:R,c:C},e:{r:R + RS - 1, c:C + CS - 1}}); | ||||
| 			var o = {t:'s', v:v}; | ||||
| 			if(!isNaN(Number(v))) o = {t:'n', v:Number(v)}; | ||||
| 			ws[encode_cell({c:C, r:R})] = o; | ||||
| 			C += CS; | ||||
| 		} | ||||
| 	} | ||||
| 	ws['!merges'] = merges; | ||||
| 	return ws; | ||||
| } | ||||
| 
 | ||||
| function table_to_book(table/*:HTMLElement*/, opts/*:?any*/)/*:Workbook*/ { | ||||
| 	return sheet_to_workbook(parse_dom_table(table, opts), opts); | ||||
| } | ||||
|  | ||||
| @ -240,6 +240,8 @@ var utils = { | ||||
| 	make_json: sheet_to_json, | ||||
| 	make_formulae: sheet_to_formulae, | ||||
| 	aoa_to_sheet: aoa_to_sheet, | ||||
| 	table_to_sheet: parse_dom_table, | ||||
| 	table_to_book: table_to_book, | ||||
| 	sheet_to_csv: sheet_to_csv, | ||||
| 	sheet_to_json: sheet_to_json, | ||||
| 	sheet_to_formulae: sheet_to_formulae, | ||||
|  | ||||
							
								
								
									
										27
									
								
								book.json
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										27
									
								
								book.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| { | ||||
| 	"root": "./misc/docs", | ||||
| 	"title": "SheetJS js-xlsx", | ||||
| 	"author": "sheetjs", | ||||
| 	"gitbook": "3.2.2", | ||||
| 	"plugins": ["anchorjs", "ga", "sidebar-ad", "-sharing", "advanced-emoji"], | ||||
| 	"pluginsConfig": { | ||||
| 		"anchorjs": { | ||||
| 			"icon": "#", | ||||
| 			"placement": "left", | ||||
| 			"visible": "always" | ||||
| 		}, | ||||
| 		"ga": { | ||||
| 			"token": "UA-36810333-1" | ||||
| 		}, | ||||
| 		"sidebar-ad": { | ||||
| 			"imageUrl": "http://oss.sheetjs.com/assets/img/logo.png", | ||||
| 			"url": "http://sheetjs.com" | ||||
| 		}, | ||||
| 		"theme-default": { | ||||
| 			"showLevel": false, | ||||
| 			"styles": { | ||||
| 				"website": "style.css" | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @ -11,6 +11,13 @@ var workbook = XLSX.readFile('test.xlsx'); | ||||
| /* DO SOMETHING WITH workbook HERE */ | ||||
| ``` | ||||
| 
 | ||||
| - Browser DOM Table element: | ||||
| 
 | ||||
| ```js | ||||
| var worksheet = XLSX.utils.table_to_book(document.getElementById('tableau')); | ||||
| /* DO SOMETHING WITH workbook HERE */ | ||||
| ``` | ||||
| 
 | ||||
| - ajax (for a more complete example that works in older browsers, check the demo | ||||
|   at <http://oss.sheetjs.com/js-xlsx/ajax.html>): | ||||
| 
 | ||||
|  | ||||
| @ -38,6 +38,33 @@ var ws = XLSX.utils.aoa_to_sheet([ | ||||
| ]); | ||||
| ``` | ||||
| 
 | ||||
| ### HTML Table Input | ||||
| 
 | ||||
| `XLSX.utils.table_to_sheet` takes a table DOM element and returns a worksheet | ||||
| resembling the input table.  Numbers are parsed.  All other data will be stored | ||||
| as strings. | ||||
| 
 | ||||
| `XLSX.utils.table_to_book` produces a minimal workbook based on the worksheet. | ||||
| 
 | ||||
| To generate the example sheet, start with the HTML table: | ||||
| 
 | ||||
| ```html | ||||
| <table id="sheetjs"> | ||||
| <tr><td>S</td><td>h</td><td>e</td><td>e</td><td>t</td><td>J</td><td>S</td></tr> | ||||
| <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr> | ||||
| <tr><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td></tr> | ||||
| </table> | ||||
| ``` | ||||
| 
 | ||||
| To process the table: | ||||
| 
 | ||||
| ```js | ||||
| var tbl = document.getElementById('sheetjs'); | ||||
| var wb = XLSX.utils.table_to_book(tbl); | ||||
| ``` | ||||
| 
 | ||||
| Note: `XLSX.read` can handle HTML represented as strings. | ||||
| 
 | ||||
| ### Formulae Output | ||||
| 
 | ||||
| `XLSX.utils.sheet_to_formulae` generates an array of commands that represent | ||||
|  | ||||
							
								
								
									
										1
									
								
								misc/docs/README.md
									
									
									
									
									
										Symbolic link
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								misc/docs/README.md
									
									
									
									
									
										Symbolic link
									
								
							| @ -0,0 +1 @@ | ||||
| ../../README.md | ||||
							
								
								
									
										55
									
								
								misc/docs/SUMMARY.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										55
									
								
								misc/docs/SUMMARY.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | ||||
| # Summary | ||||
| 
 | ||||
| - [xlsx](README.md#xlsx) | ||||
| - [Installation](README.md#installation) | ||||
|   * [JS Ecosystem Demos](README.md#js-ecosystem-demos) | ||||
|   * [Optional Modules](README.md#optional-modules) | ||||
|   * [ECMAScript 5 Compatibility](README.md#ecmascript-5-compatibility) | ||||
| - [Parsing Workbooks](README.md#parsing-workbooks) | ||||
| - [Working with the Workbook](README.md#working-with-the-workbook) | ||||
| - [Writing Workbooks](README.md#writing-workbooks) | ||||
| - [Interface](README.md#interface) | ||||
|   * [Parsing functions](README.md#parsing-functions) | ||||
|   * [Writing functions](README.md#writing-functions) | ||||
|   * [Utilities](README.md#utilities) | ||||
| - [Workbook / Worksheet / Cell Object Description](README.md#workbook--worksheet--cell-object-description) | ||||
|   * [General Structures](README.md#general-structures) | ||||
|   * [Cell Object](README.md#cell-object) | ||||
|     + [Data Types](README.md#data-types) | ||||
|     + [Dates](README.md#dates) | ||||
|   * [Worksheet Object](README.md#worksheet-object) | ||||
|   * [Chartsheet Object](README.md#chartsheet-object) | ||||
|   * [Workbook Object](README.md#workbook-object) | ||||
|   * [Document Features](README.md#document-features) | ||||
|     + [Formulae](README.md#formulae) | ||||
|     + [Column Properties](README.md#column-properties) | ||||
|     + [Hyperlinks](README.md#hyperlinks) | ||||
| - [Parsing Options](README.md#parsing-options) | ||||
|   * [Input Type](README.md#input-type) | ||||
|   * [Guessing File Type](README.md#guessing-file-type) | ||||
| - [Writing Options](README.md#writing-options) | ||||
|   * [Supported Output Formats](README.md#supported-output-formats) | ||||
|   * [Output Type](README.md#output-type) | ||||
| - [Utility Functions](README.md#utility-functions) | ||||
|   * [Array of Arrays Input](README.md#array-of-arrays-input) | ||||
|   * [HTML Table Input](README.md#html-table-input) | ||||
|   * [Formulae Output](README.md#formulae-output) | ||||
|   * [CSV and general DSV Output](README.md#csv-and-general-dsv-output) | ||||
|   * [JSON](README.md#json) | ||||
| - [File Formats](README.md#file-formats) | ||||
|   * [Excel 2007+ XML (XLSX/XLSM)](README.md#excel-2007-xml-xlsxxlsm) | ||||
|   * [Excel 2.0-95 (BIFF2/BIFF3/BIFF4/BIFF5)](README.md#excel-20-95-biff2biff3biff4biff5) | ||||
|   * [Excel 97-2004 Binary (BIFF8)](README.md#excel-97-2004-binary-biff8) | ||||
|   * [Excel 2003-2004 (SpreadsheetML)](README.md#excel-2003-2004-spreadsheetml) | ||||
|   * [Excel 2007+ Binary (XLSB, BIFF12)](README.md#excel-2007-binary-xlsb-biff12) | ||||
|   * [OpenDocument Spreadsheet (ODS/FODS) and Uniform Office Spreadsheet (UOS1/2)](README.md#opendocument-spreadsheet-odsfods-and-uniform-office-spreadsheet-uos12) | ||||
|   * [dBASE and Visual FoxPro (DBF)](README.md#dbase-and-visual-foxpro-dbf) | ||||
|   * [Comma-Separated Values](README.md#comma-separated-values) | ||||
|   * [HTML](README.md#html) | ||||
| - [Testing](README.md#testing) | ||||
|   * [Tested Environments](README.md#tested-environments) | ||||
|   * [Test Files](README.md#test-files) | ||||
| - [Contributing](README.md#contributing) | ||||
| - [License](README.md#license) | ||||
| - [References](README.md#references) | ||||
| - [Badges](README.md#badges) | ||||
							
								
								
									
										1
									
								
								misc/docs/formats.png
									
									
									
									
									
										Symbolic link
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								misc/docs/formats.png
									
									
									
									
									
										Symbolic link
									
								
							| @ -0,0 +1 @@ | ||||
| ../../formats.png | ||||
							
								
								
									
										19
									
								
								misc/docs/style.css
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										19
									
								
								misc/docs/style.css
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| a.anchorjs-link { | ||||
|     color: rgba(65, 131, 196, 0.1); | ||||
|     font-weight: 400; | ||||
|     text-decoration: none; | ||||
|     transition: color 100ms ease-out; | ||||
|     z-index: 999; | ||||
| } | ||||
| 
 | ||||
| a.anchorjs-link:hover { | ||||
|     color: rgba(65, 131, 196, 1); | ||||
| } | ||||
| 
 | ||||
| .gitbook-link { | ||||
|     display: none !important; | ||||
| } | ||||
| 
 | ||||
| #book-search-input { | ||||
|     display: none !important; | ||||
| } | ||||
							
								
								
									
										36
									
								
								xlsx.flow.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										36
									
								
								xlsx.flow.js
									
									
									
									
									
								
							| @ -3859,7 +3859,7 @@ function parse_BOF(blob, length) { | ||||
| function parse_InterfaceHdr(blob, length) { | ||||
| 	if(length === 0) return 0x04b0; | ||||
| 	var q; | ||||
| 	if((q=blob.read_shift(2))!==0x04b0) throw new Error("InterfaceHdr codePage " + q); | ||||
| 	if((q=blob.read_shift(2))!==0x04b0){} | ||||
| 	return 0x04b0; | ||||
| } | ||||
| 
 | ||||
| @ -13545,6 +13545,38 @@ function parse_html(str/*:string*/, opts)/*:Workbook*/ { | ||||
| 	ws['!ref'] = encode_range(range); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function parse_dom_table(table/*:HTMLElement*/, opts/*:?any*/)/*:Worksheet*/ { | ||||
| 	var ws/*:Worksheet*/ = ({}/*:any*/); | ||||
| 	var rows = table.getElementsByTagName('tr'); | ||||
| 	var range = {s:{r:0,c:0},e:{r:rows.length - 1,c:0}}; | ||||
| 	var merges = [], midx = 0; | ||||
| 	var R = 0, _C = 0, C = 0, RS = 0, CS = 0; | ||||
| 	for(; R < rows.length; ++R) { | ||||
| 		var row = rows[R]; | ||||
| 		var elts = row.children; | ||||
| 		for(_C = C = 0; _C < elts.length; ++_C) { | ||||
| 			var elt = elts[_C], v = elts[_C].innerText; | ||||
| 			for(midx = 0; midx < merges.length; ++midx) { | ||||
| 				var m = merges[midx]; | ||||
| 				if(m.s.c == C && m.s.r <= R && R <= m.e.r) { C = m.e.c+1; midx = -1; } | ||||
| 			} | ||||
| 			/* TODO: figure out how to extract nonstandard mso- style */ | ||||
| 			CS = +elt.getAttribute("colspan") || 1; | ||||
| 			if((RS = +elt.getAttribute("rowspan"))>0) merges.push({s:{r:R,c:C},e:{r:R + RS - 1, c:C + CS - 1}}); | ||||
| 			var o = {t:'s', v:v}; | ||||
| 			if(!isNaN(Number(v))) o = {t:'n', v:Number(v)}; | ||||
| 			ws[encode_cell({c:C, r:R})] = o; | ||||
| 			C += CS; | ||||
| 		} | ||||
| 	} | ||||
| 	ws['!merges'] = merges; | ||||
| 	return ws; | ||||
| } | ||||
| 
 | ||||
| function table_to_book(table/*:HTMLElement*/, opts/*:?any*/)/*:Workbook*/ { | ||||
| 	return sheet_to_workbook(parse_dom_table(table, opts), opts); | ||||
| } | ||||
| var parse_content_xml = (function() { | ||||
| 
 | ||||
| 	var parse_text_p = function(text, tag) { | ||||
| @ -14762,6 +14794,8 @@ var utils = { | ||||
| 	make_json: sheet_to_json, | ||||
| 	make_formulae: sheet_to_formulae, | ||||
| 	aoa_to_sheet: aoa_to_sheet, | ||||
| 	table_to_sheet: parse_dom_table, | ||||
| 	table_to_book: table_to_book, | ||||
| 	sheet_to_csv: sheet_to_csv, | ||||
| 	sheet_to_json: sheet_to_json, | ||||
| 	sheet_to_formulae: sheet_to_formulae, | ||||
|  | ||||
							
								
								
									
										36
									
								
								xlsx.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										36
									
								
								xlsx.js
									
									
									
									
									
								
							| @ -3805,7 +3805,7 @@ function parse_BOF(blob, length) { | ||||
| function parse_InterfaceHdr(blob, length) { | ||||
| 	if(length === 0) return 0x04b0; | ||||
| 	var q; | ||||
| 	if((q=blob.read_shift(2))!==0x04b0) throw new Error("InterfaceHdr codePage " + q); | ||||
| 	if((q=blob.read_shift(2))!==0x04b0){} | ||||
| 	return 0x04b0; | ||||
| } | ||||
| 
 | ||||
| @ -13486,6 +13486,38 @@ function parse_html(str, opts) { | ||||
| 	ws['!ref'] = encode_range(range); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function parse_dom_table(table, opts) { | ||||
| 	var ws = ({}); | ||||
| 	var rows = table.getElementsByTagName('tr'); | ||||
| 	var range = {s:{r:0,c:0},e:{r:rows.length - 1,c:0}}; | ||||
| 	var merges = [], midx = 0; | ||||
| 	var R = 0, _C = 0, C = 0, RS = 0, CS = 0; | ||||
| 	for(; R < rows.length; ++R) { | ||||
| 		var row = rows[R]; | ||||
| 		var elts = row.children; | ||||
| 		for(_C = C = 0; _C < elts.length; ++_C) { | ||||
| 			var elt = elts[_C], v = elts[_C].innerText; | ||||
| 			for(midx = 0; midx < merges.length; ++midx) { | ||||
| 				var m = merges[midx]; | ||||
| 				if(m.s.c == C && m.s.r <= R && R <= m.e.r) { C = m.e.c+1; midx = -1; } | ||||
| 			} | ||||
| 			/* TODO: figure out how to extract nonstandard mso- style */ | ||||
| 			CS = +elt.getAttribute("colspan") || 1; | ||||
| 			if((RS = +elt.getAttribute("rowspan"))>0) merges.push({s:{r:R,c:C},e:{r:R + RS - 1, c:C + CS - 1}}); | ||||
| 			var o = {t:'s', v:v}; | ||||
| 			if(!isNaN(Number(v))) o = {t:'n', v:Number(v)}; | ||||
| 			ws[encode_cell({c:C, r:R})] = o; | ||||
| 			C += CS; | ||||
| 		} | ||||
| 	} | ||||
| 	ws['!merges'] = merges; | ||||
| 	return ws; | ||||
| } | ||||
| 
 | ||||
| function table_to_book(table, opts) { | ||||
| 	return sheet_to_workbook(parse_dom_table(table, opts), opts); | ||||
| } | ||||
| var parse_content_xml = (function() { | ||||
| 
 | ||||
| 	var parse_text_p = function(text, tag) { | ||||
| @ -14694,6 +14726,8 @@ var utils = { | ||||
| 	make_json: sheet_to_json, | ||||
| 	make_formulae: sheet_to_formulae, | ||||
| 	aoa_to_sheet: aoa_to_sheet, | ||||
| 	table_to_sheet: parse_dom_table, | ||||
| 	table_to_book: table_to_book, | ||||
| 	sheet_to_csv: sheet_to_csv, | ||||
| 	sheet_to_json: sheet_to_json, | ||||
| 	sheet_to_formulae: sheet_to_formulae, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user