请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

旺仔老博文

注册会员

11

主题

32

帖子

121

积分

注册会员

积分
121
旺仔老博文
注册会员   /  发表于:2025-1-22 09:36  /   查看:77  /  回复:5
1金币
我的单元格统计了后续单元格的值之和,我插入了公式,查询论坛发现富文本和公式不能同事使用,我想在汇总的值前插入'Total:'字符,下面代码虽然可以拼接了,但是汇总公式失效了
  1. export function insertGeneralFormula(sheet: GC.Spread.Sheets.Worksheet, spread) {
  2.   const colCount = sheet.getColumnCount() // 获取总列数
  3.   const targetRow = 1 // 目标行,第二行(从 0 开始)
  4.   const startCol = 2 // 从第三列开始(从 0 开始)

  5.   // 构造汇总公式:从第三列开始的所有列
  6.   let formula = ''
  7.   for (let col = startCol; col < colCount; col++) {
  8.     const colLetter = String.fromCharCode(65 + col) // 获取列字母(A, B, C, D, ...)
  9.     formula += formula ? `+${colLetter}${targetRow + 1}` : `${colLetter}${targetRow + 1}`
  10.   }

  11.   // 1. 在第二行第二列插入公式
  12.   sheet.setFormula(targetRow, 1, `=${formula}`)

  13.   // 强制刷新并等待公式计算完成
  14.   // 使用 spread.getActiveSheet().getValue 以确保获取公式计算后的值
  15.   const totalValue = sheet.getValue(targetRow, 1)

  16.   // 格式化数字
  17.   applyNumberFormatter(sheet, targetRow, 1, totalValue)

  18.   // 3. 确保注册自定义函数
  19.   registerRichTextFunction(spread)

  20.   // 4. 在公式中插入富文本
  21.   sheet.setFormula(1, 1, `=RICHTEXT("${totalValue.toString()}")`) // 确保值是字符串
  22. }

  23. // 定义自定义函数 RichTextFunction
  24. function registerRichTextFunction(spread) {
  25.   // 定义 RichTextFunction
  26.   class RichTextFunction extends GC.Spread.CalcEngine.Functions.Function {
  27.     constructor() {
  28.       super('RICHTEXT', 1, 9999999) // 名称为 "RICHTEXT",最少 1 个参数,最多无限多个参数
  29.     }

  30.     evaluate(args) {
  31.       const inputText = args[0] // 获取第一个参数的值
  32.       console.log('inputText', inputText)

  33.       if (!inputText) {
  34.         return { richText: [] } // 如果没有传入值,返回空的富文本
  35.       }

  36.       // 构造富文本 JSON
  37.       const richText = [
  38.         {
  39.           style: {
  40.             font: 'bold 14px "Microsoft YaHei"', // 加粗、14px 字体
  41.             foreColor: 'rgb(255, 0, 0)', // 红色
  42.             textDecoration: 0,
  43.           },
  44.           text: 'Total: ', // 前缀文本
  45.         },
  46.         {
  47.           style: {
  48.             font: '14px "Microsoft YaHei"', // 普通字体、14px
  49.             foreColor: 'rgb(0, 0, 0)', // 黑色
  50.             textDecoration: 0,
  51.           },
  52.           text: inputText, // 确保动态插入的值是字符串
  53.         },
  54.       ]

  55.       return { richText } // 返回富文本对象
  56.     }
  57.   }

  58.   // 注册自定义函数
  59.   const richTextFunction = new RichTextFunction()

  60.   // 注意:确保每次都重新注册自定义函数
  61.   spread.getActiveSheet().addCustomFunction(richTextFunction)
  62. }
复制代码


最佳答案

查看完整内容

因为您代码中执行的setFormula方法,是将公式先计算出结果,之后应用在富文本公式中,相当于富文本公式替代了原formula。 而当引用单元格值变化时,原formula已不存在,公式值自然不会自动更新,所以富文本公式最终的结果也未更新。 所以,根据您描述的需求,您的代码逻辑可能需要进行调整,下方为执行公式计算结果的API,可能会有所帮助。 https://demo.grapecity.com.cn/spreadjs/help/api/modules/GC.Spread.Sheets.CalcEngi ...

5 个回复

倒序浏览
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-1-22 09:36:50
来自 4#
因为您代码中执行的setFormula方法,是将公式先计算出结果,之后应用在富文本公式中,相当于富文本公式替代了原formula。
而当引用单元格值变化时,原formula已不存在,公式值自然不会自动更新,所以富文本公式最终的结果也未更新。
所以,根据您描述的需求,您的代码逻辑可能需要进行调整,下方为执行公式计算结果的API,可能会有所帮助。
https://demo.grapecity.com.cn/sp ... ine#evaluateFormula
image.png724734801.png
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-1-23 11:03:08
2#
您好,
从代码来看,您是想在B2单元格统计到C2:T2单元格的合计值,并返回富文本显示。
附件我整理了demo,从测试结果来看,是可以正常计算出汇总值的。
image.png680836181.png
您所指的“汇总公式失效”是什么情况?请详细说明下您的需求。

demo-designer模板 - V17.1.9.html

7.44 KB, 下载次数: 2

回复 使用道具 举报
旺仔老博文
注册会员   /  发表于:2025-1-23 13:56:49
3#
Lynn.Dou 发表于 2025-1-23 11:03
您好,
从代码来看,您是想在B2单元格统计到C2:T2单元格的合计值,并返回富文本显示。
附件我整理了demo ...

2025-01-23_13h54_21.png932112731.png 修改数字汇总计算的不对,此时应该是Total: 12

回复 使用道具 举报
旺仔老博文
注册会员   /  发表于:2025-2-6 14:02:08
5#
Lynn.Dou 发表于 2025-1-23 11:03
您好,
从代码来看,您是想在B2单元格统计到C2:T2单元格的合计值,并返回富文本显示。
附件我整理了demo ...

hello 你的demo如我截图随便改个数字就不生效了
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-2-7 15:03:53
6#
您看下顶楼置顶的回复内容:
image.png889875793.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部