Javascript 仅查找和替换特定列的宏
我正在使用工作表中的宏,以便用HTML等价物替换特殊字符。我需要脚本以特定列为目标,同时忽略其他列(例如包含URL的列) 以下是我正在使用的先前编码的脚本:Javascript 仅查找和替换特定列的宏,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在使用工作表中的宏,以便用HTML等价物替换特殊字符。我需要脚本以特定列为目标,同时忽略其他列(例如包含URL的列) 以下是我正在使用的先前编码的脚本: function FindAndReplace() { var data_range = SpreadsheetApp.getActiveSheet().getDataRange(); var num_rows = data_range.getNumRows(); var num_columns = data_range.get
function FindAndReplace() {
var data_range = SpreadsheetApp.getActiveSheet().getDataRange();
var num_rows = data_range.getNumRows();
var num_columns = data_range.getNumColumns();
var find_replace = {
"&": "&",
" - ": " – ",
"'": "'",
}
Object.keys(find_replace).map(function(find) {
var replace = find_replace[find];
for (var row=2; row <= num_rows; row++) {
for (var col=1; col <= num_columns; col++) {
var value = data_range.getCell(row, col).getValue();
if (data_range.getCell(row, col).getFormula()) {continue;}
try {
value = value.replace(find, replace);
data_range.getCell(row, col).setValue(value);
}
catch (err) {continue;}
}
}
});
}
我一直试图编辑它,只选择第1、3和5列,但它出错了。它目前只能按现在的方式工作。我只想让它选择特定的列,而忽略其余的列
我不太熟悉JavaScript,因此非常感谢您的帮助 我相信你的目标如下
- 您希望使用活动工作表特定列中的
对象替换值find\u replace
- 您不希望替换具有公式的单元格
- 您希望使用谷歌应用程序脚本实现这一点
- 关于
在脚本中,此脚本正在工作,但它正在对整个工作表进行更改。
用于循环条件。对于每一列,循环从1到var num\u columns=data\u range.getNumColumns()
num\u列运行。我以为这就是你问题的原因
- 而且,在您的脚本中,
的HTML代码。当的目标理想情况下,我希望脚本忽略任何无法实现的包含&(例如&;)
时&找到了
的
和
代码>也替换为
&代码>
- 在这个答案中,为了实现你的目标,我想提出以下流程。
- 将目标列作为数组进行预排列
- 从
的对象创建一个数组find\u replace
- 替换这些值。 3a。将这些值替换为其他唯一值。 3b。替换值的键。 3c。将唯一值替换为值
- 使用TextFinder运行替换值。
- 我认为在您的情况下使用TextFinder时,脚本的处理成本可能会降低
for (var col=1; col <= num_columns; col++) {
function FindAndReplace2() {
// 1. Preapare the target columns as an array.
var targetColumns = [2, 5]; // 2 and 5 means the column "B" and "E", respectively.
var find_replace = {
"&": "&",
"-": "&",
"'": "'",
}
// 2. Create an array from the object of `find_replace`.
var ar = Object.entries(find_replace).map(([k, v]) => ({k: k, v: v, u: Utilities.getUuid().replace(/-/g, "")}));
// 3. Replace the values.
var sheet = SpreadsheetApp.getActiveSheet();
targetColumns.forEach(c => {
var range = sheet.getRange(1, c, sheet.getLastRow());
ar.forEach(({k, v, u}) => {
// 3a. Replace the values to other unique values.
range.createTextFinder(v).replaceAllWith(u);
// 3b. Replace the keys to the values.
range.createTextFinder(k).replaceAllWith(v);
// 3c. Replace the unique values to the values.
range.createTextFinder(u).replaceAllWith(v);
});
});
}