to_replace .to_replace con replace_with .to_replace con to_replace // Esto no es necesario y causa problemas (reemplaza todas las fórmulas y las reemplaza con una cadena). Me gustaría que el script solo reemplace las celdas que coincidan con to_replace e ignore todas las demás celdas.
Excluya columnas específicas en el foro eliminando la columna C de la matriz usando el script de aquí . (solo busque y reemplace dentro de las Columnas B y D).
Aquí está el código modificado que agregué en My Current Script...
const range = sheet.getRange('B2:D'+lastRow).getValues(); range.forEach(a => a.splice(1, 1)); //removes column C.Pero me sale el error: "TypeError: var data = range.getValues(); no es una función"
¿Puede ayudarme a solucionar mi solución de novato o enseñarme una mejor manera de resolver este problema?
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); }De teach me a better way to solve this problem , en su situación, pensé que cuando se usa TextFinder, el costo del proceso podría reducirse. Cuando TextFinder se usa para lograr su objetivo, se convierte en lo siguiente.
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) ); } Si desea reemplazar la parte del valor de la celda, modifique r.createTextFinder(to_replace).matchEntireCell(true).replaceAllWith(replace_with) a r.createTextFinder(to_replace).replaceAllWith(replace_with) .
Como modificación adicional, si se modifica su script, ¿qué tal la siguiente modificación?
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); }