Javascript 查找包含转义公式的所有单元格'=
我有一张纸,上面有很多公式,它们都是用Javascript 查找包含转义公式的所有单元格'=,javascript,google-apps-script,google-sheets,escaping,indexof,Javascript,Google Apps Script,Google Sheets,Escaping,Indexof,我有一张纸,上面有很多公式,它们都是用'=注释或转义出来的(不确定哪一个术语是准确的)。我现在正试图在没有任何运气的情况下找到并删除“ 我可以算出公式的重写,这只是我挂断电话的位置。我真的不确定…==0)如果这些语句的意思是,那么这是我的第一个问题。但是我确信我的关键字也可能有问题 函数重置公式(表,范围){ 公式=范围。getFormulas(); 对于(var r=0;r
'=
注释或转义出来的(不确定哪一个术语是准确的)。我现在正试图在没有任何运气的情况下找到并删除“
我可以算出公式的重写,这只是我挂断电话的位置。我真的不确定…==0)
如果这些语句的意思是,那么这是我的第一个问题。但是我确信我的关键字也可能有问题
函数重置公式(表,范围){
公式=范围。getFormulas();
对于(var r=0;r
说明:
- 我真的很难在看不到文件本身的情况下调试您的代码,但我认为不值得调试它,而是创建一个新的解决方案,因为您当前的方法没有遵循,即迭代使用
getRange
,getValue
和setValue
将耗费大量性能,因此必须重新设计逻辑
您的目标是从“公式”中删除”=
- 请记住,这样的公式实际上(如您所说)被注释掉了,这意味着它是一个简单的字符串:
'=sum(B1)
。因此,使用不会起作用,因为您感兴趣的值是字符串
,而不是公式。你需要改用
解决方案:
假设下表包含随机数据:
以下脚本将从包含它的每个单元格中删除”
:
function myFunction1() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet1");
const charToDel = "'=";
const range = sh.getDataRange();
const [values, formulas] = [range.getValues(),range.getFormulas()];
const new_vals=formulas.map((r,i)=>r.map((c,j)=>c==''?values[i][j]:c.toString().
includes(charToDel)?c.replace(charToDel,''):c));
range.setValues(new_vals);
}
执行脚本后的结果将是相关单元格中的公式:
旁注:
我认为修改代码以适应您的逻辑非常困难。不要使用sh
而是使用sheet
并在函数传递时删除range
。当然,将相关参数添加到函数中
参考文献:
我相信你的目标如下
- 您要查找公式顶部有
“
的公式。这就像”=
- 您想通过删除
'
来用=
替换'=
- 您希望使用谷歌应用程序脚本实现这一点
在这个答案中,作为另一种方法,我建议使用TextFinder实现您的目标。示例脚本如下所示
示例脚本:
- 在这种情况下,“Sheet1”的所有公式中的
'=
值将替换为=
- 如果要对电子表格中的所有图纸使用此脚本,还可以使用以下脚本
SpreadsheetApp
.getActiveSpreadsheet()
.createTextFinder("\'\=")
.matchFormulaText(true)
.useRegularExpression(true)
.replaceAllWith("=");
参考:
我还没有尝试@Tanaike的解决方案,但这就是我今天早些时候想到的。我正在搜索不必要的
“
var关键字=“=”代码>
函数重置公式(工作表、范围值、关键字){
对于(var r=0;r
你说得对!getFormulas()
函数只是禁用我刚才复制并试图反转的公式的相反函数的残余。所以我把它去掉了。您的解决方案确实有效,但是,它似乎引起了一些争议!复制公式结果并将其粘贴为静态数据时出错。稍后我会再处理它,看看它是否只是我需要在我的工作表中更改的东西。我没有在我的工作表上发布链接,因为过去有人“斥责”我说这是“糟糕的做法”,我的代码应该足够清晰…@TC76谢谢你的反馈,也谢谢你的尝试。我更新了我的代码。请再查一下。现在应该是100%正确了。
SpreadsheetApp
.getActiveSpreadsheet()
.createTextFinder("\'\=")
.matchFormulaText(true)
.useRegularExpression(true)
.replaceAllWith("=");