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

QQ登录

只需一步,快速开始

Ljg

注册会员

10

主题

19

帖子

67

积分

注册会员

积分
67
Ljg
注册会员   /  发表于:2025-10-23 10:43  /   查看:72  /  回复:7
1金币
本帖最后由 Matthew.Xue 于 2025-10-23 14:50 编辑

您好,我想科学计数法展示1*10²这种方式去展示,如何实现
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

您好,有一种需要复杂的格式设置,且无法兼容Excel的方式: 您可以下载附件导入后详细看一下方法,大概原理是这样: 假设有一个数字1234567.89,那么我先通过公式,拿到这个数字的整数部分有多少位:len(int(abs(@))) 其中@表示单元格的值。 这个位数是7,减去1就是6,1234567.89/10的6次方 = 1.23456789 然后再利用round函数,保留两位小数,即1.23,round(@/power(10,len(int(abs(@)))-1),2)的结果,就是1.23 外面再包 ...

7 个回复

最佳答案
最佳答案
Matthew.Xue
超级版主   /  发表于:2025-10-23 10:43:56
来自 2#
本帖最后由 Matthew.Xue 于 2025-10-23 14:58 编辑

您好,有一种需要复杂的格式设置,且无法兼容Excel的方式:


您可以下载附件导入后详细看一下方法,大概原理是这样:
假设有一个数字1234567.89,那么我先通过公式,拿到这个数字的整数部分有多少位:len(int(abs(@)))
其中@表示单元格的值。
这个位数是7,减去1就是6,1234567.89/10的6次方 = 1.23456789
然后再利用round函数,保留两位小数,即1.23,round(@/power(10,len(int(abs(@)))-1),2)的结果,就是1.23
外面再包一层concat函数,我们需要在1.23后面加上*10^6,这个就简单了,固定写一个*10^,再写一遍len(int(abs(@)))-1即可


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Ljg
注册会员   /  发表于:2025-10-23 14:46:56
3#
Matthew.Xue 发表于 2025-10-23 12:04
您好,有一种需要复杂的格式设置,且无法兼容Excel的方式:

您好,附件我这边打开是乱码的格式,无法查看详细的方法,请问如何把此公式固定在自定义类型选项里面
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-10-23 14:54:29
4#
Ljg 发表于 2025-10-23 14:46
您好,附件我这边打开是乱码的格式,无法查看详细的方法,请问如何把此公式固定在自定义类型选项里面

用设计器打开该sjs文件就好了:


也可以直接在单元格右键菜单-设置单元格格式-自定义,在类型里写:
  1. =concat(round(@/power(10,len(int(abs(@)))-1),2),"*10^", len(int(abs(@)))-1)
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Ljg
注册会员   /  发表于:2025-10-23 15:03:06
5#
Matthew.Xue 发表于 2025-10-23 14:54
用设计器打开该sjs文件就好了:

可以通过编写代码的方式将这个格式永久加到“自定义”类型下吗,如果可以,使用什么方法添加呢
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-10-23 15:22:07
6#
Ljg 发表于 2025-10-23 15:03
可以通过编写代码的方式将这个格式永久加到“自定义”类型下吗,如果可以,使用什么方法添加呢

非常抱歉,这个暂不支持,自定义底下只能有默认的那些格式,您可以在设计器中添加一个菜单来单独处理用户给单元格设置科学记数法的需求。
https://docs.grapecity.com.cn/sp ... r-customize-command
回复 使用道具 举报
Ljg
注册会员   /  发表于:2025-10-24 09:49:37
7#
Matthew.Xue 发表于 2025-10-23 15:22
非常抱歉,这个暂不支持,自定义底下只能有默认的那些格式,您可以在设计器中添加一个菜单来单独处理用户 ...

const customFormat = '=concat(round(@/power(10,len(int(abs(@)))-1),2),"*10^",len(int(abs(@)))-1)'
sheet.setFormatter(row + i, col + j, customFormat)
您好,我新增了二级菜单配了类似这样的方法,实现了以此公式转单元格格式功能,但修改单元格的格式并没有记录到历史栈中,无法触发撤销按钮,请问有什么方法可以将自定义方法修改的格式能放到历史中能触发返回上一步
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-10-24 10:00:56
8#
Ljg 发表于 2025-10-24 09:49
const customFormat = '=concat(round(@/power(10,len(int(abs(@)))-1),2),"*10^",len(int(abs(@)))-1)'
...

想实现撤销栈的功能,需要满足两个条件:


1. 配置二级菜单的execute方法中,使用CommandManager.execute方法去执行自己注册的命令:


2. 注册的命令中,使用Commands.startTransaction和Commands.endTransaction将核心代码包起来


您可以检查一下自己的代码是否满足这两点。如果仍然不能解决,可以将您的代码贴上来,我帮您看一下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部