特殊粘贴

SpreadJS 提供了强大的特殊粘贴功能,支持多种粘贴选项和数据处理操作。用户可以精确控制粘贴内容(如仅粘贴值、公式或格式)、进行数学运算(加减乘除)、转置数据、跳过空白单元格等,满足复杂的数据处理需求。

概述 本 Demo 展示了 SpreadJS 的特殊粘贴功能。通过预置的表格数据,演示了如何使用右键菜单或快捷键触发特殊粘贴对话框,以及如何通过代码执行各种粘贴操作。 实现思路 使用 spread.open() 方法加载预制的 .sjs 文件,文件中包含用于演示特殊粘贴的表格数据 绑定 ValueChanged 事件,当单元格值变化时检查单元格类型,动态控制公式显示 通过 SpreadJS 内置的右键菜单或快捷键(Ctrl+Alt+V)打开特殊粘贴对话框 用户可以在对话框中选择粘贴选项和操作类型,也可以通过代码使用 commandManager().execute() 执行粘贴命令 代码解析 加载预制表格数据 Demo 使用 spread.open() 方法加载预制的 .sjs 文件,文件中包含了用于演示各种粘贴选项的表格数据。 监听值变化事件 代码绑定了 ValueChanged 事件,当单元格值发生变化时检查单元格类型。如果单元格有特定的单元格类型,则根据单元格的值动态控制公式显示。这确保了特殊粘贴操作后,公式单元格能够正确显示。 执行特殊粘贴命令 除了使用对话框,也可以通过代码执行特殊粘贴: pasteSpecialOptions 对象支持多种配置: operationOptions: 粘贴操作类型(无、加、减、乘、除、转换) transpose: 是否转置数据(行列互换) skipBlanks: 是否跳过空白单元格 pasteLinks: 是否粘贴单元格引用 transformFormula: 转换公式,使用 LAMBDA 函数 transformScope: 转换范围(按单元格、按行、按列、按区域) 运行效果 加载 Demo 后,表格显示预置的数据 右键点击单元格,在右键菜单中选择"选择性粘贴…",打开特殊粘贴对话框 或使用快捷键 Ctrl+Alt+V 打开对话框 在对话框中可以选择: 粘贴选项:全部、公式、值、格式、值和格式、公式和格式等 特殊选项:无边框、保留源列宽、转置、粘贴链接、粘贴批注、跳过空白等 操作类型:无、加、减、乘、除、转换 选择相应的粘贴选项后,点击确定完成粘贴操作 API 参考 paste 命令 PasteOperationOptions 枚举 none: 仅粘贴内容,不进行运算 add: 将复制区域的值加到粘贴区域 subtract: 粘贴区域的值减去复制区域的值 multiply: 粘贴区域的值乘以复制区域的值 divide: 粘贴区域的值除以复制区域的值 transform: 使用公式转换粘贴区域的值
window.onload = function() { let spread = new GC.Spread.Sheets.Workbook('ss'); // open sjs fetch(getFileUrl()).then(res => res.blob()).then(file => spread.open(file)); spread.bind(GC.Spread.Sheets.Events.ValueChanged, function (e, args) { var sheet = args.sheet, row = args.row, col = args.col; var cellType = sheet.getCellType(row, col); if (cellType) { sheet.options.showFormulas = !!sheet.getValue(row, col); } }); }; function getFileUrl () { return '$DEMOROOT$/spread/source/data/pasteSpecialDemo.sjs'; }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta name="spreadjs culture" content="zh-cn" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-io/dist/gc.spread.sheets.io.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-resources-zh/dist/gc.spread.sheets.resources.zh.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div id="ss" class="sample-spreadsheets"></div> </div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: 100%; height: 100%; overflow: hidden; float: left; } .option-row { font-size: 14px; padding: 5px; margin-top: 10px; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }