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

QQ登录

只需一步,快速开始

森森
金牌服务用户   /  发表于:2025-3-24 09:17  /   查看:144  /  回复:21
本帖最后由 森森 于 2025-3-24 09:20 编辑

类似于这也的界面,使用外部按钮点击后操纵表格内选中框,对其内的样式进行改变和保存后到后台的继续回显,这种是通过怎么样的方式去控制?项目背景是vue2+16.2.2的版本,类似于字体加大减少 8a87ad1c5fd2a1fb0f99419cb40faeb.png131876830.png 仿照 image.png102540587.png 这个平台的实现相关方式。

20 个回复

倒序浏览
Matthew.Xue
超级版主   /  发表于:2025-3-24 10:15:56
沙发
您好,当监听到点击按钮时,首先您需要通过getSelections获取到用户当前选中的区域,然后对区域遍历循环(用户可能选中多个区域,隐藏该方法返回一个区域数组),遍历区域中的所有单元格,使用fontSize方法获取到每个单元格的字体大小,并对大小进行设置:
  1. let sheet = spread.getActiveSheet()
  2. let selections = sheet.getSelections()
  3. sheet.suspendPaint()
  4. selections.forEach(range => {
  5.     for (let r = range.row; r < range.row + range.rowCount; r++) {
  6.         for (let c = range.col; c < range.col + range.colCount; c++) {
  7.             let cellRange = sheet.getRange(r, c, range.rowCount, range.colCount)
  8.             let size = cellRange.fontSize() // 获取fontSize,字符串类型,size = "16px"
  9.             cellRange.fontSize(whatSizeYouWant) // 设置fontSize
  10.         }
  11.     }
  12. })
  13. sheet.resumePaint()
复制代码
回复 使用道具 举报
森森
金牌服务用户   /  发表于:2025-3-24 10:32:42
板凳
本帖最后由 森森 于 2025-3-24 10:33 编辑
Matthew.Xue 发表于 2025-3-24 10:15
您好,当监听到点击按钮时,首先您需要通过getSelections获取到用户当前选中的区域,然后对区域遍历循环( ...

这个是代码,这样的吗, 控制台信息.png359980468.png 这个是控制台信息,我感觉好像是不太适用
事件代码.png555454711.png
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-3-24 11:13:19
地板
之前给出的代码有点小问题,您稍微修改一下,另外whatSizeYouWant没有定义,您需要根据您的业务改成对应的字符串,比如“16px”,“18pt”这种:
image.png343695983.png
回复 使用道具 举报
森森
金牌服务用户   /  发表于:2025-3-24 13:18:39
5#
本帖最后由 森森 于 2025-3-24 13:25 编辑
Matthew.Xue 发表于 2025-3-24 11:13
之前给出的代码有点小问题,您稍微修改一下,另外whatSizeYouWant没有定义,您需要根据您的业务改成对应的 ...

没有生效 image.png376657714.png image.png759358215.png 还是那样,会发生这种情况,是因为我引入生成表的问题么
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-3-24 13:40:14
6#
森森 发表于 2025-3-24 13:18
没有生效还是那样,会发生这种情况,是因为我引入生成表的问题么

您看一下报错,报错明显是说cellRange中找不到fontSize方法,您需要打断点调试一下,看cellRang是什么,为何没有fontSize方法,r和c的变量是否符合您的预期,sheet变量调用一下name方法看是不是当前sheet等等。
回复 使用道具 举报
森森
金牌服务用户   /  发表于:2025-3-24 14:44:58
7#
本帖最后由 森森 于 2025-3-24 14:48 编辑
Matthew.Xue 发表于 2025-3-24 13:40
您看一下报错,报错明显是说cellRange中找不到fontSize方法,您需要打断点调试一下,看cellRang是什么, ...

我发现我获取的没有你那个方法,获取的是font image.png840750427.png image.png912867431.png 然后打印的是 image.png812078857.png image.png633100585.png 这样设置能有变化大小,但是不能一直叠加+2,只执行了一次,以上打印的方法符合这样连续增加吗?
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-3-24 14:55:10
8#
森森 发表于 2025-3-24 14:44
我发现我获取的没有你那个方法,获取的是font然后打印的是这样设置能有变化大小,但是不能一直叠加+2,只 ...

您代码中newSize的值每次都是12+delta,您需要将固定值12修改为动态从font中获取,这样才能做到连续增加。
如果sheet.getRange方法返回的cellRange中没有fontSize方法,可以改成sheet.getCell(r, c),如果还不行,就只好用font方法了,稍微麻烦一些,但是也可以实现。
回复 使用道具 举报
森森
金牌服务用户   /  发表于:2025-3-24 15:08:01
9#
本帖最后由 森森 于 2025-3-24 15:11 编辑
Matthew.Xue 发表于 2025-3-24 14:55
您代码中newSize的值每次都是12+delta,您需要将固定值12修改为动态从font中获取,这样才能做到连续增加 ...

sheet.getCell返回值跟那个一样,这我动态单独获取不到啊,返回给我就是一种长的字符串,没法在font里面单独获取当前字体大小
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-3-24 15:26:08
10#
本帖最后由 Matthew.Xue 于 2025-3-24 15:28 编辑
森森 发表于 2025-3-24 15:08
sheet.getCell返回值跟那个一样,这我动态单独获取不到啊,返回给我就是一种长的字符串,没法在font里面 ...

您可以使用正则表达式来获取字符串中间的数字,获取到之后将其转换为数字类型,并加上delta,再将原font中的字号替换成新的字号:
  1. let font = sheet.getCell(r, c).font()  // 获取原字体
  2. let reg = /\d+\.\d+|\.\d+|\d+/g // 获取字符串中的数字的正则表达式
  3. let fontSize = Number(font.match(reg)[0])  // 匹配字符串中的数字
  4. let newSize = fontSize + 2  // 增加delta
  5. let newFont = font.replace(reg, newSize)  // 创建newFont,替换字号
  6. sheet.getCell(r, c).font(newFont)
复制代码

正则表达式是非常强大的功能,像这种从字符串中提取内容的时候就特别有用,您可以学习一下。
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部