forked from sheetjs/sheetjs
		
	vue demo and typing fixes [ci skip]
This commit is contained in:
		
							parent
							
								
									5ceb2e01b5
								
							
						
					
					
						commit
						20f22cf7f9
					
				@ -175,6 +175,7 @@ The `demos` directory includes sample projects for:
 | 
			
		||||
- [`requirejs`](demos/requirejs/)
 | 
			
		||||
- [`rollup`](demos/rollup/)
 | 
			
		||||
- [`systemjs`](demos/systemjs/)
 | 
			
		||||
- [`vue 2`](demos/vue/)
 | 
			
		||||
- [`webpack`](demos/webpack/)
 | 
			
		||||
 | 
			
		||||
### Optional Modules
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								demos/angular/SheetJS-angular.js
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										26
									
								
								demos/angular/SheetJS-angular.js
									
									
									
									
										vendored
									
									
								
							@ -7,7 +7,7 @@ function SheetJSExportService(uiGridExporterService) {
 | 
			
		||||
 | 
			
		||||
		var fileName = gridApi.grid.options.filename || 'SheetJS';
 | 
			
		||||
		fileName += wopts.bookType ? "." + wopts.bookType : '.xlsx';
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		var sheetName = gridApi.grid.options.sheetname || 'Sheet1';
 | 
			
		||||
 | 
			
		||||
		var wb = XLSX.utils.book_new(), ws = uigrid_to_sheet(data, columns);
 | 
			
		||||
@ -63,15 +63,15 @@ function SheetJSExportService(uiGridExporterService) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var SheetJSImportDirective = function() {
 | 
			
		||||
  return {
 | 
			
		||||
	return {
 | 
			
		||||
		scope: { opts: '=' },
 | 
			
		||||
    link: function ($scope, $elm, $attrs) {
 | 
			
		||||
      $elm.on('change', function (changeEvent) {
 | 
			
		||||
        var reader = new FileReader();
 | 
			
		||||
		link: function ($scope, $elm, $attrs) {
 | 
			
		||||
			$elm.on('change', function (changeEvent) {
 | 
			
		||||
				var reader = new FileReader();
 | 
			
		||||
 | 
			
		||||
        reader.onload = function (e) {
 | 
			
		||||
				reader.onload = function (e) {
 | 
			
		||||
					/* read workbook */
 | 
			
		||||
          var bstr = e.target.result;
 | 
			
		||||
					var bstr = e.target.result;
 | 
			
		||||
					var wb = XLSX.read(bstr, {type:'binary'});
 | 
			
		||||
 | 
			
		||||
					/* grab first sheet */
 | 
			
		||||
@ -98,10 +98,10 @@ var SheetJSImportDirective = function() {
 | 
			
		||||
						$scope.opts.columnDefs = cols;
 | 
			
		||||
						$scope.opts.data = data;
 | 
			
		||||
					});
 | 
			
		||||
        };
 | 
			
		||||
  
 | 
			
		||||
        reader.readAsBinaryString(changeEvent.target.files[0]);
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  }	
 | 
			
		||||
				};
 | 
			
		||||
 | 
			
		||||
				reader.readAsBinaryString(changeEvent.target.files[0]);
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								demos/vue/README.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										20
									
								
								demos/vue/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
			
		||||
# VueJS 2
 | 
			
		||||
 | 
			
		||||
The `xlsx.core.min.js` and `xlsx.full.min.js` scripts are designed to be dropped
 | 
			
		||||
into web pages with script tags e.g.
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<script src="xlsx.full.min.js"></script>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Strictly speaking, there should be no need for a Vue.JS demo!  You can proceed
 | 
			
		||||
as you would with any other browser-friendly library.
 | 
			
		||||
 | 
			
		||||
This demo directly generates HTML using `sheet_to_html` and adds an element to
 | 
			
		||||
a pregenerated template.  It also has a button for exporting as XLSX.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Single File Components
 | 
			
		||||
 | 
			
		||||
For Single File Components, a simple `import XLSX from 'xlsx'` should suffice.
 | 
			
		||||
The webpack demo includes a sample `webpack.config.js`.
 | 
			
		||||
							
								
								
									
										63
									
								
								demos/vue/SheetJS-vue.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										63
									
								
								demos/vue/SheetJS-vue.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,63 @@
 | 
			
		||||
var SheetJSFT = [
 | 
			
		||||
	"xlsx", "xlsb", "xlsm", "xls", "xml", "csv", "txt", "ods", "fods", "uos", "sylk", "dif", "dbf", "prn", "qpw", "123", "wb*", "wq*", "html", "htm"
 | 
			
		||||
].map(function(x) { return "." + x; }).join(",");
 | 
			
		||||
 | 
			
		||||
var SJSTemplate = [
 | 
			
		||||
	'<div>',
 | 
			
		||||
		'<input type="file" multiple="false" id="sheetjs-input" accept="' + SheetJSFT + '" @change="onchange" />',
 | 
			
		||||
		'<br/>',
 | 
			
		||||
		'<button type="button" id="expor-table" style="visibility:hidden" @click="onexport">Export to XLSX</button>',
 | 
			
		||||
		'<br/>',
 | 
			
		||||
		'<div id="out-table"></div>',
 | 
			
		||||
	'</div>'
 | 
			
		||||
].join("");
 | 
			
		||||
 | 
			
		||||
function s2ab(s) {
 | 
			
		||||
	if(typeof ArrayBuffer !== 'undefined') {
 | 
			
		||||
		var buf = new ArrayBuffer(s.length);
 | 
			
		||||
		var view = new Uint8Array(buf);
 | 
			
		||||
		for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
 | 
			
		||||
		return buf;
 | 
			
		||||
	} else {
 | 
			
		||||
		var buf = new Array(s.length);
 | 
			
		||||
		for (var i=0; i!=s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;
 | 
			
		||||
		return buf;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Vue.component('html-preview', {
 | 
			
		||||
	template: SJSTemplate,
 | 
			
		||||
	methods: {
 | 
			
		||||
		onchange: function(evt) {
 | 
			
		||||
			var reader = new FileReader();
 | 
			
		||||
			reader.onload = function (e) {
 | 
			
		||||
				/* read workbook */
 | 
			
		||||
				var bstr = e.target.result;
 | 
			
		||||
				var wb = XLSX.read(bstr, {type:'binary'});
 | 
			
		||||
 | 
			
		||||
				/* grab first sheet */
 | 
			
		||||
				var wsname = wb.SheetNames[0];
 | 
			
		||||
				var ws = wb.Sheets[wsname];
 | 
			
		||||
 | 
			
		||||
				/* generate HTML */
 | 
			
		||||
				var HTML = XLSX.utils.sheet_to_html(ws); 
 | 
			
		||||
 | 
			
		||||
				/* update table */
 | 
			
		||||
				document.getElementById('out-table').innerHTML = HTML;
 | 
			
		||||
				/* show export button */
 | 
			
		||||
				document.getElementById('expor-table').style.visibility = "visible";
 | 
			
		||||
			};
 | 
			
		||||
 | 
			
		||||
			reader.readAsBinaryString(evt.target.files[0]);
 | 
			
		||||
		},
 | 
			
		||||
		onexport: function(evt) {
 | 
			
		||||
			/* generate workbook object from table */
 | 
			
		||||
			var wb = XLSX.utils.table_to_book(document.getElementById('out-table'));
 | 
			
		||||
			/* get binary string as output */
 | 
			
		||||
			var wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'binary' });
 | 
			
		||||
 | 
			
		||||
			/* force a download */
 | 
			
		||||
			saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), "sheetjs.xlsx");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										51
									
								
								demos/vue/index.html
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										51
									
								
								demos/vue/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<!-- xlsx.js (C) 2013-present  SheetJS http://sheetjs.com -->
 | 
			
		||||
<!-- vim: set ts=2: -->
 | 
			
		||||
<html ng-app="app">
 | 
			
		||||
<head>
 | 
			
		||||
	<title>SheetJS + VueJS2</title>
 | 
			
		||||
	<!-- Vue 2 -->
 | 
			
		||||
	<script src="https://unpkg.com/vue@2.x"></script>
 | 
			
		||||
 | 
			
		||||
	<!-- FileSaver shim for exporting files -->
 | 
			
		||||
	<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.3/FileSaver.min.js"></script>
 | 
			
		||||
 | 
			
		||||
	<!-- SheetJS js-xlsx library -->
 | 
			
		||||
	<script src="xlsx.full.min.js"></script>
 | 
			
		||||
 | 
			
		||||
	<!-- SheetJS Vue components -->
 | 
			
		||||
	<script src="SheetJS-vue.js"></script>
 | 
			
		||||
 | 
			
		||||
<style>
 | 
			
		||||
.grid1 {
 | 
			
		||||
	width: 500px;
 | 
			
		||||
	height: 400px;
 | 
			
		||||
};
 | 
			
		||||
</style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<pre>
 | 
			
		||||
<b><a href="http://sheetjs.com">SheetJS + VueJS2 demo</a></b>
 | 
			
		||||
 | 
			
		||||
The core library can be used as-is in Vue applications.
 | 
			
		||||
The <a href="https://github.com/sheetjs/js-xlsx">Community Edition README</a> details some common use cases.
 | 
			
		||||
We also have some <a href="http://sheetjs.com/demos/">more public demos</a>
 | 
			
		||||
 | 
			
		||||
This demo shows a sample Vue component "html-preview" that:
 | 
			
		||||
- displays a file input that accepts a spreadsheet file
 | 
			
		||||
- draws the first worksheet of a submitted file as HTML
 | 
			
		||||
- presents an export button to generate XLSX files
 | 
			
		||||
 | 
			
		||||
<a href="https://obamawhitehouse.archives.gov/sites/default/files/omb/budget/fy2014/assets/receipts.xls">Sample Spreadsheet</a>
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
<div id="app">
 | 
			
		||||
	<html-preview></html-preview>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<script lang="javascript">
 | 
			
		||||
var app = new Vue({ el: '#app' });
 | 
			
		||||
</script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								demos/vue/xlsx.full.min.js
									
									
									
									
										vendored
									
									
										Symbolic link
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								demos/vue/xlsx.full.min.js
									
									
									
									
										vendored
									
									
										Symbolic link
									
								
							@ -0,0 +1 @@
 | 
			
		||||
../../dist/xlsx.full.min.js
 | 
			
		||||
@ -28,3 +28,15 @@ convince webpack, set `output` in the webpack config:
 | 
			
		||||
		library: 'XLSX'
 | 
			
		||||
	}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Omitting optional dependencies
 | 
			
		||||
 | 
			
		||||
The `codepage` is needed in certain special cases, including files generated by
 | 
			
		||||
non-US-English versions of Excel, but may not be needed.  To reduce build size,
 | 
			
		||||
the module can be omitted by aliasing the dependency:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
	resolve: {
 | 
			
		||||
		alias: { "./dist/cpexcel.js": "" }
 | 
			
		||||
	},
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,12 @@ module.exports = {
 | 
			
		||||
		libraryTarget: 'var',
 | 
			
		||||
		library: 'XLSX'
 | 
			
		||||
	},
 | 
			
		||||
	/* Uncomment the next block to suppress codepage */
 | 
			
		||||
	/*
 | 
			
		||||
	resolve: {
 | 
			
		||||
		alias: { "./dist/cpexcel.js": "" }
 | 
			
		||||
	},
 | 
			
		||||
	*/
 | 
			
		||||
	node: {
 | 
			
		||||
		fs: false,
 | 
			
		||||
		process: false,
 | 
			
		||||
 | 
			
		||||
@ -33,6 +33,7 @@ The `demos` directory includes sample projects for:
 | 
			
		||||
- [`requirejs`](demos/requirejs/)
 | 
			
		||||
- [`rollup`](demos/rollup/)
 | 
			
		||||
- [`systemjs`](demos/systemjs/)
 | 
			
		||||
- [`vue 2`](demos/vue/)
 | 
			
		||||
- [`webpack`](demos/webpack/)
 | 
			
		||||
 | 
			
		||||
### Optional Modules
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										91
									
								
								types/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										91
									
								
								types/index.d.ts
									
									
									
									
										vendored
									
									
								
							@ -13,7 +13,9 @@ export function writeFile(data: WorkBook, filename: string, opts?: WritingOption
 | 
			
		||||
/** Attempts to write the workbook data */
 | 
			
		||||
export function write(data: WorkBook, opts?: WritingOptions): any;
 | 
			
		||||
 | 
			
		||||
/** Utility Functions */
 | 
			
		||||
export const utils: XLSX$Utils;
 | 
			
		||||
/** Stream Utility Functions */
 | 
			
		||||
export const stream: StreamUtils;
 | 
			
		||||
 | 
			
		||||
/** Number Format (either a string or an index to the format table) */
 | 
			
		||||
@ -223,10 +225,18 @@ export interface SheetProps {
 | 
			
		||||
    Hidden?: 0 | 1 | 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Defined Name Object */
 | 
			
		||||
export interface DefinedName {
 | 
			
		||||
    /** Name */
 | 
			
		||||
    Name: string;
 | 
			
		||||
 | 
			
		||||
    /** Reference */
 | 
			
		||||
    Ref: string;
 | 
			
		||||
 | 
			
		||||
    /** Scope (undefined for workbook scope) */
 | 
			
		||||
    Sheet?: number;
 | 
			
		||||
 | 
			
		||||
    /** Name comment */
 | 
			
		||||
    Comment?: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -251,6 +261,7 @@ export interface WorkbookProperties {
 | 
			
		||||
    filterPrivacy?: boolean;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Column Properties Object */
 | 
			
		||||
export interface ColInfo {
 | 
			
		||||
    /* --- visibility --- */
 | 
			
		||||
 | 
			
		||||
@ -271,6 +282,8 @@ export interface ColInfo {
 | 
			
		||||
    /** Excel's "Max Digit Width" unit, always integral */
 | 
			
		||||
    MDW?: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Row Properties Object */
 | 
			
		||||
export interface RowInfo {
 | 
			
		||||
    /* --- visibility --- */
 | 
			
		||||
 | 
			
		||||
@ -414,25 +427,33 @@ export interface AutoFilterInfo {
 | 
			
		||||
}
 | 
			
		||||
export type WSKeys = SheetKeys | ColInfo[] | RowInfo[] | Range[] | ProtectInfo | AutoFilterInfo;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * object representing the worksheet
 | 
			
		||||
 */
 | 
			
		||||
/** Worksheet Object */
 | 
			
		||||
export interface WorkSheet extends Sheet {
 | 
			
		||||
    /**
 | 
			
		||||
     * Indexing with a cell address string maps to a cell object
 | 
			
		||||
     * Special keys start with '!'
 | 
			
		||||
     */
 | 
			
		||||
    [cell: string]: CellObject | WSKeys | any;
 | 
			
		||||
 | 
			
		||||
    /** Column Info */
 | 
			
		||||
    '!cols'?: ColInfo[];
 | 
			
		||||
 | 
			
		||||
    /** Row Info */
 | 
			
		||||
    '!rows'?: RowInfo[];
 | 
			
		||||
 | 
			
		||||
    /** Merge Ranges */
 | 
			
		||||
    '!merges'?: Range[];
 | 
			
		||||
 | 
			
		||||
    /** Worksheet Protection info */
 | 
			
		||||
    '!protect'?: ProtectInfo;
 | 
			
		||||
 | 
			
		||||
    /** AutoFilter info */
 | 
			
		||||
    '!autofilter'?: AutoFilterInfo;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The Excel data type for a cell.
 | 
			
		||||
 * b Boolean, n Number, e error, s String, d Date
 | 
			
		||||
 * b Boolean, n Number, e error, s String, d Date, z Stub
 | 
			
		||||
 */
 | 
			
		||||
export type ExcelDataType = 'b' | 'n' | 'e' | 's' | 'd' | 'z';
 | 
			
		||||
 | 
			
		||||
@ -442,6 +463,7 @@ export type ExcelDataType = 'b' | 'n' | 'e' | 's' | 'd' | 'z';
 | 
			
		||||
 */
 | 
			
		||||
export type BookType = 'xlsx' | 'xlsm' | 'xlsb' | 'biff2' | 'xlml' | 'ods' | 'fods' | 'csv' | 'txt' | 'sylk' | 'html' | 'dif' | 'prn';
 | 
			
		||||
 | 
			
		||||
/** Comment element */
 | 
			
		||||
export interface Comment {
 | 
			
		||||
    /** Author of the comment block */
 | 
			
		||||
    a?: string;
 | 
			
		||||
@ -450,6 +472,7 @@ export interface Comment {
 | 
			
		||||
    t: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Link object */
 | 
			
		||||
export interface Hyperlink {
 | 
			
		||||
    /** Target of the link (HREF) */
 | 
			
		||||
    Target: string;
 | 
			
		||||
@ -458,6 +481,7 @@ export interface Hyperlink {
 | 
			
		||||
    Tooltip?: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Worksheet Cell Object */
 | 
			
		||||
export interface CellObject {
 | 
			
		||||
    /** The raw value of the cell.  Can be omitted if a formula is specified */
 | 
			
		||||
    v?: string | number | boolean | Date;
 | 
			
		||||
@ -496,6 +520,7 @@ export interface CellObject {
 | 
			
		||||
    s?: object;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Simple Cell Address */
 | 
			
		||||
export interface CellAddress {
 | 
			
		||||
    /** Column number */
 | 
			
		||||
    c: number;
 | 
			
		||||
@ -525,24 +550,36 @@ export interface Sheet2CSVOpts {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface Sheet2HTMLOpts {
 | 
			
		||||
    /** Add contenteditable to every cell */
 | 
			
		||||
    editable?: boolean;
 | 
			
		||||
    /** Header HTML */
 | 
			
		||||
    header?: string;
 | 
			
		||||
    /** Footer HTML */
 | 
			
		||||
    footer?: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface Sheet2JSONOpts {
 | 
			
		||||
    /** Use specified date format */
 | 
			
		||||
    /** Use specified format for date cells */
 | 
			
		||||
    dateNF?: NumberFormat;
 | 
			
		||||
 | 
			
		||||
    /** Output format */
 | 
			
		||||
    header?: "A"|number|string[];
 | 
			
		||||
 | 
			
		||||
    /** Override worksheet range */
 | 
			
		||||
    range?: any;
 | 
			
		||||
 | 
			
		||||
    /** Include or omit blank lines in the output */
 | 
			
		||||
    blankrows?: boolean;
 | 
			
		||||
 | 
			
		||||
    /** Default value for null/undefined values */
 | 
			
		||||
    defval?: any;
 | 
			
		||||
 | 
			
		||||
    /** if true, return raw data; if false, return formatted text */
 | 
			
		||||
    raw?: boolean;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface AOA2SheetOpts {
 | 
			
		||||
    /** Use specified date format */
 | 
			
		||||
    /** Use specified format for date cells */
 | 
			
		||||
    dateNF?: NumberFormat;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@ -568,9 +605,7 @@ export interface Table2SheetOpts {
 | 
			
		||||
    dateNF?: NumberFormat;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * General utilities
 | 
			
		||||
 */
 | 
			
		||||
/** General utilities */
 | 
			
		||||
export interface XLSX$Utils {
 | 
			
		||||
    /* --- Import Functions --- */
 | 
			
		||||
 | 
			
		||||
@ -629,13 +664,43 @@ export interface XLSX$Utils {
 | 
			
		||||
    /** Converts A1 range to 0-indexed form */
 | 
			
		||||
    decode_range(range: string): Range;
 | 
			
		||||
 | 
			
		||||
    /* --- WorkBook Utilities --- */
 | 
			
		||||
    /* --- General Utilities --- */
 | 
			
		||||
 | 
			
		||||
    /** Creates a new WorkBook */
 | 
			
		||||
    /** Creates a new workbook */
 | 
			
		||||
    book_new(): WorkBook;
 | 
			
		||||
 | 
			
		||||
    /** Appends worksheet to given workbook (blank name will enumerate Sheet# to find unused name) */
 | 
			
		||||
    book_append_sheet(wb: WorkBook, ws: WorkSheet, name?: String): void;
 | 
			
		||||
    /** Append a worksheet to a workbook */
 | 
			
		||||
    book_append_sheet(workbook: WorkBook, worksheet: WorkSheet, name?: string): void;
 | 
			
		||||
 | 
			
		||||
    /** Set sheet visibility (visible/hidden/very hidden) */
 | 
			
		||||
    book_set_sheet_visibility(workbook: WorkBook, sheet: number|string, visibility: number): void;
 | 
			
		||||
 | 
			
		||||
    /** Set number format for a cell */
 | 
			
		||||
    cell_set_number_format(cell: CellObject, fmt: string|number): CellObject;
 | 
			
		||||
 | 
			
		||||
    /** Set hyperlink for a cell */
 | 
			
		||||
    cell_set_hyperlink(cell: CellObject, target: string, tooltip?: string): CellObject;
 | 
			
		||||
 | 
			
		||||
    /** Add comment to a cell */
 | 
			
		||||
    cell_add_comment(cell: CellObject, text: string, author?: string): void;
 | 
			
		||||
 | 
			
		||||
    /** Assign an Array Formula to a range */
 | 
			
		||||
    sheet_set_array_formula(ws: WorkSheet, range: Range|string, formula: string): WorkSheet;
 | 
			
		||||
 | 
			
		||||
    consts: XLSX$Consts;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface XLSX$Consts {
 | 
			
		||||
    /* --- Sheet Visibility --- */
 | 
			
		||||
 | 
			
		||||
    /** Visibility: Visible */
 | 
			
		||||
    SHEET_VISIBLE: 0;
 | 
			
		||||
 | 
			
		||||
    /** Visibility: Hidden */
 | 
			
		||||
    SHEET_HIDDEN: 1;
 | 
			
		||||
 | 
			
		||||
    /** Visibility: Very Hidden */
 | 
			
		||||
    SHEET_VERYHIDDEN: 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** NODE ONLY! these return Readable Streams */
 | 
			
		||||
 | 
			
		||||
@ -38,12 +38,13 @@ console.log("Columns :");
 | 
			
		||||
for(i = 0; i !== wscols.length; ++i) console.log(wscols[i]);
 | 
			
		||||
 | 
			
		||||
/* require XLSX */
 | 
			
		||||
import XLSX = require('xlsx');
 | 
			
		||||
import * as XLSX from 'xlsx';
 | 
			
		||||
 | 
			
		||||
/* blank workbook constructor */
 | 
			
		||||
 | 
			
		||||
let wb: XLSX.WorkBook = { SheetNames: <string[]>[], Sheets: {} };
 | 
			
		||||
 | 
			
		||||
wb = XLSX.utils.book_new();
 | 
			
		||||
 | 
			
		||||
/* convert an array of arrays in JS to a CSF spreadsheet */
 | 
			
		||||
let ws: XLSX.WorkSheet = XLSX.utils.aoa_to_sheet(data, {cellDates:true});
 | 
			
		||||
@ -51,6 +52,7 @@ let ws: XLSX.WorkSheet = XLSX.utils.aoa_to_sheet(data, {cellDates:true});
 | 
			
		||||
/* TEST: add worksheet to workbook */
 | 
			
		||||
wb.SheetNames.push(ws_name);
 | 
			
		||||
wb.Sheets[ws_name] = ws;
 | 
			
		||||
XLSX.utils.book_append_sheet(wb, ws, ws_name);
 | 
			
		||||
 | 
			
		||||
/* TEST: simple formula */
 | 
			
		||||
(<XLSX.CellObject>ws['C1']).f = "A1+B1";
 | 
			
		||||
@ -60,12 +62,14 @@ ws['C2'] = {t:'n', f:"A1+B1"};
 | 
			
		||||
 | 
			
		||||
ws['D1'] = {t:'n', f:"SUM(A1:C1*A1:C1)", F:"D1:D1"};
 | 
			
		||||
 | 
			
		||||
XLSX.utils.sheet_set_array_formula(ws, 'D1:D1', "SUM(A1:C1*A1:C1)");
 | 
			
		||||
 | 
			
		||||
/* TEST: multi-cell array formula */
 | 
			
		||||
ws['E1'] = {t:'n', f:"TRANSPOSE(A1:D1)", F:"E1:E4"};
 | 
			
		||||
ws['E2'] = {t:'n', F:"E1:E4"};
 | 
			
		||||
ws['E3'] = {t:'n', F:"E1:E4"};
 | 
			
		||||
ws['E4'] = {t:'n', F:"E1:E4"};
 | 
			
		||||
XLSX.utils.sheet_set_array_formula(ws, 'E1:E4', "TRANSPOSE(A1:D1)");
 | 
			
		||||
ws["!ref"] = "A1:E6";
 | 
			
		||||
 | 
			
		||||
/* TEST: column props */
 | 
			
		||||
@ -76,13 +80,16 @@ ws['!rows'] = wsrows;
 | 
			
		||||
 | 
			
		||||
/* TEST: hyperlink note: Excel does not automatically style hyperlinks */
 | 
			
		||||
(<XLSX.CellObject>ws['A3']).l = { Target: "http://sheetjs.com", Tooltip: "Visit us <SheetJS.com!>" };
 | 
			
		||||
XLSX.utils.cell_set_hyperlink(ws['A3'], "http://sheetjs.com", "Visit us <SheetJS.com!>" );
 | 
			
		||||
 | 
			
		||||
/* TEST: built-in format */
 | 
			
		||||
(<XLSX.CellObject>ws['B1']).z = "0%"; // Format Code 9
 | 
			
		||||
XLSX.utils.cell_set_number_format(ws['B1'], "0%");
 | 
			
		||||
 | 
			
		||||
/* TEST: custom format */
 | 
			
		||||
const custfmt = "\"This is \"\\ 0.0";
 | 
			
		||||
(<XLSX.CellObject>ws['C2']).z = custfmt;
 | 
			
		||||
XLSX.utils.cell_set_number_format(ws['C2'], custfmt);
 | 
			
		||||
 | 
			
		||||
/* TEST: page margins */
 | 
			
		||||
ws['!margins'] =  { left:1.0, right:1.0, top:1.0, bottom:1.0, header:0.5, footer:0.5 };
 | 
			
		||||
@ -95,6 +102,9 @@ wb.SheetNames.push("Hidden");
 | 
			
		||||
wb.Sheets["Hidden"] = XLSX.utils.aoa_to_sheet(["Hidden".split(""), [1,2,3]]);
 | 
			
		||||
wb.Workbook = {Sheets:[]};
 | 
			
		||||
wb.Workbook.Sheets[1] = {Hidden:1};
 | 
			
		||||
const data_2 = ["Hidden".split(""), [1,2,3]];
 | 
			
		||||
XLSX.utils.book_append_sheet(wb, XLSX.utils.aoa_to_sheet(data_2), "Hidden");
 | 
			
		||||
XLSX.utils.book_set_sheet_visibility(wb, "Hidden", XLSX.utils.consts.SHEET_HIDDEN);
 | 
			
		||||
 | 
			
		||||
/* TEST: properties */
 | 
			
		||||
wb.Props = {
 | 
			
		||||
@ -115,6 +125,7 @@ wb.Props = {
 | 
			
		||||
(<XLSX.CellObject>ws['A4']).c = [];
 | 
			
		||||
(<XLSX.CellObject>ws['A4']).c.push({a:"SheetJS",t:"I'm a little comment, short and stout!\n\nWell, Stout may be the wrong word"});
 | 
			
		||||
 | 
			
		||||
XLSX.utils.cell_add_comment(ws['A4'], "I'm a little comment, short and stout!\n\nWell, Stout may be the wrong word", "SheetJS");
 | 
			
		||||
 | 
			
		||||
/* TEST: sheet protection */
 | 
			
		||||
ws['!protect'] = {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user