找回密码
 立即注册

QQ登录

只需一步,快速开始

爱迪生

超级版主

55

主题

65

帖子

1394

积分

超级版主

Rank: 8Rank: 8

积分
1394
爱迪生
超级版主   /  发表于:2022-4-6 20:17  /   查看:2376  /  回复:2
本帖最后由 Ellia.Duan 于 2022-9-7 11:15 编辑

我们首先给单元格设置引用其他单元格的公式,代码如下:
  1. sheet = spread.getSheet(0);
  2. // 设值
  3. sheet.setValue(0, 0, 1, 3);
  4. sheet.setValue(1, 0, 50, 3);
  5. sheet.setValue(2, 0, 100, 3);
  6. sheet.setValue(3, 0, 2, 3);
  7. sheet.setValue(4, 0, 60, 3);
  8. sheet.setValue(5, 0, 90, 3);
  9. sheet.clearSelection();
  10. // 添加selection
  11. sheet.addSelection(2, 0, 3, 1);
  12. var range = sheet.getSelections();
  13. // 获取range字符串
  14. var rangeStr = GC.Spread.Sheets.CalcEngine.rangeToFormula(range[0],0,0,GC.Spread.Sheets.CalcEngine.RangeReferenceRelative.allRelative);
  15. // 使用选定区域创建公式
  16. var formula = "Sum(" + rangeStr + ")";
  17. // 在表单的单元格中设置公式
  18. sheet.setFormula(5, 5, formula, GC.Spread.Sheets.SheetArea.viewport);

复制代码
在界面中查看效果:
image.png651560363.png
接下来我们用rangesToFormula()将相对引用区域转换为绝对引用区
  1. //获取原公式
  2. let formula2 = sheet.getFormula(5,5)
  3. //获取原表达式
  4. let expression1 = GC.Spread.Sheets.CalcEngine.formulaToExpression(sheet, formula2, 0, 0);
  5. //将原区域相对引用转换为绝对引用
  6. let rangesStr = GC.Spread.Sheets.CalcEngine.rangesToFormula(range,0,0,GC.Spread.Sheets.CalcEngine.RangeReferenceRelative.allAbsolute);
  7. console.log(rangesStr)
  8. // 将原表达式函数和转换后的区域拼接为新的公式
  9. let formula = expression1.functionName+"(" + rangesStr + ")";
  10. // 在表单的单元格中设置公式
  11. sheet.setFormula(5, 5, formula, GC.Spread.Sheets.SheetArea.viewport);
复制代码

我们看一下页面
image.png187105101.png
Prefect!!!

2 个回复

倒序浏览
bigsun008
金牌服务用户   /  发表于:2024-8-21 18:12:56
沙发
image.png870902404.png

怎么知道当前用户是否在编辑公式
比如上图  用户的鼠标聚焦在D6这个公式中  我怎么知道当前选的是B列10行这个单元格SUM公式的D6 而不是D10
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-8-22 09:25:31
板凳
bigsun008 发表于 2024-8-21 18:12
怎么知道当前用户是否在编辑公式
比如上图  用户的鼠标聚焦在D6这个公式中  我怎么知道当前选的是B列1 ...

您好,SpreadJS原生上没有相关的接口和事件可以或您目前正在编辑的公式的区域。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部