Return 使用 Google 脚本和正则表达式匹配列
Return Matching Column using Google Scrips and Regex
我一直在为我的 google sheet 编写一个脚本,它从一个单元格中获取完整的字符串,然后将它们与第二个关键字列表进行比较 sheet,这应该 return 列号。还有很多事情要做,但我遇到了一些麻烦。
我已经尝试了几种方法,现在我正在尝试正则表达式。我认为我正在正确使用它。我的逻辑是,如果关键字的正则表达式匹配原始查询的任何完整单词,则 return true 和列号。
我得到了 "Tag's" sheet 偏移量中的单元格。但它会检查正确的范围。
function returnTag(narration){
var main = SpreadsheetApp.getActiveSpreadsheet();
var tagsheet = main.getSheetByName('Tags');
var numRows = tagsheet.getLastRow();
var numCols = tagsheet.getLastColumn();
var range = tagsheet.getRange(6, 2, numRows-5, numCols-1);
var row;
var col;
for (var col = 1; col <= numCols-1; col++) {
for (var row = 1; row <= numRows-5; row++) {
var currentValue = range.getCell(row,col).getValue();
var regExp = new RegExp("\b"+narration+"\b","gi");
if(regExp.test(currentValue)) {
return(col);
}
else{ }
}
}
}
我希望如果我在第一个 sheet 的 A2 中键入 "There are plenty of fish in the sea",它将 return 2 作为在第一个 [=34] 的 A1 中找到的列引用=].
我在下面分享了 sheet 的可编辑副本。
https://docs.google.com/spreadsheets/d/19FDT6ximWg4AcGzDTuqC4AYIW4MgXFwlUH0wYfGQi8s/edit?usp=sharing
谢谢:)
两件事:
new RegExp()
应该包含 currentValue 并测试 "narration"(您的原始代码正在执行相反的操作)
- 您不需要
new RegExp()
函数中的单词边界 \b
试试这个 -
function returnTag(narration){
var main = SpreadsheetApp.getActiveSpreadsheet();
var tagsheet = main.getSheetByName('Tags');
var numRows = tagsheet.getLastRow();
var numCols = tagsheet.getLastColumn();
var range = tagsheet.getRange(6, 2, numRows-5, numCols-1);
var row;
var col;
for (var col = 1; col <= numCols-1; col++) {
for (var row = 1; row <= numRows-5; row++) {
var currentValue = range.getCell(row,col).getValue();
var regExp = new RegExp(currentValue,"gi");
if(regExp.test(narration)) {
return(col);
}
else{ }
}
}
}
我在 sheet 中更新了同样的内容,它也已共享并且现在有效:)
我一直在为我的 google sheet 编写一个脚本,它从一个单元格中获取完整的字符串,然后将它们与第二个关键字列表进行比较 sheet,这应该 return 列号。还有很多事情要做,但我遇到了一些麻烦。
我已经尝试了几种方法,现在我正在尝试正则表达式。我认为我正在正确使用它。我的逻辑是,如果关键字的正则表达式匹配原始查询的任何完整单词,则 return true 和列号。
我得到了 "Tag's" sheet 偏移量中的单元格。但它会检查正确的范围。
function returnTag(narration){
var main = SpreadsheetApp.getActiveSpreadsheet();
var tagsheet = main.getSheetByName('Tags');
var numRows = tagsheet.getLastRow();
var numCols = tagsheet.getLastColumn();
var range = tagsheet.getRange(6, 2, numRows-5, numCols-1);
var row;
var col;
for (var col = 1; col <= numCols-1; col++) {
for (var row = 1; row <= numRows-5; row++) {
var currentValue = range.getCell(row,col).getValue();
var regExp = new RegExp("\b"+narration+"\b","gi");
if(regExp.test(currentValue)) {
return(col);
}
else{ }
}
}
}
我希望如果我在第一个 sheet 的 A2 中键入 "There are plenty of fish in the sea",它将 return 2 作为在第一个 [=34] 的 A1 中找到的列引用=].
我在下面分享了 sheet 的可编辑副本。
https://docs.google.com/spreadsheets/d/19FDT6ximWg4AcGzDTuqC4AYIW4MgXFwlUH0wYfGQi8s/edit?usp=sharing
谢谢:)
两件事:
new RegExp()
应该包含 currentValue 并测试 "narration"(您的原始代码正在执行相反的操作)- 您不需要
new RegExp()
函数中的单词边界\b
试试这个 -
function returnTag(narration){
var main = SpreadsheetApp.getActiveSpreadsheet();
var tagsheet = main.getSheetByName('Tags');
var numRows = tagsheet.getLastRow();
var numCols = tagsheet.getLastColumn();
var range = tagsheet.getRange(6, 2, numRows-5, numCols-1);
var row;
var col;
for (var col = 1; col <= numCols-1; col++) {
for (var row = 1; row <= numRows-5; row++) {
var currentValue = range.getCell(row,col).getValue();
var regExp = new RegExp(currentValue,"gi");
if(regExp.test(narration)) {
return(col);
}
else{ }
}
}
}
我在 sheet 中更新了同样的内容,它也已共享并且现在有效:)