forked from sheetjs/sheetjs
		
	
		
			
	
	
		
			90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								# Chrome and Chromium
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This library is compatible with Chrome and Chromium extensions and should just
							 | 
						||
| 
								 | 
							
								work out of the box.  Specific API support is listed in the Chrome extensions
							 | 
						||
| 
								 | 
							
								API documentation.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Generating Downloads
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The `writeFile` function works in a Chrome or Chromium extension:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								XLSX.writeFile(wb, "export.xlsx");
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Under the hood, it uses the `chrome.downloads` API.  `"downloads"` permission
							 | 
						||
| 
								 | 
							
								should be set in `manifest.json`:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								"permissions": [
							 | 
						||
| 
								 | 
							
								  "downloads"
							 | 
						||
| 
								 | 
							
								]
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Content Script Table Scraping
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`table_to_book` and `table_to_sheet` can help build workbooks from DOM tables:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								var tables = document.getElementsByTagName("table");
							 | 
						||
| 
								 | 
							
								var wb = XLSX.utils.book_new();
							 | 
						||
| 
								 | 
							
								for(var i = 0; i < tables.length; ++i) {
							 | 
						||
| 
								 | 
							
								  var ws = XLSX.utils.table_to_sheet(tables[i]);
							 | 
						||
| 
								 | 
							
								  XLSX.utils.book_append_sheet(wb, ws, "Table" + i);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Demo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The demo extension includes multiple features to demonstrate sample usage.
							 | 
						||
| 
								 | 
							
								Production extensions should include proper error handling.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Table Exporter
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The `content.js` content script converts a table in the DOM to workbook object
							 | 
						||
| 
								 | 
							
								using the `table_to_book` utility function:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								// event page script trigger
							 | 
						||
| 
								 | 
							
								chrome.tabs.sendMessage(tab.id);
							 | 
						||
| 
								 | 
							
								// content script convert
							 | 
						||
| 
								 | 
							
								var wb = XLSX.utils.table_to_book(elt);
							 | 
						||
| 
								 | 
							
								// event page script callback
							 | 
						||
| 
								 | 
							
								XLSX.writeFile(wb, "export.xlsx");
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Since the workbook object is a plain JS object, the object is sent back to an
							 | 
						||
| 
								 | 
							
								event page script which generates the file and attempts a download.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Bookmark Exporter
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`chrome.bookmarks` API enables bookmark tree traversal.  The "Export Bookmarks"
							 | 
						||
| 
								 | 
							
								button in the extension pop-up recursively walks the bookmark tree, pushes the
							 | 
						||
| 
								 | 
							
								bookmark URLs into a data array, and exports into a simple spreadsheet:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								/* walk the bookmark tree */
							 | 
						||
| 
								 | 
							
								function recurse_bookmarks(data, tree) {
							 | 
						||
| 
								 | 
							
								  if(tree.url) data.push({Name: tree.title, Location: tree.url});
							 | 
						||
| 
								 | 
							
								  (tree.children||[]).forEach(function(child) { recurse_bookmarks(data, child); });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* get bookmark data */
							 | 
						||
| 
								 | 
							
								chrome.bookmarks.getTree(function(res) {
							 | 
						||
| 
								 | 
							
								  /* load into an array */
							 | 
						||
| 
								 | 
							
								  var data = [];
							 | 
						||
| 
								 | 
							
								  res.forEach(function(t) { recurse_bookmarks(data, t); });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /* create worksheet */
							 | 
						||
| 
								 | 
							
								  var ws = XLSX.utils.json_to_sheet(data, { header: ['Name', 'Location'] });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /* create workbook and export */
							 | 
						||
| 
								 | 
							
								  var wb = XLSX.utils.book_new();
							 | 
						||
| 
								 | 
							
								  XLSX.utils.book_append_sheet(wb, ws, 'Bookmarks');
							 | 
						||
| 
								 | 
							
								  XLSX.writeFile(wb, "bookmarks.xlsx");
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[](https://github.com/SheetJS/js-xlsx)
							 |