UNPKG

@syncfusion/ej2-spreadsheet

Version:

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

851 lines (850 loc) 92.6 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; import { detach, EventHandler, Browser, isNullOrUndefined, extend, isUndefined } from '@syncfusion/ej2-base'; import { getRangeIndexes, getCell, getSheet, getSwapRange, inRange, isReadOnlyCells, setCell, checkColumnValidation, getRowHeight, getColumnWidth } from '../../workbook/index'; import { getRangeAddress, getSheetIndexFromId, getSheetName } from '../../workbook/index'; import { getFormattedCellObject, workbookFormulaOperation, checkIsFormula, mergedRange } from '../../workbook/index'; import { setMerge, getCellIndexes } from '../../workbook/index'; import { ribbonClick, copy, paste, initiateFilterUI, setPosition, isLockedCells, focus, readonlyAlert, isValidUrl } from '../common/index'; import { hasTemplate, getTextHeightWithBorder, getLines, getExcludedColumnWidth, editAlert } from '../common/index'; import { enableToolbarItems, rowHeightChanged, completeAction, insertImage } from '../common/index'; import { clearCopy, selectRange, dialog, contentLoaded, tabSwitch, cMenuBeforeOpen, createImageElement, setMaxHgt } from '../common/index'; import { getMaxHgt, setRowEleHeight, locale, deleteImage, getRowIdxFromClientY, getColIdxFromClientX, cut } from '../common/index'; import { colWidthChanged, getFilterRange } from '../common/index'; import { Deferred } from '@syncfusion/ej2-data'; import { refreshRibbonIcons, refreshClipboard, getColumn, isLocked as isCellLocked } from '../../workbook/index'; import { setFilteredCollection, setChart, parseIntValue, isSingleCell, activeCellMergedRange, getRowsHeight } from '../../workbook/index'; import { getUpdatedFormula, clearCFRule, checkUniqueRange, clearFormulaDependentCells } from '../../workbook/index'; import { updateCell, beginAction, isFilterHidden, applyCF, checkRange } from '../../workbook/index'; import { cellValidation, removeUniquecol, wrapEvent } from '../../workbook/common/event'; /** * Represents clipboard support for Spreadsheet. */ var Clipboard = /** @class */ (function () { function Clipboard(parent) { this.parent = parent; this.init(); this.addEventListener(); } Clipboard.prototype.init = function () { this.parent.element.appendChild(this.parent.createElement('input', { className: 'e-clipboard', attrs: { 'contenteditable': 'true', 'tabindex': '-1', 'aria-hidden': 'true' } })); }; Clipboard.prototype.addEventListener = function () { var ele = this.getClipboardEle(); this.parent.on(cut, this.cut, this); this.parent.on(copy, this.copy, this); this.parent.on(paste, this.paste, this); this.parent.on(clearCopy, this.clearCopiedInfo, this); this.parent.on(tabSwitch, this.tabSwitchHandler, this); this.parent.on(cMenuBeforeOpen, this.cMenuBeforeOpenHandler, this); this.parent.on(ribbonClick, this.ribbonClickHandler, this); this.parent.on(contentLoaded, this.initCopyIndicator, this); this.parent.on(rowHeightChanged, this.rowHeightChanged, this); this.parent.on(colWidthChanged, this.colWidthChanged, this); this.parent.on(refreshClipboard, this.refreshOnInsertDelete, this); EventHandler.add(ele, 'cut', this.cut, this); EventHandler.add(ele, 'copy', this.copy, this); EventHandler.add(ele, 'paste', this.paste, this); }; Clipboard.prototype.removeEventListener = function () { var ele = this.getClipboardEle(); if (!this.parent.isDestroyed) { this.parent.off(cut, this.cut); this.parent.off(copy, this.copy); this.parent.off(paste, this.paste); this.parent.off(clearCopy, this.clearCopiedInfo); this.parent.off(tabSwitch, this.tabSwitchHandler); this.parent.off(cMenuBeforeOpen, this.cMenuBeforeOpenHandler); this.parent.off(ribbonClick, this.ribbonClickHandler); this.parent.off(contentLoaded, this.initCopyIndicator); this.parent.off(rowHeightChanged, this.rowHeightChanged); this.parent.off(colWidthChanged, this.colWidthChanged); this.parent.off(refreshClipboard, this.refreshOnInsertDelete); } EventHandler.remove(ele, 'cut', this.cut); EventHandler.remove(ele, 'copy', this.copy); EventHandler.remove(ele, 'paste', this.paste); }; Clipboard.prototype.ribbonClickHandler = function (args) { var parentId = this.parent.element.id; switch (args.item.id) { case parentId + '_cut': this.cut({ invokeCopy: true }); break; case parentId + '_copy': this.copy({ invokeCopy: true }); break; } }; Clipboard.prototype.tabSwitchHandler = function (args) { if (args.activeTab === 0 && !this.copiedInfo && !this.copiedShapeInfo) { this.hidePaste(); } }; Clipboard.prototype.cMenuBeforeOpenHandler = function (e) { var sheet = this.parent.getActiveSheet(); var l10n = this.parent.serviceLocator.getService(locale); var delRowItems = []; var hideRowItems = []; var delColItems = []; var hideColItems = []; var actCell = sheet.activeCell; var actCellIndex = getCellIndexes(actCell); var cellObj = getCell(actCellIndex[0], actCellIndex[1], sheet); var isLocked = sheet.isProtected && isCellLocked(cellObj, getColumn(sheet, actCellIndex[1])); if (e.target === 'Content' || e.target === 'RowHeader' || e.target === 'ColumnHeader' || e.target === 'SelectAll') { this.parent.enableContextMenuItems([l10n.getConstant('Paste'), l10n.getConstant('PasteSpecial')], (this.copiedInfo || this.copiedShapeInfo && !isLocked) ? true : false); this.parent.enableContextMenuItems([l10n.getConstant('Cut')], !isLocked); } if (e.target === 'Content') { if (sheet.isProtected) { this.parent.enableContextMenuItems([l10n.getConstant('Filter'), l10n.getConstant('Sort'), l10n.getConstant('AddNote')], false); } if (isLocked) { this.parent.enableContextMenuItems([l10n.getConstant('Cut'), l10n.getConstant('Hyperlink'), l10n.getConstant('EditNote'), l10n.getConstant('DeleteNote')], false); } else if (isReadOnlyCells(this.parent, getSwapRange(getRangeIndexes(sheet.selectedRange)))) { this.parent.enableContextMenuItems([l10n.getConstant('Cut'), l10n.getConstant('Paste'), l10n.getConstant('PasteSpecial'), l10n.getConstant('Filter'), l10n.getConstant('Sort'), l10n.getConstant('Hyperlink'), l10n.getConstant('EditHyperlink'), l10n.getConstant('OpenHyperlink'), l10n.getConstant('RemoveHyperlink'), l10n.getConstant('AddNote')], false); } else if (sheet.isProtected && !sheet.protectSettings.insertLink) { this.parent.enableContextMenuItems([l10n.getConstant('Hyperlink')], false); } } if (sheet.isProtected) { if (e.target === 'ColumnHeader') { delColItems = [l10n.getConstant('DeleteColumn'), l10n.getConstant('DeleteColumns'), l10n.getConstant('InsertColumn'), l10n.getConstant('InsertColumns')]; hideColItems = [l10n.getConstant('HideColumn'), l10n.getConstant('HideColumns'), l10n.getConstant('UnhideColumns')]; this.parent.enableContextMenuItems(delColItems, false); this.parent.enableContextMenuItems(hideColItems, sheet.protectSettings.formatColumns); } if (e.target === 'RowHeader') { delRowItems = [l10n.getConstant('DeleteRow'), l10n.getConstant('DeleteRows'), l10n.getConstant('InsertRow'), l10n.getConstant('InsertRows')]; hideRowItems = [l10n.getConstant('HideRow'), l10n.getConstant('HideRows'), l10n.getConstant('UnhideRows')]; this.parent.enableContextMenuItems(delRowItems, false); this.parent.enableContextMenuItems(hideRowItems, sheet.protectSettings.formatRows); } } }; Clipboard.prototype.rowHeightChanged = function (args) { if (this.copiedInfo) { var ele = this.getCopyIndicator(); if (ele) { if (this.copiedInfo.range[0] > args.rowIdx) { ele.style.top = parseFloat(ele.style.top) + args.threshold + "px"; } else if (inRange(this.copiedInfo.range, args.rowIdx, this.copiedInfo.range[1])) { ele.style.height = parseFloat(ele.style.height) + args.threshold + "px"; } } } }; Clipboard.prototype.colWidthChanged = function (args) { if (this.copiedInfo) { var ele = this.getCopyIndicator(); if (ele) { if (this.copiedInfo.range[1] > args.colIdx) { ele.style.left = parseFloat(ele.style.left) + args.threshold + "px"; } else if (inRange(this.copiedInfo.range, this.copiedInfo.range[0], args.colIdx)) { ele.style.width = parseFloat(ele.style.width) + args.threshold + "px"; } } } }; Clipboard.prototype.cut = function (args) { this.setCopiedInfo(args, true); }; Clipboard.prototype.copy = function (args) { this.setCopiedInfo(args, false); }; Clipboard.prototype.paste = function (args) { var _this = this; if (this.parent.isEdit || this.parent.element.getElementsByClassName('e-dlg-overlay').length > 0) { var editEle = this.parent.element.getElementsByClassName('e-spreadsheet-edit')[0]; editEle.style.height = 'auto'; return; } var rfshRange; var isExternal = ((args && args.clipboardData) || window['clipboardData']); if (isExternal && args.clipboardData && args.clipboardData.getData('isInternalCut').length && !this.copiedInfo) { return; // to prevent multiple cut paste action } if (isExternal || this.copiedShapeInfo || (args.isInternal && this.copiedInfo)) { args.isInternal = !isExternal; var isCut = void 0; var copiedIdx = this.getCopiedIdx(); args.isAction = !!isExternal || args.isAction; var cSIdx = args && args.sIdx > -1 ? args.sIdx : this.parent.activeSheetIndex; var curSheet_1 = getSheet(this.parent, cSIdx); var selIdx = getSwapRange(args && args.range || getRangeIndexes(curSheet_1.selectedRange)); var pasteModelArgs = void 0; var rows = void 0; if (isExternal) { pasteModelArgs = this.getExternalCells(args); rows = pasteModelArgs.model; if (!args.isInternal && pasteModelArgs.internal) { isExternal = false; if (!this.copiedInfo) { return; } } if (!rows || !rows.length) { // If image pasted if (pasteModelArgs.file) { this.parent.notify(insertImage, { file: pasteModelArgs.file }); return; } else if (this.copiedInfo) { isExternal = false; } else { return; } } } pasteModelArgs = pasteModelArgs; var copyInfo = Object.assign({ isExternal: isExternal }, this.copiedInfo); var cIdx_1; var pSheetIdx_1; var column = void 0; var notRemoveMerge = void 0; var isRepeative = void 0; var cSheetSel = void 0; var prevSheet_1; var isRowSelected = void 0; var isColSelected = void 0; if (isExternal) { pSheetIdx_1 = cSIdx; prevSheet_1 = getSheet(this.parent, pSheetIdx_1); column = {}; cSheetSel = pasteModelArgs.selection; isRepeative = cSheetSel !== 'Sheet' && (selIdx[2] - selIdx[0] + 1) % pasteModelArgs.rowCount === 0 && (selIdx[3] - selIdx[1] + 1) % pasteModelArgs.colCount === 0; cIdx_1 = [0, 0, pasteModelArgs.usedRowIndex, pasteModelArgs.usedColIndex]; } else { cIdx_1 = getSwapRange(this.copiedShapeInfo ? getRangeIndexes(curSheet_1.selectedRange) : this.copiedInfo.range); pSheetIdx_1 = copiedIdx; column = getColumn(curSheet_1, cIdx_1[1]); notRemoveMerge = isSingleCell(cIdx_1) && this.isRangeMerged(selIdx, curSheet_1); prevSheet_1 = getSheet(this.parent, pSheetIdx_1); isRepeative = !notRemoveMerge && (selIdx[2] - selIdx[0] + 1) % (cIdx_1[2] - cIdx_1[0] + 1) === 0 && (selIdx[3] - selIdx[1] + 1) % (cIdx_1[3] - cIdx_1[1] + 1) === 0; if (prevSheet_1) { isRowSelected = cIdx_1[1] === 0 && cIdx_1[3] === prevSheet_1.colCount - 1; isColSelected = cIdx_1[0] === 0 && cIdx_1[2] === prevSheet_1.rowCount - 1; if (isRowSelected) { if (isColSelected) { cSheetSel = 'Sheet'; cIdx_1[2] = prevSheet_1.usedRange.rowIndex; cIdx_1[3] = prevSheet_1.usedRange.colIndex; } else { cSheetSel = 'Row'; cIdx_1[3] = prevSheet_1.usedRange.colIndex; } } else if (isColSelected) { cSheetSel = 'Column'; cIdx_1[2] = prevSheet_1.usedRange.rowIndex; } } } rfshRange = isRepeative ? selIdx : [selIdx[0], selIdx[1]] .concat([selIdx[0] + cIdx_1[2] - cIdx_1[0], selIdx[1] + cIdx_1[3] - cIdx_1[1] || selIdx[1]]); if (cSheetSel) { if ((cSheetSel === 'Sheet' || cSheetSel === 'Column') && rfshRange[2] < curSheet_1.usedRange.rowIndex) { rfshRange[2] = curSheet_1.usedRange.rowIndex; } if ((cSheetSel === 'Sheet' || cSheetSel === 'Row') && rfshRange[3] < curSheet_1.usedRange.colIndex) { rfshRange[3] = curSheet_1.usedRange.colIndex; } } var pasteType = (args && args.type) || 'All'; if (isReadOnlyCells(this.parent, rfshRange)) { this.parent.notify(readonlyAlert, null); return; } else if (curSheet_1.isProtected && isLockedCells(this.parent, rfshRange)) { this.parent.notify(editAlert, null); return; } if (args.isAction && !this.copiedShapeInfo) { var beginEventArgs = { requestType: 'paste', copiedInfo: this.copiedInfo, copiedRange: getRangeAddress(cIdx_1), pastedRange: getRangeAddress(rfshRange), type: pasteType, cancel: false }; this.parent.notify(beginAction, { eventArgs: beginEventArgs, action: 'clipboard' }); if (beginEventArgs.cancel) { return; } selIdx = getRangeIndexes(beginEventArgs.pastedRange); if (isExternal) { isRepeative = pasteModelArgs.selection !== 'Sheet' && (selIdx[2] - selIdx[0] + 1) % pasteModelArgs.rowCount === 0 && (selIdx[3] - selIdx[1] + 1) % pasteModelArgs.colCount === 0; } else { isRepeative = !notRemoveMerge && !isRowSelected && (selIdx[2] - selIdx[0] + 1) % (cIdx_1[2] - cIdx_1[0] + 1) === 0 && !isColSelected && (selIdx[3] - selIdx[1] + 1) % (cIdx_1[3] - cIdx_1[1] + 1) === 0; } rfshRange = isRepeative ? selIdx : [selIdx[0], selIdx[1]].concat([selIdx[0] + cIdx_1[2] - cIdx_1[0], selIdx[1] + cIdx_1[3] - cIdx_1[1] || selIdx[1]]); pasteType = beginEventArgs.type; } var selectionRange = void 0; if (cSheetSel) { selectionRange = [].concat(rfshRange); if (cSheetSel === 'Sheet' || cSheetSel === 'Column') { if (rfshRange[2] < curSheet_1.usedRange.rowIndex) { rfshRange[2] = curSheet_1.usedRange.rowIndex; } if (cIdx_1[2] < curSheet_1.usedRange.rowIndex) { cIdx_1[2] += curSheet_1.usedRange.rowIndex - cIdx_1[2]; } if (selectionRange[2] < curSheet_1.rowCount) { selectionRange[2] = curSheet_1.rowCount - 1; } } if (cSheetSel === 'Sheet' || cSheetSel === 'Row') { if (rfshRange[3] < curSheet_1.usedRange.colIndex) { cIdx_1[3] += curSheet_1.usedRange.colIndex - rfshRange[3]; rfshRange[3] = curSheet_1.usedRange.colIndex; } if (cIdx_1[3] < curSheet_1.usedRange.colIndex) { cIdx_1[3] += curSheet_1.usedRange.colIndex - cIdx_1[3]; } if (selectionRange[3] < curSheet_1.colCount) { selectionRange[3] = curSheet_1.colCount - 1; } } } else { selectionRange = rfshRange; } var cell = void 0; var isExtend = void 0; var prevCell = void 0; var rowIdx = selIdx[0]; var mergeCollection = []; if (curSheet_1.isProtected && isLockedCells(this.parent, rfshRange)) { this.parent.notify(editAlert, null); return; } if (this.copiedShapeInfo && !this.copiedInfo) { var pictureElem = this.copiedShapeInfo.pictureElem; if (pictureElem.classList.contains('e-datavisualization-chart')) { this.copiedShapeInfo.chartInfo.top = null; this.copiedShapeInfo.chartInfo.left = null; this.parent.notify(setChart, { chart: [this.copiedShapeInfo.chartInfo], isInitCell: true, isUndoRedo: true, isPaste: true, dataSheetIdx: this.copiedShapeInfo.sheetIdx, isCut: this.copiedShapeInfo.isCut, sheetId: curSheet_1.id, range: args.range || curSheet_1.name + "!" + curSheet_1.selectedRange }); } else { this.parent.notify(createImageElement, { options: { src: pictureElem.style.backgroundImage.replace(/url\((['"])?(.*?)\1\)/gi, '$2'), height: this.copiedShapeInfo.height, width: this.copiedShapeInfo.width, id: this.copiedShapeInfo.isCut ? pictureElem.id : '' }, range: getRangeAddress([rowIdx, selIdx[1], rowIdx, selIdx[1]]), isPublic: false, isUndoRedo: true }); } var pastedCell = getCell(rowIdx, selIdx[1], curSheet_1); if (pastedCell && !isNullOrUndefined(pastedCell.image) && pastedCell.image.length > 0) { var eventArgs = { requestType: 'imagePaste', copiedShapeInfo: this.copiedShapeInfo, pasteSheetIndex: this.parent.activeSheetIndex, pastedRange: getSheetName(this.parent) + '!' + getRangeAddress([rowIdx, selIdx[1], rowIdx, selIdx[1]]), pastedPictureElement: document.getElementById(pastedCell.image[pastedCell.image.length - 1].id) }; this.parent.notify(completeAction, { eventArgs: eventArgs, action: 'clipboard' }); } } else { var cRows = []; var isInRange = this.isInRange(cIdx_1, selIdx, copiedIdx); var isFullRowMerge = false; var isFullColMerge = false; var hiddenCount = 0; var cf = []; var cfRule = void 0; var cancel = void 0; if (!isRepeative && pasteType !== 'Values') { cfRule = this.setCF(cIdx_1, rfshRange, prevSheet_1, curSheet_1, cf, cfRule); } var isUniqueCell = false; var uniqueCellColl = []; var copyCellArgs = { sheet: curSheet_1, isExternal: !!isExternal }; var pasteSetCell = this.setCell(copyCellArgs); var cutSetCell_1 = !isExternal && this.copiedInfo.isCut && this.setCell({ sheet: prevSheet_1 }); var prevSheetMergeCollection = []; var colValidationCollection = []; var pasteMergeCollection = []; for (var i = cIdx_1[0], l = 0; i <= cIdx_1[2]; i++, l++) { if (!isExternal && !copyInfo.isCut && isFilterHidden(prevSheet_1, i)) { l--; hiddenCount++; continue; } if (isInRange) { cRows[selIdx[0] + l] = { cells: [] }; } for (var j = cIdx_1[1], k = 0; j <= cIdx_1[3]; j++, k++) { if (isInRange) { cRows[selIdx[0] + l].cells[selIdx[1] + k] = getCell(selIdx[0] + l, selIdx[1] + k, prevSheet_1, false, true); } cell = isExternal ? (rows[i] && rows[i].cells[j]) || {} : extend({}, (isInRange && cRows[i] && cRows[i].cells[j]) ? cRows[i].cells[j] : getCell(i, j, prevSheet_1), null, true); column = getColumn(prevSheet_1, j); if (!cell.validation && checkColumnValidation(column, i, j)) { var validation = Object.assign({}, column.validation); var prevIdx = [0, cIdx_1[1], 0, cIdx_1[3]]; var value1 = validation.value1; var value2 = validation.value2; if (checkIsFormula(value1)) { validation.value1 = getUpdatedFormula([i, j], prevIdx, prevSheet_1, this.parent, { formula: value1 }); } if (checkIsFormula(value2)) { validation.value2 = getUpdatedFormula([i, j], prevIdx, prevSheet_1, this.parent, { formula: value2 }); } cell.validation = validation; } if (cell && cell.isReadOnly) { delete cell.isReadOnly; } if (isRowSelected || isColSelected) { if (cell && cell.rowSpan) { if (cell.rowSpan > 0) { if ((cell.rowSpan + i) - 1 <= cIdx_1[2]) { isFullRowMerge = true; } else { cell = {}; } } else if (!isFullRowMerge) { cell = {}; } else if (cell.rowSpan < 0) { var rowSpan = cell.rowSpan; var colSpan = cell.colSpan ? cell.colSpan : 0; var spanCell = getCell(rowIdx + rowSpan, (selIdx[1] + k) + colSpan, curSheet_1); if (spanCell && !spanCell.rowSpan) { cell = {}; } } } if (cell && cell.colSpan) { if (cell.colSpan > 0) { if ((cell.colSpan + j) - 1 <= cIdx_1[3]) { isFullColMerge = true; } else { cell = {}; } } else if (!isFullColMerge) { cell = {}; } } } if (cell && pasteType) { var model = void 0; switch (pasteType) { case 'Formats': model = { format: cell.format, style: cell.style }; if (this.copiedInfo && !this.copiedInfo.isCut) { if (cell.rowSpan) { model.rowSpan = cell.rowSpan; } if (cell.colSpan) { model.colSpan = cell.colSpan; } } cell = model; break; case 'Values': cell = { value: cell.value }; if (cell.value && cell.value.toString().indexOf('\n') > -1) { var ele = this.parent.getCell(selIdx[0], selIdx[1]); ele.classList.add('e-alt-unwrap'); } break; } isExtend = ['Formats', 'Values'].indexOf(pasteType) > -1; } if ((!this.parent.scrollSettings.isFinite && (cIdx_1[2] - cIdx_1[0] > (1048575 - selIdx[0]) || cIdx_1[3] - cIdx_1[1] > (16383 - selIdx[1]))) || (this.parent.scrollSettings.isFinite && (cIdx_1[2] - cIdx_1[0] > (curSheet_1.rowCount - 1 - selIdx[0]) || cIdx_1[3] - cIdx_1[1] > (curSheet_1.colCount - 1 - selIdx[1])))) { this.showDialog(); return; } if (isRepeative) { for (var x = selIdx[0]; x <= selIdx[2]; x += (cIdx_1[2] - cIdx_1[0]) + 1) { if (!copyInfo.isCut && !hiddenCount && isFilterHidden(curSheet_1, x + l)) { continue; } for (var y = selIdx[1]; y <= selIdx[3]; y += (cIdx_1[3] - cIdx_1[1] + 1)) { if (i === cIdx_1[0] && j === cIdx_1[1] && (cfRule === undefined || cfRule.length) && pasteType !== 'Values') { cfRule = this.setCF(cIdx_1, [x, y, x + (cIdx_1[2] - cIdx_1[0]), y + (cIdx_1[3] - cIdx_1[1])], prevSheet_1, curSheet_1, cf, cfRule); } prevCell = getCell(x + l, y + k, curSheet_1, false, true); if (!isExternal && (!isNullOrUndefined(prevCell.colSpan) || !isNullOrUndefined(prevCell.rowSpan))) { if (isRowSelected || isColSelected) { continue; } var merge = { range: [x + l, y + k, x + l, y + k], merge: false, isAction: false, type: 'All', sheetIndex: cSIdx, preventRefresh: cSIdx !== this.parent.activeSheetIndex }; mergeCollection.push(merge); this.parent.notify(setMerge, merge); } var colInd = y + k; if (cell && cell.rowSpan > 1 || cell.colSpan > 1) { var pasteRange = [x + l, colInd, x + l + (cell.rowSpan || 1) - 1, colInd + (cell.colSpan || 1) - 1]; var hasOverlap = !(pasteRange[2] < cIdx_1[0] || pasteRange[0] > cIdx_1[2] || pasteRange[3] < cIdx_1[1] || pasteRange[1] > cIdx_1[3]); if (hasOverlap) { pasteMergeCollection.push(pasteRange); } } cell = extend({}, cell ? cell : {}, null, true); if (!isExtend && this.copiedInfo && !this.copiedInfo.isCut && cell.formula) { var newFormula = getUpdatedFormula([x + l, colInd], [i, j], prevSheet_1, this.parent, isInRange ? cell : null); if (!isNullOrUndefined(newFormula)) { cell.formula = newFormula; } } if (this.copiedInfo && !this.copiedInfo.isCut && cell.validation) { var currIdx = selIdx; var prevIdx = cIdx_1; var updatedVal = getUpdatedFormula(currIdx, prevIdx, prevSheet_1, this.parent, { formula: cell.validation.value1 }); cell.validation.value1 = updatedVal; if (cell.validation.value2 !== '') { updatedVal = getUpdatedFormula(currIdx, prevIdx, prevSheet_1, this.parent, { formula: cell.validation.value2 }); cell.validation.value2 = updatedVal; } } if (curSheet_1.isProtected && cell && cell.isLocked !== false) { cell.isLocked = prevCell.isLocked; } if (prevCell && prevCell.formula && prevCell.formula.indexOf('=UNIQUE(') > -1) { this.parent.notify(removeUniquecol, null); } var uniqueFormulaArgs = { cellIdx: [i, j], isUnique: false, uniqueRange: '', sheetName: prevSheet_1.name }; this.parent.notify(checkUniqueRange, uniqueFormulaArgs); if (uniqueFormulaArgs.isUnique) { cell.value = null; } isUniqueCell = false; if (cell && cell.formula && cell.formula.indexOf('=UNIQUE(') > -1) { isUniqueCell = true; uniqueCellColl.push([x, colInd]); cell.value = null; } cancel = pasteSetCell(x + l, colInd, cell, colInd === selIdx[3], isExtend, isUniqueCell, args.beforeActionData, args.isUndo); if (cancel) { continue; } if (cell.formula && this.copiedInfo && this.copiedInfo.isCut) { this.parent.notify(clearFormulaDependentCells, { cellRef: getRangeAddress([i, j, i, j]) }); } } } } else { if (isExternal || !hasTemplate(this.parent, i, j, copiedIdx)) { if (notRemoveMerge) { pasteSetCell(rowIdx, selIdx[1] + k, { value: cell.value }, j === cIdx_1[3], true); } else { pasteSetCell(rowIdx, selIdx[1] + k, cell, j === cIdx_1[3], isExtend); } } } if (!isExternal && this.copiedInfo.isCut && !(inRange(selIdx, i, j) && copiedIdx === this.parent.activeSheetIndex)) { var cell_1 = getCell(i, j, prevSheet_1); var isWrapApplied = void 0; if (cell_1) { if (cell_1.isReadOnly) { continue; } if (cell_1.isLocked || isNullOrUndefined(cell_1.isLocked)) { if ((isRowSelected || isColSelected) && (cell_1.rowSpan !== undefined || cell_1.colSpan !== undefined)) { if (cell_1.rowSpan > 1 || cell_1.colSpan > 1) { prevSheetMergeCollection.push({ range: [i, j, i, j], rowSpan: cell_1.rowSpan, colSpan: cell_1.colSpan }); cell_1 = null; } else { continue; } } else { if (!cell_1.validation && prevSheet_1.columns[j] && prevSheet_1.columns[j].validation && colValidationCollection.indexOf(j) === -1) { colValidationCollection.push(j); } isWrapApplied = cell_1.wrap; cell_1 = null; } } else if (cell_1.isLocked === false) { isWrapApplied = cell_1.wrap; if (prevSheet_1.isProtected) { cell_1 = { isLocked: false }; } else { cell_1 = null; } } } cutSetCell_1(i, j, cell_1, j === cIdx_1[3]); if (isWrapApplied && !getCell(i, j, prevSheet_1, false, true).wrap) { this.parent.notify(wrapEvent, { range: [i, j, i, j], wrap: false, sheet: prevSheet_1 }); } } } rowIdx++; } if (pasteMergeCollection.length) { pasteMergeCollection.forEach(function (pasteRange) { for (var row = pasteRange[0]; row <= pasteRange[2]; row++) { for (var col = pasteRange[1]; col <= pasteRange[3]; col++) { if (row === pasteRange[0] && col === pasteRange[1]) { continue; } else { var cell_2 = getCell(row, col, curSheet_1, false, true); if (cell_2 && cell_2.rowSpan === undefined && cell_2.colSpan === undefined) { if (row !== pasteRange[0]) { cell_2.rowSpan = pasteRange[0] - row; } if (col !== pasteRange[1]) { cell_2.colSpan = pasteRange[1] - col; } var cellElement = _this.parent.getCell(row, col); if (cellElement) { _this.parent.serviceLocator.getService('cell').refresh(row, col, false, cellElement); } } } } } }); } if (prevSheetMergeCollection.length) { prevSheetMergeCollection.forEach(function (mergeInfo) { setCell(mergeInfo.range[0], mergeInfo.range[1], prevSheet_1, { rowSpan: mergeInfo.rowSpan, colSpan: mergeInfo.colSpan }); var mergeArgs = { range: mergeInfo.range }; _this.parent.notify(mergedRange, mergeArgs); _this.parent.notify(setMerge, { merge: false, range: mergeArgs.range, type: 'All', sheetIndex: pSheetIdx_1, preventRefresh: pSheetIdx_1 !== _this.parent.activeSheetIndex }); mergeArgs.range = mergeArgs.range; for (var sRowIdx = mergeArgs.range[0]; sRowIdx <= mergeArgs.range[2]; sRowIdx++) { for (var sColIdx = mergeArgs.range[1]; sColIdx <= mergeArgs.range[3]; sColIdx++) { cutSetCell_1(sRowIdx, sColIdx, null); } } }); } if (colValidationCollection.length) { colValidationCollection.forEach(function (colIdx) { _this.parent.notify(cellValidation, { range: prevSheet_1.name + '!' + getRangeAddress([cIdx_1[0], colIdx, cIdx_1[2], colIdx]), isRemoveValidation: true }); }); } if (uniqueCellColl.length) { for (var i = 0; i < uniqueCellColl.length; i++) { this.parent.serviceLocator.getService('cell').refresh(uniqueCellColl[i][0], uniqueCellColl[i][1]); } } if (copyCellArgs.isRandFormula && this.parent.calculationMode === 'Automatic') { this.parent.notify(workbookFormulaOperation, { action: 'refreshRandomFormula' }); } this.parent.notify(refreshRibbonIcons, null); var hiddenDiff = rfshRange[2] - hiddenCount; var selHiddenDiff = selectionRange[2] - hiddenCount; rfshRange[2] = hiddenDiff; selectionRange[2] = selHiddenDiff; this.parent.setUsedRange(rfshRange[2], rfshRange[3]); var selRange = getRangeAddress(selectionRange); if (cSIdx === this.parent.activeSheetIndex && !args.isFromUpdateAction) { this.parent.notify(selectRange, { address: selRange }); } if (!isExternal && this.copiedInfo.isCut) { isCut = this.copiedInfo.isCut; if (copiedIdx === this.parent.activeSheetIndex) { this.parent.serviceLocator.getService('cell').refreshRange(cIdx_1); } this.clearCopiedInfo(); } if ((isExternal || isInRange) && this.copiedInfo) { this.clearCopiedInfo(); } var clearCFArgs = void 0; if (isCut) { if (cfRule && cfRule.length && pasteType !== 'Values') { clearCFArgs = { range: cIdx_1, sheetIdx: pSheetIdx_1, isClear: true }; this.parent.notify(clearCFRule, clearCFArgs); } //this.updateFilter(copyInfo, rfshRange); var isActSheet = this.parent.activeSheetIndex === pSheetIdx_1; var rowHeight = isActSheet ? (this.parent.getRow(cIdx_1[0], null, this.parent.frozenColCount(prevSheet_1)) || { offsetHeight: 20 }).offsetHeight : getRowHeight(prevSheet_1, cIdx_1[0], false, true); setMaxHgt(prevSheet_1, cIdx_1[0], cIdx_1[1], rowHeight); var hgt = getMaxHgt(prevSheet_1, cIdx_1[0]); setRowEleHeight(this.parent, prevSheet_1, hgt, cIdx_1[0], undefined, undefined, isActSheet, !isActSheet); } if (cf.length && cSIdx === this.parent.activeSheetIndex) { this.parent.notify(applyCF, { cfModel: cf, isAction: true }); } var copySheet = getSheet(this.parent, copiedIdx); if (!isExternal && cIdx_1[0] === cIdx_1[2] && cSheetSel === 'Row') { var hgt = copySheet.rows[cIdx_1[0]].height; for (var i = selIdx[0]; i <= selIdx[2]; i++) { setRowEleHeight(this.parent, this.parent.getActiveSheet(), hgt, i); } if (isCut) { var defaultHeight = copySheet && copySheet.standardHeight ? copySheet.standardHeight : 20; setRowEleHeight(this.parent, copySheet, defaultHeight, cIdx_1[0]); } } if (args.isAction) { var eventArgs = { requestType: 'paste', copiedInfo: copyInfo, mergeCollection: mergeCollection, pasteSheetIndex: this.parent.activeSheetIndex, copiedRange: prevSheet_1.name + '!' + (copyInfo.range ? getRangeAddress(copyInfo.range) : prevSheet_1.selectedRange), pastedRange: curSheet_1.name + '!' + getRangeAddress(rfshRange), type: pasteType || 'All', selectedRange: selRange }; if (hiddenCount) { eventArgs['skipFilterCheck'] = true; } if (clearCFArgs && clearCFArgs.cfClearActionArgs) { eventArgs['cfClearActionArgs'] = clearCFArgs.cfClearActionArgs; } if (cf.length) { eventArgs['cfActionArgs'] = { cfModel: cf, sheetIdx: cSIdx }; } this.parent.notify(completeAction, { eventArgs: eventArgs, action: 'clipboard' }); } if (args.focus) { focus(this.parent.element); } } } else { this.getClipboardEle().select(); } }; Clipboard.prototype.setCF = function (cRange, pRange, cSheet, pSheet, cf, conditionalFormats) { var _this = this; var cfRange; var indexes; var assignCF = function (conditionalFormat) { cfRange = [pRange[0] + (indexes[0] <= cRange[0] ? 0 : indexes[0] - cRange[0]), pRange[1] + (indexes[1] <= cRange[1] ? 0 : indexes[1] - cRange[1]), pRange[2] - (indexes[2] >= cRange[2] ? 0 : cRange[2] - indexes[2]), pRange[3] - (indexes[3] >= cRange[3] ? 0 : cRange[3] - indexes[3])]; if (!pSheet.conditionalFormats) { _this.parent.setSheetPropertyOnMute(pSheet, 'conditionalFormats', []); } var cfRule = { range: getRangeAddress(cfRange), type: conditionalFormat.type, cFColor: conditionalFormat.cFColor, value: conditionalFormat.value, format: conditionalFormat.format }; pSheet.conditionalFormats.push(cfRule); cf.push(cfRule); }; if (conditionalFormats) { for (var i = 0, len = conditionalFormats.length; i < len; i++) { indexes = getRangeIndexes(conditionalFormats[i].range); assignCF(conditionalFormats[i]); } } else { conditionalFormats = []; if (cSheet.conditionalFormats) { for (var i = 0, len = cSheet.conditionalFormats.length; i < len; i++) { indexes = getRangeIndexes(cSheet.conditionalFormats[i].range); if (checkRange([cRange], cSheet.conditionalFormats[i].range)) { conditionalFormats.push(cSheet.conditionalFormats[i]); assignCF(cSheet.conditionalFormats[i]); } } } } return conditionalFormats; }; Clipboard.prototype.isRangeMerged = function (range, sheet) { var cell = getCell(range[0], range[1], sheet); if (cell && (cell.colSpan > 1 || cell.rowSpan > 1)) { var args = { range: range.slice(2, 4).concat(range.slice(2, 4)) }; this.parent.notify(activeCellMergedRange, args); return args.range[0] === range[0] && args.range[1] === range[1] && args.range[2] === range[2] && args.range[3] === range[3]; } return false; }; Clipboard.prototype.updateFilter = function (copyInfo, pastedRange) { var isFilterCut; var diff; this.parent.notify(setFilteredCollection, null); for (var i = 0; i < this.parent.sheets.length; i++) { if (this.parent.filterCollection && this.parent.filterCollection[i] && this.parent.filterCollection[i].sheetIndex === getSheetIndexFromId(this.parent, copyInfo.sId)) { var range = copyInfo.range; var fRange = getRangeIndexes(this.parent.filterCollection[i].filterRange);