@syncfusion/ej2-spreadsheet
Version:
Feature-rich JavaScript Spreadsheet (Excel) control with built-in support for selection, editing, formatting, importing and exporting to Excel
626 lines (582 loc) • 21.7 kB
TypeScript
import { Property, NotifyPropertyChanges, INotifyPropertyChanged, ModuleDeclaration, Event, isUndefined, attributes } from '@syncfusion/ej2-base';import { addClass, removeClass, EmitType, Complex, formatUnit, L10n, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';import { detach, select, closest, setStyleAttribute, EventHandler, getComponent } from '@syncfusion/ej2-base';import { MenuItemModel, BeforeOpenCloseMenuEventArgs, ItemModel } from '@syncfusion/ej2-navigations';import { mouseDown, spreadsheetDestroyed, keyUp, BeforeOpenEventArgs, clearViewer, refreshSheetTabs, positionAutoFillElement, readonlyAlert, deInitProperties, UndoRedoEventArgs, isColumnRange, isRowRange, findDlg } from '../common/index';import { performUndoRedo, overlay, DialogBeforeOpenEventArgs, createImageElement, deleteImage, removeHyperlink } from '../common/index';import { HideShowEventArgs, sheetNameUpdate, updateUndoRedoCollection, getUpdateUsingRaf, setAutoFit } from '../common/index';import { actionEvents, CollaborativeEditArgs, keyDown, enableFileMenuItems, hideToolbarItems, updateAction } from '../common/index';import { ICellRenderer, colWidthChanged, rowHeightChanged, hideRibbonTabs, addFileMenuItems, getSiblingsHeight } from '../common/index';import { defaultLocale, locale, setResize, initiateFilterUI, clearFilter, focus, removeDesignChart } from '../common/index';import { CellEditEventArgs, CellSaveEventArgs, ribbon, formulaBar, sheetTabs, formulaOperation, addRibbonTabs } from '../common/index';import { addContextMenuItems, removeContextMenuItems, enableContextMenuItems, selectRange, addToolbarItems } from '../common/index';import { cut, copy, paste, PasteSpecialType, dialog, editOperation, activeSheetChanged, refreshFormulaDatasource } from '../common/index';import { Render } from '../renderer/render';import { Scroll, VirtualScroll, Edit, CellFormat, Selection, KeyboardNavigation, KeyboardShortcut, WrapText } from '../actions/index';import { Clipboard, ShowHide, UndoRedo, SpreadsheetHyperlink, Resize, Insert, Delete, FindAndReplace, Merge, AutoFill, SpreadsheetNote } from '../actions/index';import { ProtectSheet } from '../actions/index';import { CellRenderEventArgs, IRenderer, IViewport, OpenOptions, MenuSelectEventArgs, click, hideFileMenuItems } from '../common/index';import { Dialog, ActionEvents, Overlay } from '../services/index';import { ServiceLocator } from '../../workbook/services/index';import { SheetModel, getColumnsWidth, getSheetIndex, WorkbookHyperlink, HyperlinkModel, DefineNameModel } from './../../workbook/index';import { BeforeHyperlinkArgs, AfterHyperlinkArgs, FindOptions, ValidationModel, getCellAddress, getColumnHeaderText, SortCollectionModel, PrintOptions, getSwapRange, getSheetIndexFromAddress, isReadOnlyCells, updateSortCollection } from './../../workbook/common/index';import { BeforeCellFormatArgs, afterHyperlinkCreate, getColIndex, CellStyleModel, setLinkModel } from './../../workbook/index';import { BeforeSaveEventArgs, SaveCompleteEventArgs, WorkbookInsert, WorkbookDelete, WorkbookMerge } from './../../workbook/index';import { getSheetNameFromAddress, DataBind, CellModel, beforeHyperlinkCreate, DataSourceChangedEventArgs } from './../../workbook/index';import { BeforeSortEventArgs, SortOptions, sortComplete, SortEventArgs, dataSourceChanged, isHiddenRow, isHiddenCol } from './../../workbook/index';import { getSheetIndexFromId, WorkbookEdit, WorkbookOpen, WorkbookSave, WorkbookCellFormat, WorkbookSort, getSheet } from './../../workbook/index';import { FilterOptions, FilterEventArgs, ProtectSettingsModel, findKeyUp, refreshRibbonIcons, hideShow } from './../../workbook/index';import { Workbook } from '../../workbook/base/workbook';import { getRequiredModules, ScrollSettings, ScrollSettingsModel, SelectionSettingsModel, enableToolbarItems } from '../common/index';import { SelectionSettings, BeforeSelectEventArgs, SelectEventArgs, getStartEvent, enableRibbonTabs, getDPRValue } from '../common/index';import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';import { setRowHeight, getRowsHeight, getColumnWidth, getRowHeight, getCell, setColumn, setCell, ColumnModel, RowModel, setRow } from './../../workbook/base/index';import { getRangeIndexes, getIndexesFromAddress, getCellIndexes, WorkbookNumberFormat, WorkbookFormula } from '../../workbook/index';import { Ribbon, FormulaBar, SheetTabs, Open, ContextMenu, Save, NumberFormat, Formula } from '../integrations/index';import { Sort, Filter, SpreadsheetImage, SpreadsheetChart } from '../integrations/index';import { isNumber, getColumn, getRow, WorkbookFilter, refreshInsertDelete, InsertDeleteEventArgs, RangeModel } from '../../workbook/index';import { PredicateModel, fltrPrevent } from '@syncfusion/ej2-grids';import { RibbonItemModel } from '../../ribbon/index';import { DataValidation, spreadsheetCreated, showAggregate } from './../index';import { WorkbookDataValidation, WorkbookConditionalFormat, WorkbookFindAndReplace, WorkbookAutoFill } from '../../workbook/actions/index';import { FindAllArgs, findAllValues, ClearOptions, ConditionalFormatModel, ImageModel, getFormattedCellObject } from './../../workbook/common/index';import { ConditionalFormatting } from '../actions/conditional-formatting';import { WorkbookImage, WorkbookChart, updateView, focusChartBorder, ExtendedRange, NumberFormatArgs } from '../../workbook/index';import { WorkbookProtectSheet, isImported } from '../../workbook/index';import { contentLoaded, completeAction, freeze, ConditionalFormatEventArgs, refreshOverlayElem, insertDesignChart } from '../common/index';import { beginAction, sheetsDestroyed, workbookFormulaOperation, getRangeAddress } from './../../workbook/common/index';import { updateScroll, SelectionMode, clearCopy, clearUndoRedoCollection, clearChartBorder, propertyChange } from '../common/index';import { Print } from '../renderer/print';
import {WorkbookModel} from "../../workbook/base/workbook-model";
/**
* Interface for a class Spreadsheet
*/
export interface SpreadsheetModel extends WorkbookModel{
/**
* To specify a CSS class or multiple CSS class separated by a space, add it in the Spreadsheet root element.
* This allows you to customize the appearance of component.
*
* {% codeBlock src='spreadsheet/cssClass/index.md' %}{% endcodeBlock %}
*
* @default ''
*/
cssClass?: string;
/**
* It specifies whether the Spreadsheet should be rendered with scrolling or not.
* To customize the Spreadsheet scrolling behavior, use the [`scrollSettings`](https://ej2.syncfusion.com/documentation/api/spreadsheet/#scrollSettings) property.
*
* @default true
*/
allowScrolling?: boolean;
/**
* If `allowResizing` is set to true, spreadsheet columns and rows can be resized.
*
* @default true
*/
allowResizing?: boolean;
/**
* If `showAggregate` is set to true, spreadsheet will show the AVERAGE, SUM, COUNT, MIN and MAX values based on the selected cells.
*
* @default true
*/
showAggregate?: boolean;
/**
* It enables or disables the clipboard operations (cut, copy, and paste) of the Spreadsheet.
*
* @default true
*/
enableClipboard?: boolean;
/**
* It enables or disables the context menu option of spreadsheet. By default, context menu will opens for row header,
* column header, sheet tabs, and cell.
*
* @default true
*/
enableContextMenu?: boolean;
/**
* It allows you to interact with cell, sheet tabs, formula bar, and ribbon through the keyboard device.
*
* @default true
*/
enableKeyboardNavigation?: boolean;
/**
* It enables shortcut keys to perform Spreadsheet operations like open, save, copy, paste, and more.
*
* @default true
*/
enableKeyboardShortcut?: boolean;
/**
* It allows to enable/disable undo and redo functionalities.
*
* @default true
*/
allowUndoRedo?: boolean;
/**
* It allows to enable/disable wrap text feature. By using this feature the wrapping applied cell text can wrap to the next line,
* if the text width exceeds the column width.
*
* @default true
*/
allowWrap?: boolean;
/**
* Configures the selection settings.
*
* The selectionSettings `mode` property has three values and is described below:
*
* * None: Disables UI selection.
* * Single: Allows single selection of cell, row, or column and disables multiple selection.
* * Multiple: Allows multiple selection of cell, row, or column and disables single selection.
*
* {% codeBlock src='spreadsheet/selectionSettings/index.md' %}{% endcodeBlock %}
*
* @default { mode: 'Multiple' }
*/
selectionSettings?: SelectionSettingsModel;
/**
* Configures the scroll settings.
*
* {% codeBlock src='spreadsheet/scrollSettings/index.md' %}{% endcodeBlock %}
*
* > The `allowScrolling` property should be `true`.
*
* @default { isFinite: false, enableVirtualization: true }
*/
scrollSettings?: ScrollSettingsModel;
/**
* Triggers before the cell appended to the DOM.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* beforeCellRender: (args: CellRenderEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event beforeCellRender
*/
beforeCellRender?: EmitType<CellRenderEventArgs>;
/**
* Triggers before the cell or range of cells being selected.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* beforeSelect: (args: BeforeSelectEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event beforeSelect
*/
beforeSelect?: EmitType<BeforeSelectEventArgs>;
/**
* Triggers after the cell or range of cells is selected.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* select: (args: SelectEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event select
*/
select?: EmitType<SelectEventArgs>;
/**
* Triggers before opening the context menu and it allows customizing the menu items.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* contextMenuBeforeOpen: (args: BeforeOpenCloseMenuEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event contextMenuBeforeOpen
*/
contextMenuBeforeOpen?: EmitType<BeforeOpenCloseMenuEventArgs>;
/**
* Triggers before opening the file menu.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* fileMenuBeforeOpen: (args: BeforeOpenCloseMenuEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event fileMenuBeforeOpen
*/
fileMenuBeforeOpen?: EmitType<BeforeOpenCloseMenuEventArgs>;
/**
* Triggers before closing the context menu.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* contextMenuBeforeClose: (args: BeforeOpenCloseMenuEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event contextMenuBeforeClose
*/
contextMenuBeforeClose?: EmitType<BeforeOpenCloseMenuEventArgs>;
/**
* Triggers before opening the dialog box.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* dialogBeforeOpen: (args: DialogBeforeOpenEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event dialogBeforeOpen
*/
dialogBeforeOpen?: EmitType<DialogBeforeOpenEventArgs>;
/**
* Triggers before closing the file menu.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* fileMenuBeforeClose: (args: BeforeOpenCloseMenuEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event fileMenuBeforeClose
*/
fileMenuBeforeClose?: EmitType<BeforeOpenCloseMenuEventArgs>;
/**
* Triggers when the context menu item is selected.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* contextMenuItemSelect: (args: MenuSelectEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event contextMenuItemSelect
*/
contextMenuItemSelect?: EmitType<MenuSelectEventArgs>;
/**
* Triggers when the file menu item is selected.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* fileMenuItemSelect: (args: MenuSelectEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event fileMenuItemSelect
*/
fileMenuItemSelect?: EmitType<MenuSelectEventArgs>;
/**
* Triggers before the data is populated to the worksheet.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* beforeDataBound: (args: Object) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event beforeDataBound
*/
beforeDataBound?: EmitType<Object>;
/**
* Triggers when the data is populated in the worksheet.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* dataBound: (args: Object) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event dataBound
*/
dataBound?: EmitType<Object>;
/**
* Triggers during data changes when the data is provided as `dataSource` in the Spreadsheet.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* dataSourceChanged: (args: DataSourceChangedEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event dataSourceChanged
*/
dataSourceChanged?: EmitType<DataSourceChangedEventArgs>;
/**
* Triggers when the cell is being edited.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* cellEdit: (args: CellEditEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event cellEdit
*/
cellEdit?: EmitType<CellEditEventArgs>;
/**
* Triggers every time a request is made to access cell information.
* This will be triggered when editing a cell.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* cellEditing: (args: CellEditEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event cellEditing
*/
cellEditing?: EmitType<CellEditEventArgs>;
/**
* Triggers when the cell has been edited.
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* cellEdited: (args: CellEditEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event cellEdited
*/
cellEdited?: EmitType<CellEditEventArgs>;
/**
* Triggers when the edited cell is saved.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* cellSave: (args: CellSaveEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event cellSave
*/
cellSave?: EmitType<CellSaveEventArgs>;
/**
* Triggers when before the cell is saved.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* beforeCellSave: (args: CellEditEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event beforeCellSave
*/
beforeCellSave?: EmitType<CellEditEventArgs>;
/**
* Triggers when the component is created.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* created: () => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event created
*/
created?: EmitType<Event>;
/**
* Triggers before sorting the specified range.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* beforeSort: (args: BeforeSortEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event beforeSort
*/
beforeSort?: EmitType<BeforeSortEventArgs>;
/**
* Triggers before insert a hyperlink.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* beforeHyperlinkCreate: (args: BeforeHyperlinkArgs ) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event beforeHyperlinkCreate
*/
beforeHyperlinkCreate?: EmitType<BeforeHyperlinkArgs>;
/**
* Triggers after the hyperlink inserted.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* afterHyperlinkCreate: (args: afterHyperlinkArgs ) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event afterHyperlinkCreate
*/
afterHyperlinkCreate?: EmitType<AfterHyperlinkArgs>;
/**
* Triggers when the Hyperlink is clicked.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* beforeHyperlinkClick: (args: BeforeHyperlinkArgs ) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event beforeHyperlinkClick
*/
beforeHyperlinkClick?: EmitType<BeforeHyperlinkArgs>;
/**
* Triggers when the Hyperlink function gets completed.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* afterHyperlinkClick: (args: AfterHyperlinkArgs ) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event afterHyperlinkClick
*/
afterHyperlinkClick?: EmitType<AfterHyperlinkArgs>;
/**
* Triggers before apply or remove the conditional format from a cell in a range.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* beforeConditionalFormat: (args: ConditionalFormatEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event cellSave
*/
beforeConditionalFormat?: EmitType<ConditionalFormatEventArgs>;
/**
* Triggers when the Spreadsheet actions (such as editing, formatting, sorting etc..) are starts.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* actionBegin: (args: BeforeCellFormatArgs|BeforeOpenEventArgs|BeforeSaveEventArgs|BeforeSelectEventArgs
* |BeforeSortEventArgs|CellEditEventArgs|MenuSelectEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event
*/
actionBegin?: EmitType<BeforeCellFormatArgs | BeforeOpenEventArgs | BeforeSaveEventArgs | BeforeSelectEventArgs | BeforeSortEventArgs | CellEditEventArgs | MenuSelectEventArgs>;
/**
* Triggers when the spreadsheet actions (such as editing, formatting, sorting etc..) gets completed.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* actionComplete: (args: SortEventArgs|CellSaveEventArgs|SaveCompleteEventArgs|Object) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event
*/
actionComplete?: EmitType<SortEventArgs | CellSaveEventArgs | SaveCompleteEventArgs | Object>;
/**
* Triggers when the spreadsheet importing gets completed.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* openComplete: (args: Object) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event openComplete
*/
openComplete?: EmitType<Object>;
/**
* Triggers after sorting action is completed.
*
* ```html
* <div id='Spreadsheet'></div>
* ```
* ```typescript
* new Spreadsheet({
* sortComplete: (args: SortEventArgs) => {
* }
* ...
* }, '#Spreadsheet');
* ```
*
* @event sortComplete
*/
sortComplete?: EmitType<SortEventArgs>;
/**
* Defines the currencyCode format of the Spreadsheet cells
*
* @private
*/
currencyCode?: string;
}