diff --git a/types/index.d.ts b/types/index.d.ts new file mode 100644 index 0000000..2a10a7a --- /dev/null +++ b/types/index.d.ts @@ -0,0 +1,436 @@ +// Type definitions for xlsx +// Project: https://github.com/SheetJS/js-xlsx +// Definitions by: themauveavenger , Wolfgang Faust +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/** Attempts to read filename and parse */ +export function readFile(filename: string, opts?: IParsingOptions): IWorkBook; +/** Attempts to parse data */ +export function read(data: any, opts?: IParsingOptions): IWorkBook; +/** Attempts to write workbook data to filename */ +export function writeFile(data: IWorkBook, filename: string, opts?: IWritingOptions): any; +/** Attempts to write the workbook data */ +export function write(data: IWorkBook, opts?: IWritingOptions): any; + +export const utils: IUtils; + +export interface IProperties { + LastAuthor?: string; + Author?: string; + CreatedDate?: Date; + ModifiedDate?: Date; + Application?: string; + AppVersion?: string; + Company?: string; + DocSecurity?: string; + Manager?: string; + HyperlinksChanged?: boolean; + SharedDoc?: boolean; + LinksUpToDate?: boolean; + ScaleCrop?: boolean; + Worksheets?: number; + SheetNames?: string[]; +} + +export interface IParsingOptions { + /** + * Input data encoding + */ + type?: 'base64' | 'binary' | 'buffer' | 'array' | 'file'; + + /** + * Save formulae to the .f field + * @default true + */ + cellFormula?: boolean; + + /** + * Parse rich text and save HTML to the .h field + * @default true + */ + cellHTML?: boolean; + + /** + * Save number format string to the .z field + * @default false + */ + cellNF?: boolean; + + /** + * Save style/theme info to the .s field + * @default false + */ + cellStyles?: boolean; + + /** + * Store dates as type d (default is n) + * @default false + */ + cellDates?: boolean; + + /** + * Create cell objects for stub cells + * @default false + */ + sheetStubs?: boolean; + + /** + * If >0, read the first sheetRows rows + * @default 0 + */ + sheetRows?: number; + + /** + * If true, parse calculation chains + * @default false + */ + bookDeps?: boolean; + + /** + * If true, add raw files to book object + * @default false + */ + bookFiles?: boolean; + + /** + * If true, only parse enough to get book metadata + * @default false + */ + bookProps?: boolean; + + /** + * If true, only parse enough to get the sheet names + * @default false + */ + bookSheets?: boolean; + + /** + * If true, expose vbaProject.bin to vbaraw field + * @default false + */ + bookVBA?: boolean; + + /** + * If defined and file is encrypted, use password + * @default '' + */ + password?: string; +} + +export interface IWritingOptions { + /** + * Output data encoding + */ + type?: 'base64' | 'binary' | 'buffer' | 'file'; + + /** + * Store dates as type d (default is n) + * @default false + */ + cellDates?: boolean; + + /** + * Generate Shared String Table + * @default false + */ + bookSST?: boolean; + + /** + * Type of Workbook + * @default 'xlsx' + */ + bookType?: 'xlsx' | 'xlsm' | 'xlsb' | 'ods' | 'biff2' | 'fods' | 'csv'; + + /** + * Name of Worksheet for single-sheet formats + * @default '' + */ + sheet?: string; + + /** + * Use ZIP compression for ZIP-based formats + * @default false + */ + compression?: boolean; +} + +export interface IWorkBook { + /** + * A dictionary of the worksheets in the workbook. + * Use SheetNames to reference these. + */ + Sheets: { [sheet: string]: IWorkSheet }; + + /** + * ordered list of the sheet names in the workbook + */ + SheetNames: string[]; + + /** + * 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: IProperties; +} + +export interface IColInfo { + /** + * Excel's "Max Digit Width" unit, always integral + */ + MDW?: number; + /** + * width in Excel's "Max Digit Width", width*256 is integral + */ + width: number; + /** + * width in screen pixels + */ + wpx?: number; + /** + * intermediate character calculation + */ + wch?: number; + /** + * if true, the column is hidden + */ + hidden?: boolean; +} +export interface IRowInfo { + /** + * height in screen pixels + */ + hpx?: number; + /** + * height in points + */ + hpt?: number; + /** + * if true, the column is hidden + */ + hidden?: boolean; +} + +/** + * Write sheet protection properties. + */ +export interface IProtectInfo { + /** + * The password for formats that support password-protected sheets + * (XLSX/XLSB/XLS). The writer uses the XOR obfuscation method. + */ + password?: string; + /** + * Select locked cells + * @default: true + */ + selectLockedCells?: boolean; + /** + * Select unlocked cells + * @default: true + */ + selectUnlockedCells?: boolean; + /** + * Format cells + * @default: false + */ + formatCells?: boolean; + /** + * Format columns + * @default: false + */ + formatColumns?: boolean; + /** + * Format rows + * @default: false + */ + formatRows?: boolean; + /** + * Insert columns + * @default: false + */ + insertColumns?: boolean; + /** + * Insert rows + * @default: false + */ + insertRows?: boolean; + /** + * Insert hyperlinks + * @default: false + */ + insertHyperlinks?: boolean; + /** + * Delete columns + * @default: false + */ + deleteColumns?: boolean; + /** + * Delete rows + * @default: false + */ + deleteRows?: boolean; + /** + * Sort + * @default: false + */ + sort?: boolean; + /** + * Filter + * @default: false + */ + autoFilter?: boolean; + /** + * Use PivotTable reports + * @default: false + */ + pivotTables?: boolean; + /** + * Edit objects + * @default: true + */ + objects?: boolean; + /** + * Edit scenarios + * @default: true + */ + scenarios?: boolean; +} + +/** + * object representing any sheet (worksheet or chartsheet) + */ +export interface ISheet { + '!ref'?: string; + '!margins'?: { + left: number, + right: number, + top: number, + bottom: number, + header: number, + footer: number, + }; +} + +/** + * object representing the worksheet + */ +export interface IWorkSheet extends ISheet { + [cell: string]: IWorkSheetCell | any; + '!cols'?: IColInfo[]; + '!rows'?: IRowInfo[]; + '!merges'?: IRange[]; + '!protect'?: IProtectInfo; + '!autofilter'?: {ref: string}; +} + +/** + * 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 interface IWorkSheetCell { + /** + * The raw value of the cell. + */ + v: string | number | boolean | Date; + + /** + * Formatted text (if applicable) + */ + w?: string; + + /** + * The Excel Data Type of the cell. + * b Boolean, n Number, e error, s String, d Date + */ + t: ExcelDataType; + + /** + * Cell formula (if applicable) + */ + f?: string; + + /** + * Range of enclosing array if formula is array formula (if applicable) + */ + F?: string; + + /** + * Rich text encoding (if applicable) + */ + r?: string; + + /** + * HTML rendering of the rich text (if applicable) + */ + h?: string; + + /** + * Comments associated with the cell ** + */ + c?: string; + + /** + * Number format string associated with the cell (if requested) + */ + z?: string; + + /** + * Cell hyperlink object (.Target holds link, .tooltip is tooltip) + */ + l?: Object; + + /** + * The style/theme of the cell (if applicable) + */ + s?: Object; +} + +export interface ICell { + /** Column number */ + c: number; + /** Row number */ + r: number; +} + +export interface IRange { + /** Starting cell */ + s: ICell; + /** Ending cell */ + e: ICell; +} + +export interface IUtils { + /** converts an array of arrays of JS data to a worksheet. */ + aoa_to_sheet(data: T[], opts?: any): IWorkSheet; + + /** Converts a worksheet object to an array of JSON objects */ + sheet_to_json(worksheet: IWorkSheet, opts?: { + raw?: boolean; + range?: any; + header?: "A"|number|string[]; + }): T[]; + /** Generates delimiter-separated-values output */ + sheet_to_csv(worksheet: IWorkSheet, options?: { FS: string, RS: string }): string; + /** Generates a list of the formulae (with value fallbacks) */ + sheet_to_formulae(worksheet: IWorkSheet): any; + + /** Converts 0-indexed cell address to A1 form */ + encode_cell(cell: ICell): 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: ICell, e: ICell): string; + + /** Converts A1 cell address to 0-indexed form */ + decode_cell(address: string): ICell; + /** 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): IRange; +} diff --git a/types/tsconfig.json b/types/tsconfig.json new file mode 100644 index 0000000..c202db1 --- /dev/null +++ b/types/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6", + "dom" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": false, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "xlsx-tests.ts" + ] +} \ No newline at end of file diff --git a/types/tslint.json b/types/tslint.json new file mode 100644 index 0000000..5107fb4 --- /dev/null +++ b/types/tslint.json @@ -0,0 +1,6 @@ +{ + "extends": "dtslint/dt.json", + "rules": { + "interface-name": [true, "always-prefix"] + } +} diff --git a/types/xlsx-tests.ts b/types/xlsx-tests.ts new file mode 100644 index 0000000..1d25a94 --- /dev/null +++ b/types/xlsx-tests.ts @@ -0,0 +1,25 @@ +import xlsx = require('xlsx'); + +const options: xlsx.IParsingOptions = { + cellDates: true +}; + +const workbook = xlsx.readFile('test.xlsx', options); +const otherworkbook = xlsx.readFile('test.xlsx', {type: 'file'}); + +console.log(workbook.Props.Author); + +const firstsheet: string = workbook.SheetNames[0]; + +const firstworksheet = workbook.Sheets[firstsheet]; + +console.log(firstworksheet["A1"]); + +interface ITester { + name: string; + age: number; +} + +const jsonvalues: ITester[] = xlsx.utils.sheet_to_json(firstworksheet); +const csv = xlsx.utils.sheet_to_csv(firstworksheet); +const formulae = xlsx.utils.sheet_to_formulae(firstworksheet);