重写复制粘贴之后撤销和前进键不能使用,怎么能撤销我自定义粘贴的内容- document.getElementById("gc-designer-container").addEventListener("copy", function (e) {
- let sheetCopy = spread_subject.getActiveSheet();
- let selectCopy = sheetCopy.getSelections();
- copyAndpaste = ["1608943204a74eff9429a7b771d4e763"];
- //是否选中图片
- let picAll = sheetCopy.pictures.all();
- let isDelPic = false;
- for (let i = 0; i < picAll.length; i++) {
- let isSelected = picAll[i].isSelected();
- if (isSelected) {
- isDelPic = true;
- sheetCopy.pictures.remove(picAll[i].name());
- break
- }
- }
- if (isDelPic) {
- return;
- }
- if (!selectCopy.length) return;
- selectCopy = selectCopy[0];
- let rowCopy = selectCopy.row;
- let colCopy = selectCopy.col;
- let rowCountCopy = selectCopy.rowCount;
- let colCountCopy = selectCopy.colCount;
- copyAndpaste.push({
- row: rowCopy,
- col: colCopy,
- rowCount: rowCountCopy,
- colCount: colCountCopy
- })
- for (let i = rowCopy; i < rowCountCopy + rowCopy; i++) {
- for (let j = colCopy; j < colCountCopy + colCopy; j++) {
- let cellCopy = sheetCopy.getSpan(i, j);
- if (!cellCopy) {
- cellCopy = sheetCopy.getCell(i, j);
- }
- if (cellCopy.row != i || cellCopy.col != j) continue;
- let textCopy = sheetCopy.getText(i, j);
- copyAndpaste.push({
- row: cellCopy.row,
- col: cellCopy.col,
- rowCount: cellCopy.rowCount,
- colCount: cellCopy.colCount,
- text: textCopy
- });
- }
- }
- legacyCopy(JSON.stringify(copyAndpaste));
- })
- document.getElementById("gc-designer-container").addEventListener("paste", function (e) {
- e.preventDefault();
- if (subjectState || !isAllowEdit) return;
- try {
- if (e.clipboardData.items[0].kind == "file") {
- let itemFile = e.clipboardData.items[0].getAsFile();
- insertImageDrap(itemFile,spread_subject);
- return;
- }
- } catch (e) {
- console.log(e)
- }
- let pasteData = "";
- try {
- pasteData = JSON.parse(e.clipboardData.getData('text/plain'));
- } catch (error) {
- pasteData = e.clipboardData.getData('text/plain')
- }
- let sheetCopy = spread_subject.getActiveSheet();
- let selectPaste = sheetCopy.getSelections();
- if (!selectPaste.length) return;
- selectPaste = selectPaste[0];
- let rowCopy = selectPaste.row;
- let colCopy = selectPaste.col;
- let indexTab = JSON.stringify(pasteData).indexOf("1608943204a74eff9429a7b771d4e763");
- if (indexTab > -1) {
- if (!copyAndpaste.length) return;
- let rowDiff = rowCopy - pasteData[1].row;
- let colDiff = colCopy - pasteData[1].col;
- try {
- for (let i = (pasteData[1].row + rowDiff); i < pasteData[1].rowCount + pasteData[1].row + rowDiff; i++) {
- for (let j = (pasteData[1].col + colDiff); j < pasteData[1].colCount + pasteData[1].col + colDiff; j++) {
- let cellCopy = sheetCopy.getSpan(i, j);
- if (!cellCopy) sheetCopy.getCell(i, j);
- if (!cellCopy || (cellCopy.row != i || cellCopy.col != j)) continue;
- let formulaCell = sheetCopy.getFormula(i, j);
- if (formulaCell && !isLockFormal) {
- throw new Error("有公式,禁止粘贴");
- }
- }
- }
- } catch (e) {
- console.log(e)
- return;
- }
- spread_subject.suspendPaint();
- for (let i = (pasteData[1].row + rowDiff); i < pasteData[1].rowCount + pasteData[1].row + rowDiff; i++) {
- for (let j = (pasteData[1].col + colDiff); j < pasteData[1].colCount + pasteData[1].col + colDiff; j++) {
- let cellCopy = sheetCopy.getSpan(i, j);
- if (!cellCopy) continue;
- sheetCopy.removeSpan(i, j);
- }
- }
- for (let i = 2; i < pasteData.length; i++) {
- let nowPasteTab = pasteData[i];
- if (nowPasteTab.rowCount > 1 || nowPasteTab.colCount > 1) {
- sheetCopy.addSpan(nowPasteTab.row + rowDiff, nowPasteTab.col + colDiff, nowPasteTab.rowCount, nowPasteTab.colCount);
- }
- let tagCell = sheetCopy.getTag(nowPasteTab.row + rowDiff, nowPasteTab.col + colDiff);
- let formulaCell = sheetCopy.getFormula(nowPasteTab.row + rowDiff, nowPasteTab.col + colDiff);
- if (formulaCell) {
- continue;
- }
- if (tagCell) {
- if (tagCell.indexOf("cosign") != -1) {//签字标签
- continue;
- }
- sheetCopy.setText(nowPasteTab.row + rowDiff, nowPasteTab.col + colDiff, nowPasteTab.text);
- } else {
- sheetCopy.setText(nowPasteTab.row + rowDiff, nowPasteTab.col + colDiff, nowPasteTab.text);
- }
- }
- spread_subject.resumePaint();
- } else {
- let cellNow = sheetCopy.getSpan(rowCopy, colCopy);
- if (!cellNow) {
- cellNow = sheetCopy.getCell(rowCopy, colCopy);
- }
- let excelRowArr = undefined;
- try {
- excelRowArr = pasteData.split("\r\n");
- } catch (e) {
- excelRowArr = [parseInt(pasteData).toString()];
- }
- let iNum = -1;
- spread_subject.suspendPaint();
- excelRowArr.forEach((item,i) => {
- let nowExcelColArr = item.split("\t");
- let afterCell = cellNow;
- try {
- nowExcelColArr.forEach(el => {
- if (el != "") {
- throw new Error("有内容");
- }
- })
- } catch (e) {
- iNum++;
- }
- for (let k = 0; k < iNum; k++) {
- afterCell = getBottomCell(afterCell, sheetCopy);
- }
- let jNum = -1;
- nowExcelColArr.forEach((el, j) => {
- if (el != "") {
- jNum++;
- for (let k = 0; k < jNum; k++) {
- afterCell = getAfterCell(afterCell, sheetCopy);
- }
- let tagCell = sheetCopy.getTag();
- let formulaCell = sheetCopy.getFormula(afterCell.row, afterCell.col);
- if (formulaCell && !isLockFormal) {
- return
- }
- if (tagCell) {
- if (tagCell.indexOf("cosign") != -1) { //签字标签
- return;
- }
- sheetCopy.setText(afterCell.row, afterCell.col, el);
- } else {
- sheetCopy.setText(afterCell.row, afterCell.col, el);
- }
- }
- })
- })
- spread_subject.resumePaint();
- }
- })
- function legacyCopy(text) {
- const textarea = document.createElement('textarea');
- textarea.value = text;
- textarea.style.position = 'fixed';
- document.body.appendChild(textarea);
- textarea.select();
- try {
- const success = document.execCommand('copy');
- if (!success) {
- throw new Error('复制失败');
- }
- console.log('复制成功');
- } catch (err) {
- console.error('复制失败:', err);
- } finally {
- document.body.removeChild(textarea);
- }
- }
复制代码
|
|