UNPKG

@syncfusion/ej2-spreadsheet

Version:

Feature-rich JavaScript Spreadsheet (Excel) control with built-in support for selection, editing, formatting, importing and exporting to Excel

683 lines (682 loc) 18.1 kB
import { CellModel, BeforeSortEventArgs, SheetModel, ImageModel, ChartType, ConditionalFormatModel, AutoFillDirection, AutoFillType, ChartModel, MarkerSettingsModel, DataLabelSettingsModel, LegendSettingsModel, AxisModel, ColumnModel } from './../../workbook/index'; import { ValidationType, ValidationOperator, MergeArgs, InsertDeleteEventArgs, HyperlinkModel } from './../../workbook/index'; import { Spreadsheet, RefreshType } from '../index'; import { MenuEventArgs } from '@syncfusion/ej2-navigations'; import { BaseEventArgs, KeyboardEventArgs } from '@syncfusion/ej2-base'; import { CellInfoEventArgs, CFColor, ChartTheme, RowModel, CellStyleModel, WorkbookOpen } from './../../workbook/index'; import { SortCollectionModel, ValidationModel, WorkbookParseOptions } from './../../workbook/index'; import { PredicateModel } from '@syncfusion/ej2-grids'; /** * Interface for renderer module * * @hidden */ export interface IRenderer { colGroupWidth: number; contentPanel: HTMLElement; renderPanel(): void; getRowHeaderPanel(): Element; getColHeaderPanel(): Element; getContentPanel(): HTMLElement; getSelectAllContent(): HTMLElement; getScrollElement(): HTMLElement; getSelectAllTable(): HTMLTableElement; getContentTable(): HTMLTableElement; getColHeaderTable(): HTMLTableElement; getRowHeaderTable(): HTMLTableElement; renderTable(args: SheetRenderArgs): void; refreshRowContent(args: SheetRenderArgs): void; refreshColumnContent(args: SheetRenderArgs): void; updateRowContent(args: SheetRenderArgs): void; updateColContent(args: SheetRenderArgs): void; updateCol(sheet: SheetModel, idx: number, appendTo?: Node): Element; showHideHeaders(): void; getRowHeaderWidth(sheet: SheetModel, skipFreezeCheck?: boolean, addScaling?: boolean): number; getColHeaderHeight(sheet: SheetModel, skipHeader?: boolean): number; setPanelWidth(sheet: SheetModel, rowHdr: HTMLElement, isRtlChange?: boolean): void; getScrollSize(addOffset?: boolean): number; rowHeightChanged(args: { rowIdx: number; isHideShow?: boolean; }): void; colWidthChanged(args: { colIdx: number; isHideShow?: boolean; }): void; toggleGridlines(): void; destroy(): void; } /** @hidden */ export interface SheetRenderArgs { cells: Map<string, CellModel>; indexes: number[]; direction?: string; skipUpdateOnFirst?: boolean; top?: number; left?: number; initLoad?: boolean; prevRowColCnt?: SheetModel; isRefreshing?: boolean; insertDelete?: boolean; isOpen?: boolean; openOptions?: JsonData; } /** @hidden */ export interface FilterInfoArgs { sheetIdx: number; hasFilter?: boolean; filterRange?: number[]; col?: number[]; criteria?: string[]; allowHeaderFilter?: boolean; isFiltered?: boolean; } /** * CellRender EventArgs */ export interface CellRenderEventArgs extends CellInfoEventArgs { /** Defines the cell element. */ element: HTMLElement; needHeightCheck?: boolean; } export interface StyleType { element: Element; attrs: { [key: string]: Object; }; } /** * @hidden */ export interface FormulaBarEdit { isEdit: boolean; } /** * @hidden */ export interface IViewport { rowCount: number; colCount: number; topIndex: number; bottomIndex: number; leftIndex: number; rightIndex: number; height: number; width: number; beforeFreezeWidth: number; beforeFreezeHeight: number; scaleX: number; scaleY: number; } /** * @hidden */ export interface IOffset { idx: number; size: number; } /** * @hidden */ export interface IScrollArgs { cur: IOffset; prev: IOffset; increase: boolean; preventScroll: boolean; } /** * @hidden */ export interface IRowRenderer { render(index?: number, isRowHeader?: boolean, preventHiddenCls?: boolean): Element; refresh(index: number, pRow: Element, hRow?: Element, header?: boolean, preventHiddenCls?: boolean): Element; } /** * @hidden */ export interface ICellRenderer { renderColHeader(index: number, row: Element, refChild?: Element): void; renderRowHeader(index: number, row: Element, refChild?: Element): void; render(args: CellRenderArgs): Element; refreshRange(range: number[], refreshing?: boolean, checkWrap?: boolean, checkHeight?: boolean, checkCF?: boolean, skipFormatCheck?: boolean, checkFormulaAdded?: boolean, isFromAutoFillOption?: boolean, isHeightCheckNeeded?: boolean, isSortAction?: boolean, isSelectAll?: boolean, cells?: PreviousCellDetails[]): void; refresh(rowIdx: number, colIdx: number, lastCell?: boolean, element?: Element, checkCF?: boolean, checkWrap?: boolean, skipFormatCheck?: boolean): void; } /** * @hidden */ export interface RefreshArgs { rowIndex?: number; colIndex?: number; direction?: string; top?: number; left?: number; refresh: RefreshType; skipUpdateOnFirst?: boolean; frozenIndexes?: number[]; skipTranslate?: boolean; insertDelete?: boolean; } /** * OpenOptions */ export interface OpenOptions { /** Defines the file. */ file?: FileList | string | File; /** Defines the password. */ password?: string; /** Defines the sheet password. */ sheetPassword?: string; /** Defines the sheetIndex. */ sheetIndex?: number; } /** @hidden */ export interface OpenArgs extends OpenOptions { guid?: string; orginalFile?: File; triggerEvent?: boolean; jsonObject?: string; } /** @hidden */ export interface JsonData { data: string; eventArgs: OpenArgs; isOpenFromJson: boolean; guid?: string; context: WorkbookOpen; } /** * BeforeOpenEventArgs */ export interface BeforeOpenEventArgs { /** Defines the file. */ file: FileList | string | File; /** Defines the cancel option. */ cancel: boolean; /** Defines the request data. */ requestData: object; /** Defines the password. */ password?: string; /** Defines the parsing options that control how the Excel file is loaded. */ parseOptions?: WorkbookParseOptions; } export interface DialogBeforeOpenEventArgs { /** * Defines whether the current action can be prevented. */ cancel: boolean; /** * Returns the element of the dialog. */ element: Element; /** * Returns the target element of the dialog. */ target: HTMLElement | string; /** * Returns the name of the dialog. */ dialogName: string; /** * Defines the value that can be displayed in dialog’s content area, you can override it with your own custom message. */ content?: string; /** * Defines the cell address. */ cellAddress?: string; } /** * MenuSelectEventArgs */ export interface MenuSelectEventArgs extends MenuEventArgs { /** Defines the cancel option. */ cancel: boolean; } /** * OpenFailureArgs */ export interface OpenFailureArgs { /** Defines the status. */ status: string; /** Defines the status text. */ statusText: string; /** Defines the stack. */ stack?: string; /** Defines the message. */ message?: string; } /** * BeforeSelectEventArgs */ export interface BeforeSelectEventArgs extends BaseEventArgs { range: string; cancel: boolean; } /** * SelectEventArgs */ export interface SelectEventArgs extends BaseEventArgs { range: string; } /** @hidden */ export interface CellRenderArgs { colIdx: number; rowIdx?: number; cell?: CellModel; address?: string; lastCell?: boolean; row?: HTMLElement; hRow?: HTMLElement; pRow?: HTMLElement; pHRow?: HTMLElement; isHeightCheckNeeded?: boolean; checkNextBorder?: string; first?: string; isRefresh?: boolean; td?: HTMLTableCellElement; manualUpdate?: boolean; isRow?: boolean; isFreezePane?: boolean; insideFreezePane?: boolean; isRefreshing?: boolean; sheetIndex?: number; onActionUpdate?: boolean; refChild?: Element; formulaRefresh?: boolean; checkCF?: boolean; skipFormatCheck?: boolean; isDependentRefresh?: boolean; isMerged?: boolean; colSpan?: number; rowSpan?: number; isRandomFormula?: boolean; style?: CellStyleModel; validation?: ValidationModel; isFromAutoFillOption?: boolean; fillType?: string; isSortAction?: boolean; action?: string; isSelectAll?: boolean; rowHeight?: number; col?: ColumnModel; mergeBorderRows?: number[]; } /** @hidden */ export interface IAriaOptions<T> { role?: string; selected?: T; multiselectable?: T; busy?: T; colcount?: string; } /** * CellEditEventArgs */ export interface CellEditEventArgs { /** Defines the value. */ value: string; /** Defines the old value. */ oldValue: string; /** Defines the display text of the cell */ displayText: string; /** Defines the element. */ element: HTMLElement; /** Defines the address. */ address: string; /** Defines the cancel option. */ cancel: boolean; /** Apply the number format and display the formatted value in the editor. */ showFormattedText?: boolean; } /** * CellSaveEventArgs */ export interface CellSaveEventArgs { /** Defines the value. */ value: string; /** Defines the old value. */ oldValue: string; /** Defines the element. */ element: HTMLElement; /** Defines the address. */ address: string; /** Defines the formula. */ formula?: string; /** Defines the display text of the cell */ displayText?: string; /** Defines the type of Event. */ originalEvent?: MouseEvent & TouchEvent | KeyboardEventArgs; isSpill?: boolean; /** * Defines the old display text value. * > Only applicable for Manual calculation */ previousFormulaValue?: string | number; /** @hidden */ format?: string; } /** * NoteSaveEventArgs */ export interface NoteSaveEventArgs { /** Defines the note text. */ notes: string; /** Defines the address. */ address: string; /** Defines the type of Event. */ originalEvent?: MouseEvent & TouchEvent | KeyboardEventArgs; } /** * CellSaveEventArgs */ export interface ConditionalFormatEventArgs { /** Defines the applied conditional format. */ conditionalFormat: ConditionalFormatModel; /** Defines the cell element. */ element: HTMLElement; /** Defines the cell model */ cell: CellModel; /** Defines the address. */ address: string; /** Defines whether the formatting is applied to a cell or not. */ apply: boolean; } /** @hidden */ export interface CollaborativeEditArgs { action: string; eventArgs: UndoRedoEventArgs; cancel?: boolean; isClearAction?: boolean; } /** @hidden */ export interface HideShowEventArgs { hide: boolean; startIndex: number; endIndex: number; autoFit?: boolean; hdrRow?: HTMLElement; row?: HTMLElement; insertIdx?: number; skipAppend?: boolean; isCol?: boolean; actionUpdate?: boolean; mergeCollection?: MergeArgs[]; isFiltering?: true; cancel?: boolean; freezePane?: boolean; isUndo?: boolean; isRedo?: boolean; refreshUI?: boolean; sheetIndex?: number; hiddenIndexes?: number[]; } /** @hidden */ export interface UndoRedoEventArgs extends CellSaveEventArgs, BeforeSortEventArgs, BeforePasteEventArgs, WrapEventArgs, InsertDeleteEventArgs { requestType: string; beforeActionData: BeforeActionData; sheetIndex?: number; oldWidth?: string; oldHeight?: string; notes?: string; isCol?: boolean; hide?: boolean; index?: number; width?: string; height?: string; merge?: boolean; mergeCollection?: MergeArgs[]; id?: string; imageData?: string; imageHeight?: number; imageWidth?: number; prevHeight?: number; prevWidth?: number; currentHeight?: number; currentWidth?: number; prevLeft?: number; prevTop?: number; currentLeft?: number; currentTop?: number; prevRowIdx?: number; prevColIdx?: number; currentRowIdx?: number; currentColIdx?: number; isUndoRedo?: boolean; pasteSheetIndex: number; pastedPictureElement: HTMLElement; fillRange?: string; dataRange?: string; direction?: AutoFillDirection; fillType?: AutoFillType; selectedRange?: string; cFColor?: CFColor; sheetIdx?: number; validation?: CellValidationEventArgs; previousSort?: SortCollectionModel; conditionalFormats: ConditionalFormatModel[]; /** Specifies the previous sorted cells. */ cellDetails?: PreviousCellDetails[]; /** Specifies the sorted cells. */ sortedCellDetails?: object[]; cfClearActionArgs?: object; cfActionArgs?: { cfModel: ConditionalFormatModel[]; sheetIdx: number; }; isColSelected?: boolean; style?: CellStyleModel; } export interface BeforeActionData { cellDetails: PreviousCellDetails[]; cutCellDetails?: PreviousCellDetails[]; } export interface BeforeImageData { imageHeight?: number; imageWidth?: number; imageLeft?: number; imageTop?: number; imageData?: string; requestType: string; range?: string; cancel?: boolean; id?: string; sheetIndex?: number; } export interface BeforeImageRefreshData { prevHeight?: number; prevWidth?: number; currentHeight?: number; currentWidth?: number; prevLeft?: number; prevTop?: number; currentLeft?: number; currentTop?: number; requestType: string; prevRowIdx?: number; prevColIdx?: number; currentRowIdx?: number; currentColIdx?: number; id?: string; sheetIdx?: number; isUndoRedo?: boolean; } export interface PreviousCellDetails { rowIndex?: number; colIndex?: number; style?: object; format?: string; value?: string; notes?: string; formula?: string; wrap?: boolean; rowSpan?: number; colSpan?: number; hyperlink?: string | HyperlinkModel; image?: ImageModel[]; chart?: ChartModel[]; isLocked?: boolean; validation?: CellValidationEventArgs; isReadOnly?: boolean; formattedText?: string; copyCellValue?: string | number; autoFillText?: string | number; rowHeight?: number; } export interface BeforePasteEventArgs { cancel?: boolean; copiedInfo: { [key: string]: Object; }; copiedShapeInfo?: { [key: string]: Object; }; copiedRange: string; pastedRange: string; requestType: string; type: string; BeforeActionData?: BeforeActionData; } export interface BeforeWrapEventArgs { address: string; wrap: boolean; cancel: boolean; } export interface WrapEventArgs { address: string; wrap: boolean; action: string; } /** * CellValidationEventArgs * * @hidden */ export interface CellValidationEventArgs { range?: string; type?: ValidationType; operator?: ValidationOperator; value1?: string; value2?: string; ignoreBlank?: boolean; inCellDropDown?: boolean; cancel?: boolean; } /** * BeforeChartEventArgs * * @hidden */ export interface BeforeChartEventArgs { type?: ChartType; theme?: ChartTheme; isSeriesInRows?: boolean; markerSettings?: MarkerSettingsModel; dataLabelSettings?: DataLabelSettingsModel; title?: string; legendSettings?: LegendSettingsModel; primaryXAxis?: AxisModel; primaryYAxis?: AxisModel; range?: string; id?: string; height?: number; width?: number; top?: number; left?: number; posRange?: string; isInitCell?: boolean; cancel: boolean; enableCanvas?: boolean; skipDateInterpolation?: boolean; } /** @hidden */ export interface ScrollEventArgs { scrollTop?: number; scrollLeft?: number; preventScroll?: boolean; skipHidden?: boolean; skipRowVirualScroll?: boolean; skipColVirualScroll?: boolean; } /** * Interface for AutoFillEventArgs. */ export interface AutoFillEventArgs { /** Defines the range of the data which is used to perform autofill. */ dataRange: string; /** Defines the range in which autofill will be performed. */ fillRange: string; /** Defines the autofill performing direction. */ direction: AutoFillDirection; /** Defines the fill type options. */ fillType: AutoFillType; /** Set `true` if autofill needs to be cancel in `actionBegin` event. By default, it will be `false`. */ cancel?: boolean; } /** @hidden */ export interface duplicateSheetOption { sheetIndex: number; newSheetIndex: number; } /** @hidden */ export interface FilterCheckboxArgs { element: Element; isCheckboxFilterTemplate: boolean; column: { field: string; }; dataSource: { [key: string]: Object; }[]; btnObj: { element: HTMLElement; }; type: string; } /** @hidden */ export interface BeforeActionDataInternal extends BeforeActionData { /** Specifies the sorted cells. */ sortedCellDetails?: object[]; } /** @hidden */ export interface FillRangeInfo { startCell?: { colIndex: number; rowIndex: number; }; endCell?: { colIndex: number; rowIndex: number; }; fillRange?: number[]; direction?: AutoFillDirection; } /** * Cell model and its count details on external copy/paste. * * @hidden */ export interface PasteModelArgs { model?: RowModel[]; usedRowIndex?: number; usedColIndex?: number; colCount?: number; rowCount?: number; selection?: string; } /** * @hidden */ export interface ExtendedPredicateModel extends PredicateModel { isFilterByMenu?: boolean; } /** * @hidden */ export interface ExtendedSpreadsheet extends Spreadsheet { renderTemplates?: (callback: Function) => void; filterModule?: { filterRange: Map<number, { range: number[]; }>; }; }