找回密码
 立即注册

QQ登录

只需一步,快速开始

10E32
注册会员   /  发表于:2022-9-6 18:52  /   查看:1335  /  回复:7
1金币
本帖最后由 10E32 于 2022-9-6 18:53 编辑

单元格实际公式:=[@股票的风险暴露]toJson输出的单元格公式:表30[[#This Row],[股票的风险暴露]]
@Test
public void ssssaaaaaa() {
Workbook workbook = new Workbook();   
workbook.open("C:\\Users\\hanjiansong\\Desktop\\1.xlsx");   
IWorksheet worksheet = workbook.getWorksheets().get("股票(符合条件的套期保值)");
  System.out.println(worksheet.getRange("A4").toJson());
}

[atach 1.zip (28.7 KB, 下载次数: 51)

最佳答案

查看完整内容

仔细看了一下被Excel误导了,表30就是一个table,并不是一个definedNames在Excel中,创建一个table,那么table的范围以及table的名称就会自动在名称管理器中创建并显示,如下图所示: 我在你的Excel文件里面创建了一个table 名称是表2,之后打开名称管理器就会有一个表格的选项。但这个并不是definedNames(你可以看一下左侧图标的样子是不同的) 并且这个也不会在Excel的definedNames xml中存储 所以无法被我们的getNames ...

7 个回复

倒序浏览
最佳答案
最佳答案
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-9-6 18:52:20
来自 6#
仔细看了一下被Excel误导了,表30就是一个table,并不是一个definedNames在Excel中,创建一个table,那么table的范围以及table的名称就会自动在名称管理器中创建并显示,如下图所示:
我在你的Excel文件里面创建了一个table 名称是表2,之后打开名称管理器就会有一个表格的选项。但这个并不是definedNames(你可以看一下左侧图标的样子是不同的)
image.png278981017.png
并且这个也不会在Excel的definedNames xml中存储
image.png49910582.png
所以无法被我们的getNames拿到

那么这个表30究竟是什么呢?从Excel的xml中我们可以看到,表30就是代表一个table。并且里面设置了calculatedColumnFormula 表30[[#This Row],[股票的风险暴露]]
image.png402761229.png
所以我们的getFormula 获取到的就是表30[[#This Row],[股票的风险暴露]] 是没问题的,这是一个tableFormula
image.png876340637.png
所以toJson输出的公式是正确无误的。


另外你问的如何复制表30, 可以考虑建立一个一模一样的表。但是有一点需要注意同一个workbook中表的名称不能重名。

image.png501163024.png
回复 使用道具 举报
有点东西悬赏达人认证
初级会员   /  发表于:2022-9-6 19:31:23
2#
这个有个命名信息就是”表30“,在内部解析的toJSON逻辑中返回的就是正确的公式。
image.png870932617.png

如果要获取单元格的公式应该用getFormula而不是toJSON。
image.png97827452.png
回复 使用道具 举报
10E32
注册会员   /  发表于:2022-9-6 22:14:44
3#
有点东西 发表于 2022-9-6 19:31
这个有个命名信息就是”表30“,在内部解析的toJSON逻辑中返回的就是正确的公式。

有办法可以把这个名称管理器复制到其他workbook里吗
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-9-7 18:15:23
4#
这个不行,可能你得遍历名称管理器中的名称然后对应设置到另一个workbook中
回复 使用道具 举报
10E32
注册会员   /  发表于:2022-9-7 19:42:19
5#
Clark.Pan 发表于 2022-9-7 18:15
这个不行,可能你得遍历名称管理器中的名称然后对应设置到另一个workbook中

我遍历不出来这个“表30”。还是压缩包里那个文件
Workbook workbook = new Workbook();
        workbook.open("C:\\Users\\hanjiansong\\Desktop\\1.xlsx");
        INames names = workbook.getNames();
        for (int i = 0; i < names.getCount(); i++) {
            if ("表30".equals(names.get(i).getName())) {
                System.out.println(names.get(i).getRefersTo());
            }
        }
回复 使用道具 举报
10E32
注册会员   /  发表于:2022-9-8 10:09:05
7#
Clark.Pan 发表于 2022-9-6 18:52
仔细看了一下被Excel误导了,表30就是一个table,并不是一个definedNames在Excel中,创建一个table,那么ta ...

明白了,多谢!
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-9-8 10:26:31
8#
不客气,有什么问题欢迎另开新帖进行询问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部