(已解决) 集算器桌面版插件的两个小问题
桌面版插件 (SPL XLL) 早些时候在使用时碰到两个问题,因为问题不大,也不迫切,所以一直没有求助。怕以后忘记了,所以归纳记录一下,恳请大佬们有空时看看是咋回事。
第一个问题:文本长度限制于 255 的问题,超过 255 会被截断。
这个问题之前在另外帖子中顺带提过, Excel 如何用分隔符将字符串拆分后填充到指定区域
老贼也回复了,是 Excel 接口的问题。等大佬们有空时调试解决,静候佳音。
第二个问题:join 函数在 Excel 插件中使用时,用数列过滤时数据显示不全。注意,这个数列是在 spl 语句中直接写入的,并不是通过引用外部的数据得到的。
情况是这样的,我用序表跟一个数列做 join@i,相当于做过滤的动作,此时显示有点出乎意料,正常应该是对应于 [2,3,5] 的 3 条记录。如下所示:
=spl("=E(?).join@i(学号,[2,3,5,7,8,9])",A1:E7)
或者用 join@d 时也会出现异样,正常应该是对应于 [1,4,6] 这 3 条记录:
=spl("=E(?).join@d(学号,[2,3,5,7,8,9])",A1:E7)
这个写法在集算器里是正常出结果的,但在 Excel 插件中结果显示不一样,早些时候测试时干脆啥都没有显示。集算器里的数据如下,可复制使用:
A | B | C | D | E | |
1 | 学号 | ID | 日期 | 姓名 | 成绩 |
2 | 1 | 001 | 2024/4/1 | 乞丐 | 96 |
3 | 2 | 002 | 2024/4/2 | 教头 | 99 |
4 | 3 | 003 | 2024/4/3 | 小阿悄 | 98 |
5 | 4 | 004 | 2024/4/4 | 师爷 | 99 |
6 | 5 | 005 | 2024/4/5 | 车夫 | 95 |
7 | 6 | 006 | 2024/4/6 | 纳三少 | 97 |
8 | |||||
9 | =[A1:E7].record(5) | ||||
10 | =A9.join@i(学号,[2,3,5,7,8,9]) | ||||
11 | =A9.join@d(学号,[2,3,5,7,8,9]) |
上述写法如果加上 m 选项,结果就会在 Excel 插件中正常显示:
但是,使用 m 选项是有前提的,对应的列必须有序,才能归并处理。
还有一个,如果关联的不是数列,而是一个单列的表,结果显示也是正常的,比如把上述的数列变成一个单列表,结果正常(注意一下,此时这个单列的表引用于外部数据,不是直接在 spl 语句中写入的,如果直接在语句中写成表的形式,比如,用序列.record(1) 构建单列的表,也会出现问题)如下:
=spl("=E(?).join@i(学号,E(?):学号)",A1:C7,E1:E7)
此时,如果把单列的表变成序列,结果也是正常显示:
甚至把数据引用成序列,结果也会正常显示,如下:
以上 3 中情况,引用的都是外部的数据。所以,在 spl 语句中直接写成数列,结果就会有问题,写成外部数据的引用就不会有问题。而且,只有数列会出现问题,如果是文本型序列,或者日期序列都不会有问题。 比如,姓名列是文本型,过滤结果正常,其它的列,诸如文本型的 ID 列,日期类型的列,结果均能正常显示:
=spl("=E(?).join@i(姓名,""小阿悄,车夫,教头"".split@c())",A1:E7)
=spl("=E(?).join@i(ID,""002,003,005,007,008,009"".split@c())",A1:E7)
=spl("=E(?).join@i(date(E(日期)),[date(202404,1),date(202404,3),date(202404,5)])",A1:E7)
Excel 附件如下:
1、允许存储变量前两个字节用于存储字符串长度,最大字符串长度不超过 65535.
2、由于 excel 将学号变量解析成 number 类型,在 java 端变成了 Double 类型,xll 转换类型时修正.
谢谢大佬👍 👍 👍 问题已解决。
Recap:
1、根据 EXCEL 的规范与限制:
https://support.microsoft.com/zh-cn/office/excel- 规范与限制 -1672b34d-7043-467e-8e27-269d656771c3?redirectSourcePath=%252fnl-nl%252farticle%252fSpecificaties-en-beperkingen-voor-Excel-ca36e2dc-1f09-4620-b726-67c00b05040f
EXCEL 单元格可以包含的字符总数为 32767 个字符,2^15-1=32767,也就是说 EXCEL 公式:=REPT(“你”,32767) 二参最多重复 32767 次,超过会报错。
但是在 EXCEL 中使用 spl 函数时最多可以重复 65535 次,2^16-1=65535,比如 =spl(“=fill(““你””,65535)”)
2、No pics, it din’t happen 截图如下: