找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-7-18 12:33  /   查看:597  /  回复:0
背景:

将SpreadJS中的公式复制到SpreadJS外部的区域(线下 Excel 或 另一个Spread中)时,会发现只能粘贴公式计算的结果,公式无法粘贴到外部。


本教程将讲解如何实现将公式粘贴至SpreadJS外部。

原因:

SpreadJS外部复制粘贴采用的是浏览器源生的复制粘贴功能,即 Ctrl+C Ctrl+V。浏览器源生在复制的时候并不认识公式,所以不会将公式记入剪切板中。

解决方案:

我们可以利用 SpreadJS 提供的 showFormula 方法,通过该方法可以将单元格中的公式和计算结果进行切换。因为浏览器剪切板会记录单元格中的内容,切换成公式后就可以顺理成章的记录公式。粘贴到线下 Excel 或 另一个Spread中时,由于两者都具有公式引擎,粘贴上去后公式会立即进行计算,从而达到复制公式的效果。

那么接下来我们需要做的就是将 showFormula 与复制的操作集成起来,让用户使用时尽可能不用做额外的操作。

基于SpreadJS的高扩展性,我们可以重写复制时执行的命令。此处由于我们只是在命令上额外执行showFormula的操作,我们需要先将原始的复制命令用变量缓存起来。在执行showFormula的操作之后,再去执行原始的复制命令。并且在执行之后,我们需要还原之前的showFormula设置,完整代码如下:
  1. var oldcopy = GC.Spread.Sheets.Commands.copy.execute
  2.         GC.Spread.Sheets.Commands.copy.execute = function(context,options){
  3.                 var sheet = context.getSheetFromName(options.sheetName);
  4.                 var showFormulasFlag = sheet.options.showFormulas;
  5.                 if(!showFormulasFlag){
  6.                         sheet.options.showFormulas = !showFormulasFlag;
  7.                 }
  8.                 oldcopy.apply(this, arguments);
  9.                 setTimeout(function(){
  10.                         sheet.options.showFormulas = showFormulasFlag;
  11.                 },0)
  12.                
  13.         }
复制代码


以上操作可以实现复制公式到工作簿外部的功能,但有两点需要注意:


1.复制后的公式不会随着粘贴位置发生相对位移变化。

2.复制的时候由于设置showFormula会改变单元格的显示,复制单元格会闪一下。



3.gif

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部