找回密码
 立即注册

QQ登录

只需一步,快速开始

清水

金牌服务用户

11

主题

42

帖子

147

积分

金牌服务用户

积分
147
清水
金牌服务用户   /  发表于:2022-5-18 16:13  /   查看:2638  /  回复:6
1金币
本帖最后由 清水 于 2022-5-19 17:16 编辑

比如我给D20自定义了一个名称,并且对应了一个公式sheet.addCustomName("自定义名称1", "SUM(D6:d18)", sheet.getActiveRowIndex(), sheet.getActiveColumnIndex());
然后我在E21 通过
sheet.setFormula(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex(), "自定义名称1");
来获取D20的公式显示值,但是执行后 E21的值不对,获取的公式成了SUM(E7:E19)
这该怎么解决呀,我用第二种方式可以取到值并赋值但也存在其他问题
var expStr = GC.Spread.Sheets.CalcEngine.expressionToFormula(sheet, expression, cname.Uu, cname.Vu);sheet.setFormula(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex(), expStr);
就是我先拿到D20的公式,直接用公式setFormula
但是存在一个问题,就是E21的公式 我还是想显示为"自定义名称1",但是用这种方式写"自定义名称1"直接替换成了具体公式
想请问下第一种写法该怎么解决,还有第二种是否可行

最佳答案

查看完整内容

可以看下我这个demo是否符合需求,因为上面描述的操作在excel中也是这样显示的。 、 这是demo的效果

6 个回复

倒序浏览
最佳答案
最佳答案
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2022-5-18 16:13:27
来自 4#
清水 发表于 2022-5-19 13:51
比如我给A1自定义一个名称 “项目_自定义名称1”,并且公式设置为SUM(C1:C3)
然后我需要实现通过“自定 ...

可以看下我这个demo是否符合需求,因为上面描述的操作在excel中也是这样显示的。
image.png264267577.png

这是demo的效果
image.png30635069.png

demo模板.html

1.68 KB, 下载次数: 86

回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2022-5-18 16:58:56
2#
从上面的描述来看,这边未能理解你的问题以及需求,没太理解你的getActiveRow/activeColumn的用意是什么。建议在附件的demo复现你的问题,然后描述你的需求,这边来做进一步调研。

demo模板.html

1.47 KB, 下载次数: 88

回复 使用道具 举报
清水
金牌服务用户   /  发表于:2022-5-19 13:51:39
3#
本帖最后由 清水 于 2022-5-19 14:15 编辑
Derrick.Jiao 发表于 2022-5-18 16:58
从上面的描述来看,这边未能理解你的问题以及需求,没太理解你的getActiveRow/activeColumn的用意是什么。 ...

比如我给A1自定义一个名称 “项目_自定义名称1”,并且公式设置为SUM(C1:C3)
然后我需要实现通过“自定义的名称” 来获取对应的值
例如A4:我需要可以通过 "项目_自定义名称1"来获取 A1的公式来计算值(也就是A1的值),并且A4的公式显示为“=项目_自定义名称1”,值也为6
我是通过
sheet.setFormula(A1行, A1列, "SUM(C1:C3)");
sheet.addCustomName("项目_自定义名称1", "SUM(C1:C3)", A1行, A1列) 给A1自定义名称及公式的
然后A4单元格的操作:sheet.setFormula(A4行, A4列, "项目_自定义名称1");
这样后,A4显示的公式没有问题 为:=项目_自定义名称1,但是具体的计算公式成了"SUM(C4:C6)"了
我需要的是是A4显示公式=项目_自定义名称1,并且实际公式计算为A1的SUM(C1:C3)

微信图片_20220519114945.png
微信图片_20220519114916.png
回复 使用道具 举报
清水
金牌服务用户   /  发表于:2022-5-19 15:45:01
5#
Derrick.Jiao 发表于 2022-5-19 15:41
可以看下我这个demo是否符合需求,因为上面描述的操作在excel中也是这样显示的。

对,就是想实现这种效果
回复 使用道具 举报
清水
金牌服务用户   /  发表于:2022-5-19 15:54:15
6#
Derrick.Jiao 发表于 2022-5-19 15:41
可以看下我这个demo是否符合需求,因为上面描述的操作在excel中也是这样显示的。

请问那个函数可以通过行列获取=$A$1 这种格式的
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2022-5-19 16:39:14
7#
清水 发表于 2022-5-19 15:54
请问那个函数可以通过行列获取=$A$1 这种格式的

可以通过下面的代码
  1. var range = new GC.Spread.Sheets.Range(1, 1, 1,1)
  2.         var value = GC.Spread.Sheets.CalcEngine.rangeToFormula(range, 0, 0, GC.Spread.Sheets.CalcEngine.RangeReferenceRelative.allAbsolute);
复制代码
image.png855282592.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部