這是我正在使用的查找和替換腳本的問題和邏輯。
- 在作業表中搜索
to_replace字串。- 如果找到,請替換
to_replace為replace_with. - 如果沒有找到,替換
to_replace為to_replace// 這不是必需的,并且會導致問題(它會替換所有公式,并用字串替換它)。
- 如果找到,請替換
我的目標:
我希望腳本只替換匹配的單元格to_replace,而忽略其他所有單元格。
我的菜鳥解決方案:
通過使用此處的腳本從陣列中洗掉列 C 來排除論壇中的特定列。(僅在 B 和 D 列中查找和替換)。
這是我在“我的當前腳本”中添加的修改后的代碼...
const range = sheet.getRange('B2:D' lastRow).getValues();
range.forEach(a => a.splice(1, 1)); //removes column C.
但我收到錯誤:“TypeError: var data = range.getValues(); is not a function”
問題
你能幫我解決我的菜鳥解決方案,或者教我一個更好的方法來解決這個問題嗎?
我當前的腳本
function findAndReplace(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var lastRow = sheet.getLastRow()
var lastColumn = sheet.getLastColumn()
// var range = sheet.getRange(1, 1, lastRow, lastColumn) //REMOVED - Searches all columns.
const range = sheet.getRange('B2:D' lastRow).getValues(); //ADDED - Searches only B & D
range.forEach(a => a.splice(1, 1)); //ADDED - Searches only B & D
var to_replace = "TextToFind";
var replace_with = ""; //Leave blank to delete Text, or enter text in quotes to add string.
var data = range.getValues();
var oldValue="";
var newValue="";
var cellsChanged = 0;
for (var r=0; r<data.length; r ) {
for (var i=0; i<data[r].length; i ) {
oldValue = data[r][i];
newValue = data[r][i].toString().replace(to_replace, replace_with);
if (oldValue!=newValue)
{
cellsChanged ;
data[r][i] = newValue;
}
}
}
range.setValues(data);
}
uj5u.com熱心網友回復:
從teach me a better way to solve this problem,在你的情況下,我認為當使用 TextFinder 時,處理成本可能會降低。當 TextFinder 用于實作您的目標時,它變成如下。
示例腳本:
function myFunction() {
var to_replace = "TextToFind";
var replace_with = ""; //Leave blank to delete Text, or enter text in quotes to add string.
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var lastRow = sheet.getLastRow();
var ranges = ['B2:B' lastRow, 'D2:D' lastRow];
sheet.getRangeList(ranges).getRanges().forEach(r =>
r.createTextFinder(to_replace).matchEntireCell(true).replaceAllWith(replace_with)
);
}
筆記:
如果要替換單元格值的部分,請修改
r.createTextFinder(to_replace).matchEntireCell(true).replaceAllWith(replace_with)為r.createTextFinder(to_replace).replaceAllWith(replace_with).作為附加修改,如果你的腳本被修改了,那么下面的修改呢?
function findAndReplace() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); var lastRow = sheet.getLastRow() var range = sheet.getRange('B2:D' lastRow); var data = range.getValues(); var to_replace = "TextToFind"; var replace_with = ""; //Leave blank to delete Text, or enter text in quotes to add string. for (var r = 0; r < data.length; r ) { for (var i = 0; i < data[r].length; i ) { var value = data[r][i].toString(); if (i != 1 && value.includes(to_replace)) { data[r][i] = data[r][i].replace(to_replace, replace_with); } } } range.setValues(data); }
參考:
- 創建文本查找器(查找文本)
- 類文本查找器
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/410405.html
標籤:
