我想用LibreOffice Calc(和Excel一样)做一个凯撒密码。我不想使用宏,我试图只使用公式。首先我想得到字符串中每个字符的ASCII码。我试过使用Regex,但我无法得到我想要的。首先,我想得到每个字符的UNICODE。我设法得到:=REGEX(K15,"([a-zA-Z])",UNICODE("$1"),"g")其中K15是文本所在的位置,即“测试”。结果是“36363636”。我只得到了4次美元符号的代码字符。我做错了什么?谢谢
=REGEX(K15,"([a-zA-Z])",UNICODE("$1"),"g")
vsaztqbk1#
由于您没有提到任何关于限制为单个公式的要求,因此我们可以使用helper列来实现这一点。首先,我在K16中添加了移位距离,以7为例。现在在L15中,添加以下公式以提取第一个字母。通过拖动填充到L18。(ROW()函数是为了方便起见-您可以简单地将值更改为1,2,3和4)。
ROW()
=MID(K$15;1+ROW()-ROW(K$15);1)
接下来是M15中的大公式,它完成了大部分工作。加注至M18。
=IF(CODE(L15)+K$16>CODE("z");CHAR(CODE(L15)+K$16-CODE("z")+CODE("a")-1);CHAR(CODE(L15)+K$16))
公式转换为码点,然后加上移位距离。如果它经过z的代码点,那么绕到a的代码点。最后,将代码点转换回字符。完成后,只需添加=TEXTJOIN(;;M15:M18)即可得到结果,即alza。我把它放进了K17。
=TEXTJOIN(;;M15:M18)
alza
1条答案
按热度按时间vsaztqbk1#
由于您没有提到任何关于限制为单个公式的要求,因此我们可以使用helper列来实现这一点。首先,我在K16中添加了移位距离,以7为例。
现在在L15中,添加以下公式以提取第一个字母。通过拖动填充到L18。(
ROW()
函数是为了方便起见-您可以简单地将值更改为1,2,3和4)。接下来是M15中的大公式,它完成了大部分工作。加注至M18。
公式转换为码点,然后加上移位距离。如果它经过z的代码点,那么绕到a的代码点。最后,将代码点转换回字符。
完成后,只需添加
=TEXTJOIN(;;M15:M18)
即可得到结果,即alza
。我把它放进了K17。