arrays - 遍历数组,在单元格中查找子字符串,替换 Google 表格中的文本
问题描述
我想在 Google 表格中创建一个函数,该函数循环遍历一个数组,找到一个字符串,然后用新值替换字符串的文本。我有有效的代码,但它仅在单元格仅包含字符串时替换文本(即搜索“office”替换为“Office”仅在单元格仅包含“office”时才有效)。我希望能够替换“office” ” 与“Office”,即使单元格包含“office 867”。下面是有效的代码。另外,我怎样才能获得搜索 A 列第 1 行的功能?截至目前,该功能仅查找和替换如果值在 B2 中(即不搜索第一列 A,并且不搜索每隔一行的第一行。函数适用于 B2 到任何位置,但不适用于 B1、C1、D1 等。我知道这是因为 searchRange 变量,但我不知道如何设置参数以便它搜索整个工作表(即所有列和所有行)。所以这是我到目前为止的代码。我的问题在代码中作为注释:
// This code works but ONLY if entire cell matches the string being searched for
// I want to search for all cells that contain the string even if other text is present
// So if cell contains "office 98" I want to change that to "Office 98"
// If cell contains "blg 78" I want to change that to "Building 78"
// If cell contains "space 9876" I want to change that to "Space 9876"
// Also, how do I change the var searchRange so that the range is the entire sheet?
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var rangeData = sheet.getDataRange();
var lastColumn = rangeData.getLastColumn();
var lastRow = rangeData.getLastRow();
var searchRange = sheet.getRange(2,2, lastRow-1, lastColumn-1);
function findReplace() {
var rangeValues = searchRange.getValues();
for ( i = 0; i < lastColumn - 1; i++){
for ( j = 0 ; j < lastRow - 1; j++){
if(rangeValues[j][i] === "office"){
sheet.getRange(j+2,i+2).setValue("Office");
}else if (rangeValues[j][i] === "blg"){
sheet.getRange(j+2,i+2).setValue("Building");
}else if (rangeValues[j][i] === "space"){
sheet.getRange(j+2,i+2).setValue("Space");
};
};
};
};
解决方案
function findReplace() {
const ui=SpreadsheetApp.getUi();
const ss=SpreadsheetApp.getActiveSpreadsheet();
const srchA=['office','blg','space'];
const vA=['Office','Building','Space'];
const sh=ss.getActiveSheet();
const rg=sh.getRange(2,2,sh.getLastRow()-1,sh.getLastColumn()-1);
const v=rg.getValues();
v.forEach(function(r,i){
r.forEach(function(c,j){
srchA.forEach(function(s,k){
if(v[i][j].toString().includes(s,k)) {
sh.getRange(i+2,j+2).setValue(vA[k]);
}
});
});
});
}
推荐阅读
- reactjs - 使用 react-redux 根据布尔值在 Grid 中显示一些数据
- python - 动画单个烛台
- android - 为什么会出现此错误?类型错误:对象不是 'instanceof' 的有效参数(评估 'from instanceof Address - REACT-NATIVE
- angular - 提交动态生成的内容作为表单的一部分
- image-processing - CNN中3通道和1通道表示的灰度图像的区别?
- java - Cassandra 关闭导致:java.io.SyncFailedException:同步失败
- javascript - 基于字符串的运算符的弃用警告
- vim - Vim:将地图右移到正常模式(转义)
- reactjs - 如何在 i18next React 中刷新翻译?
- java - 在 chrome 浏览器中进行视觉验证时,为什么 Selenium 没有打开点击的链接?