问题描述
您好,我需要您帮助使用 LibreOffice 6.4 Calc 中的 Regex。
情况:
我有非常复杂的文件,其中有很多工作表使用单元格中的公式相互引用。现在我需要在大约 10 多个工作表中批量更新公式,每个工作表都引用了带有很多公式的各种工作表...
使用Find and Replace
和Regular expressions
可以非常有效地替换公式。我需要匹配 sheet name
和 row
和 column
。事实上,我需要删除固定锚点,即 =Sheet1_2.$A$1
在该示例的许多变体上变为 =Sheet1_2.A1
,即不同的工作表名称、列和行...
但是,我在匹配名称中带有下划线的工作表名称时遇到了奇怪的问题,例如名为 Sheet1_2
的工作表。
示例文件:
这是我工作的文档的非常简化的示例:
- 使用名为
Sheet1
和Sheet1_2
的两张工作表创建新电子表格。 - 在
Sheet1
的第一个单元格中输入公式=$Sheet1_2.$A$1
。
更换动作:
在 Find and Replace
对话框中,我有以下设置:
- 查找:
(\$[A-Za-z0-9\_]*\.)\$([A-Z])\$
- 替换:
$1$2
- 搜索:
Formulas
- 其他选项:
[x] Regular expressions
。
查找全部结果:
-
=$Sheet2.$B$1
匹配(无下划线) -
=$Sheet1_2.$A$1
不匹配(下划线)
官方帮助确实提到了转义:LibreOffice 6.4 Help - List of Regular Expressions
问题:
我是否遗漏了什么,或者在单元格公式中将工作表名称与下划线匹配的正确方法是什么?
解决方法
最后我发现问题不是下划线 '~key1'
而是我的测试文件中的错字,其中有一些带有和不带有锚点的变体,例如 _
、=$Sheet2_1.A1
正确的正则表达式是可选的美元:=$Sheet2_1.$A$1
。注意:当然,下划线不需要转义。
感谢@Thefourthbird 和@JvdV 进行故障排除;)