@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
TypeScript
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[];
}>;
};
}