forked from sheetjs/sheetjs
TS write test
run `make tslint` to run TS checks
This commit is contained in:
parent
cb6633be18
commit
409581b317
7
Makefile
7
Makefile
@ -71,7 +71,7 @@ dist-deps: ## Copy dependencies for distribution
|
||||
aux: $(AUXTARGETS)
|
||||
|
||||
.PHONY: bytes
|
||||
bytes: ## display minified and gzipped file sizes
|
||||
bytes: ## Display minified and gzipped file sizes
|
||||
for i in dist/xlsx.min.js dist/xlsx.{core,full}.min.js; do printj "%-30s %7d %10d" $$i $$(wc -c < $$i) $$(gzip --best --stdout $$i | wc -c); done
|
||||
|
||||
.PHONY: graph
|
||||
@ -156,6 +156,11 @@ old-lint: $(TARGET) $(AUXTARGETS) ## Run jshint and jscs checks
|
||||
@jscs $(TARGET) $(AUXTARGETS)
|
||||
if [ -e $(CLOSURE) ]; then java -jar $(CLOSURE) $(REQS) $(FLOWTARGET) --jscomp_warning=reportUnknownTypes >/dev/null; fi
|
||||
|
||||
.PHONY: tslint
|
||||
tslint: $(TARGET) ## Run typescript checks
|
||||
#@npm install dtslint typescript
|
||||
@npm run-script dtslint
|
||||
|
||||
.PHONY: flow
|
||||
flow: lint ## Run flow checker
|
||||
@flow check --all --show-all-errors
|
||||
|
@ -1,11 +1,11 @@
|
||||
/* writing feature test -- look for TEST: in comments */
|
||||
/* vim: set ts=2: */
|
||||
/* vim: set ts=2 ft=javascript: */
|
||||
|
||||
/* original data */
|
||||
var data = [
|
||||
[1,2,3],
|
||||
[1, 2, 3],
|
||||
[true, false, null, "sheetjs"],
|
||||
["foo","bar",new Date("2014-02-19T14:30Z"), "0.3"],
|
||||
["foo", "bar", new Date("2014-02-19T14:30Z"), "0.3"],
|
||||
["baz", null, "qux", 3.14159],
|
||||
["hidden"],
|
||||
["visible"]
|
||||
@ -26,15 +26,16 @@ var wsrows = [
|
||||
{hpx: 16}, // "pixels"
|
||||
,
|
||||
{hpx: 24},
|
||||
{hidden:true}, // hide row
|
||||
{hidden:false}
|
||||
{hidden: true}, // hide row
|
||||
{hidden: false}
|
||||
];
|
||||
|
||||
console.log("Sheet Name: " + ws_name);
|
||||
console.log("Data: "); for(var i=0; i!=data.length; ++i) console.log(data[i]);
|
||||
console.log("Columns :"); for(i=0; i!=wscols.length;++i) console.log(wscols[i]);
|
||||
|
||||
|
||||
console.log("Data: ");
|
||||
var i = 0;
|
||||
for(i = 0; i != data.length; ++i) console.log(data[i]);
|
||||
console.log("Columns :");
|
||||
for(i = 0; i != wscols.length; ++i) console.log(wscols[i]);
|
||||
|
||||
/* require XLSX */
|
||||
if(typeof XLSX === "undefined") { try { XLSX = require('./'); } catch(e) { XLSX = require('../'); } }
|
||||
@ -166,7 +167,7 @@ console.log(ws);
|
||||
'sheetjs.prn',
|
||||
'sheetjs.dif'
|
||||
].forEach(function(r) {
|
||||
if(typeof r == 'string') {
|
||||
if(typeof r === 'string') {
|
||||
/* write file */
|
||||
XLSX.writeFile(wb, r);
|
||||
/* test by reading back files */
|
||||
|
56
types/index.d.ts
vendored
56
types/index.d.ts
vendored
@ -1,5 +1,4 @@
|
||||
// Project: https://github.com/SheetJS/js-xlsx
|
||||
// Definitions by: themauveavenger <https://github.com/themauveavenger/>, Wolfgang Faust <https://github.com/wolfgang42>
|
||||
/* index.d.ts (C) 2015-present SheetJS and contributors */
|
||||
// TypeScript Version: 2.2
|
||||
|
||||
/** Attempts to read filename and parse */
|
||||
@ -14,15 +13,20 @@ export function write(data: WorkBook, opts?: WritingOptions): any;
|
||||
export const utils: Utils;
|
||||
|
||||
export interface Properties {
|
||||
LastAuthor?: string;
|
||||
Title?: string;
|
||||
Subject?: string;
|
||||
Author?: string;
|
||||
Manager?: string;
|
||||
Company?: string;
|
||||
Category?: string;
|
||||
Keywords?: string;
|
||||
Comments?: string;
|
||||
LastAuthor?: string;
|
||||
CreatedDate?: Date;
|
||||
ModifiedDate?: Date;
|
||||
Application?: string;
|
||||
AppVersion?: string;
|
||||
Company?: string;
|
||||
DocSecurity?: string;
|
||||
Manager?: string;
|
||||
HyperlinksChanged?: boolean;
|
||||
SharedDoc?: boolean;
|
||||
LinksUpToDate?: boolean;
|
||||
@ -138,7 +142,7 @@ export interface WritingOptions {
|
||||
* Type of Workbook
|
||||
* @default 'xlsx'
|
||||
*/
|
||||
bookType?: 'xlsx' | 'xlsm' | 'xlsb' | 'ods' | 'biff2' | 'fods' | 'csv';
|
||||
bookType?: 'xlsx' | 'xlsm' | 'xlsb' | 'biff2' | 'xlml' | 'ods' | 'fods' | 'csv' | 'txt' | 'sylk' | 'html' | 'dif' | 'prn';
|
||||
|
||||
/**
|
||||
* Name of Worksheet for single-sheet formats
|
||||
@ -169,7 +173,13 @@ export interface WorkBook {
|
||||
* an object storing the standard properties. wb.Custprops stores custom properties.
|
||||
* Since the XLS standard properties deviate from the XLSX standard, XLS parsing stores core properties in both places.
|
||||
*/
|
||||
Props: Properties;
|
||||
Props?: Properties;
|
||||
|
||||
Workbook?: WBProps;
|
||||
}
|
||||
|
||||
export interface WBProps {
|
||||
Sheets?: any[];
|
||||
}
|
||||
|
||||
export interface ColInfo {
|
||||
@ -180,7 +190,7 @@ export interface ColInfo {
|
||||
/**
|
||||
* width in Excel's "Max Digit Width", width*256 is integral
|
||||
*/
|
||||
width: number;
|
||||
width?: number;
|
||||
/**
|
||||
* width in screen pixels
|
||||
*/
|
||||
@ -314,7 +324,7 @@ export interface Sheet {
|
||||
* object representing the worksheet
|
||||
*/
|
||||
export interface WorkSheet extends Sheet {
|
||||
[cell: string]: WorkSheetCell | any;
|
||||
[cell: string]: CellObject | any;
|
||||
'!cols'?: ColInfo[];
|
||||
'!rows'?: RowInfo[];
|
||||
'!merges'?: Range[];
|
||||
@ -326,9 +336,9 @@ export interface WorkSheet extends Sheet {
|
||||
* The Excel data type for a cell.
|
||||
* b Boolean, n Number, e error, s String, d Date
|
||||
*/
|
||||
export type ExcelDataType = 'b' | 'n' | 'e' | 's' | 'd';
|
||||
export type ExcelDataType = 'b' | 'n' | 'e' | 's' | 'd' | 'z';
|
||||
|
||||
export interface WorkSheetCell {
|
||||
export interface CellObject {
|
||||
/**
|
||||
* The raw value of the cell.
|
||||
*/
|
||||
@ -386,7 +396,7 @@ export interface WorkSheetCell {
|
||||
s?: object;
|
||||
}
|
||||
|
||||
export interface Cell {
|
||||
export interface CellAddress {
|
||||
/** Column number */
|
||||
c: number;
|
||||
/** Row number */
|
||||
@ -395,12 +405,14 @@ export interface Cell {
|
||||
|
||||
export interface Range {
|
||||
/** Starting cell */
|
||||
s: Cell;
|
||||
s: CellAddress;
|
||||
/** Ending cell */
|
||||
e: Cell;
|
||||
e: CellAddress;
|
||||
}
|
||||
|
||||
export interface Utils {
|
||||
/* --- Cell Address Utilities --- */
|
||||
|
||||
/** converts an array of arrays of JS data to a worksheet. */
|
||||
aoa_to_sheet<T>(data: T[], opts?: any): WorkSheet;
|
||||
|
||||
@ -410,26 +422,36 @@ export interface Utils {
|
||||
range?: any;
|
||||
header?: "A"|number|string[];
|
||||
}): T[];
|
||||
|
||||
/** Generates delimiter-separated-values output */
|
||||
sheet_to_csv(worksheet: WorkSheet, options?: { FS: string, RS: string }): string;
|
||||
|
||||
/** Generates a list of the formulae (with value fallbacks) */
|
||||
sheet_to_formulae(worksheet: WorkSheet): any;
|
||||
|
||||
/* --- Cell Address Utilities --- */
|
||||
|
||||
/** Converts 0-indexed cell address to A1 form */
|
||||
encode_cell(cell: Cell): string;
|
||||
encode_cell(cell: CellAddress): string;
|
||||
|
||||
/** Converts 0-indexed row to A1 form */
|
||||
encode_row(row: number): string;
|
||||
|
||||
/** Converts 0-indexed column to A1 form */
|
||||
encode_col(col: number): string;
|
||||
|
||||
/** Converts 0-indexed range to A1 form */
|
||||
encode_range(s: Cell, e: Cell): string;
|
||||
encode_range(s: CellAddress, e: CellAddress): string;
|
||||
|
||||
/** Converts A1 cell address to 0-indexed form */
|
||||
decode_cell(address: string): Cell;
|
||||
decode_cell(address: string): CellAddress;
|
||||
|
||||
/** Converts A1 row to 0-indexed form */
|
||||
decode_row(row: string): number;
|
||||
|
||||
/** Converts A1 column to 0-indexed form */
|
||||
decode_col(col: string): number;
|
||||
|
||||
/** Converts A1 range to 0-indexed form */
|
||||
decode_range(range: string): Range;
|
||||
}
|
||||
|
8
types/tslint.json
Normal file
8
types/tslint.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "dtslint/dtslint.json",
|
||||
"rules": {
|
||||
"whitespace": false,
|
||||
"no-sparse-arrays": false,
|
||||
"no-consecutive-blank-lines": false
|
||||
}
|
||||
}
|
153
types/write.ts
Normal file
153
types/write.ts
Normal file
@ -0,0 +1,153 @@
|
||||
/* writing feature test -- look for TEST: in comments */
|
||||
/* vim: set ts=2 ft=javascript: */
|
||||
|
||||
/* original data */
|
||||
let data = [
|
||||
[1, 2, 3],
|
||||
[true, false, null, "sheetjs"],
|
||||
["foo", "bar", new Date("2014-02-19T14:30Z"), "0.3"],
|
||||
["baz", null, "qux", 3.14159],
|
||||
["hidden"],
|
||||
["visible"]
|
||||
];
|
||||
|
||||
const ws_name = "SheetJS";
|
||||
|
||||
let wscols = [
|
||||
{wch: 6}, // "characters"
|
||||
{wpx: 50}, // "pixels"
|
||||
,
|
||||
{hidden: true} // hide column
|
||||
];
|
||||
|
||||
/* At 96 PPI, 1 pt = 1 px */
|
||||
let wsrows = [
|
||||
{hpt: 12}, // "points"
|
||||
{hpx: 16}, // "pixels"
|
||||
,
|
||||
{hpx: 24},
|
||||
{hidden: true}, // hide row
|
||||
{hidden: false}
|
||||
];
|
||||
|
||||
console.log("Sheet Name: " + ws_name);
|
||||
console.log("Data: ");
|
||||
let i = 0;
|
||||
for(i = 0; i !== data.length; ++i) console.log(data[i]);
|
||||
console.log("Columns :");
|
||||
for(i = 0; i !== wscols.length; ++i) console.log(wscols[i]);
|
||||
|
||||
/* require XLSX */
|
||||
import XLSX = require('xlsx');
|
||||
|
||||
/* blank workbook constructor */
|
||||
|
||||
let wb: XLSX.WorkBook = { SheetNames: <string[]>[], Sheets: {} };
|
||||
|
||||
|
||||
/* convert an array of arrays in JS to a CSF spreadsheet */
|
||||
let ws = XLSX.utils.aoa_to_sheet(data, {cellDates:true});
|
||||
|
||||
/* TEST: add worksheet to workbook */
|
||||
wb.SheetNames.push(ws_name);
|
||||
wb.Sheets[ws_name] = ws;
|
||||
|
||||
/* TEST: simple formula */
|
||||
ws['C1'].f = "A1+B1";
|
||||
ws['C2'] = {t:'n', f:"A1+B1"};
|
||||
|
||||
/* TEST: single-cell array formula */
|
||||
|
||||
ws['D1'] = {t:'n', f:"SUM(A1:C1*A1:C1)", F:"D1:D1"};
|
||||
|
||||
|
||||
/* 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"};
|
||||
ws["!ref"] = "A1:E6";
|
||||
|
||||
/* TEST: column props */
|
||||
ws['!cols'] = wscols;
|
||||
|
||||
/* TEST: row props */
|
||||
ws['!rows'] = wsrows;
|
||||
|
||||
/* TEST: hyperlink note: Excel does not automatically style hyperlinks */
|
||||
ws['A3'].l = { Target: "http://sheetjs.com", Tooltip: "Visit us <SheetJS.com!>" };
|
||||
|
||||
/* TEST: built-in format */
|
||||
ws['B1'].z = "0%"; // Format Code 9
|
||||
|
||||
/* TEST: custom format */
|
||||
const custfmt = "\"This is \"\\ 0.0";
|
||||
ws['C2'].z = custfmt;
|
||||
|
||||
/* TEST: page margins */
|
||||
ws['!margins'] = { left:1.0, right:1.0, top:1.0, bottom:1.0, header:0.5, footer:0.5 };
|
||||
|
||||
console.log("JSON Data:");
|
||||
console.log(XLSX.utils.sheet_to_json(ws, {header:1}));
|
||||
|
||||
/* TEST: hidden sheets */
|
||||
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};
|
||||
|
||||
/* TEST: properties */
|
||||
wb.Props = {
|
||||
Title: "SheetJS Test",
|
||||
Subject: "Tests",
|
||||
Author: "Devs at SheetJS",
|
||||
Manager: "Sheet Manager",
|
||||
Company: "SheetJS",
|
||||
Category: "Experimentation",
|
||||
Keywords: "Test",
|
||||
Comments: "Nothing to say here",
|
||||
LastAuthor: "Not SheetJS",
|
||||
CreatedDate: new Date(2017,1,19)
|
||||
};
|
||||
|
||||
/* TEST: comments */
|
||||
|
||||
ws['A4'].c = [];
|
||||
ws['A4'].c.push({a:"SheetJS",t:"I'm a little comment, short and stout!\n\nWell, Stout may be the wrong word"});
|
||||
|
||||
|
||||
/* TEST: sheet protection */
|
||||
ws['!protect'] = {
|
||||
password:"password",
|
||||
/* enable formatting rows and columns */
|
||||
formatRows:false,
|
||||
formatColumns:false,
|
||||
/* disable editing objects and scenarios */
|
||||
objects:true,
|
||||
scenarios:true
|
||||
};
|
||||
|
||||
console.log("Worksheet Model:");
|
||||
console.log(ws);
|
||||
|
||||
const filenames: Array<[string]|[string, XLSX.WritingOptions]> = [
|
||||
['sheetjs.xlsx', {bookSST:true}],
|
||||
['sheetjs.xlsm'],
|
||||
['sheetjs.xlsb'],
|
||||
['sheetjs.xls', {bookType:'biff2'}],
|
||||
['sheetjs.xml.xls', {bookType:'xlml'}],
|
||||
['sheetjs.ods'],
|
||||
['sheetjs.fods'],
|
||||
['sheetjs.slk'],
|
||||
['sheetjs.csv'],
|
||||
['sheetjs.txt'],
|
||||
['sheetjs.prn'],
|
||||
['sheetjs.dif']
|
||||
];
|
||||
|
||||
filenames.forEach((r) => {
|
||||
/* write file */
|
||||
XLSX.writeFile(wb, r[0], r[1]);
|
||||
/* test by reading back files */
|
||||
XLSX.readFile(r[0]);
|
||||
});
|
@ -1,11 +1,11 @@
|
||||
import xlsx = require('xlsx');
|
||||
import XLSX = require('xlsx');
|
||||
|
||||
const options: xlsx.ParsingOptions = {
|
||||
const options: XLSX.ParsingOptions = {
|
||||
cellDates: true
|
||||
};
|
||||
|
||||
const workbook = xlsx.readFile('test.xlsx', options);
|
||||
const otherworkbook = xlsx.readFile('test.xlsx', {type: 'file'});
|
||||
const workbook = XLSX.readFile('test.xlsx', options);
|
||||
const otherworkbook = XLSX.readFile('test.xlsx', {type: 'file'});
|
||||
|
||||
console.log(workbook.Props.Author);
|
||||
|
||||
@ -20,6 +20,6 @@ interface Tester {
|
||||
age: number;
|
||||
}
|
||||
|
||||
const jsonvalues: Tester[] = xlsx.utils.sheet_to_json<Tester>(firstworksheet);
|
||||
const csv = xlsx.utils.sheet_to_csv(firstworksheet);
|
||||
const formulae = xlsx.utils.sheet_to_formulae(firstworksheet);
|
||||
const jsonvalues: Tester[] = XLSX.utils.sheet_to_json<Tester>(firstworksheet);
|
||||
const csv = XLSX.utils.sheet_to_csv(firstworksheet);
|
||||
const formulae = XLSX.utils.sheet_to_formulae(firstworksheet);
|
||||
|
Loading…
Reference in New Issue
Block a user