我已经对这个问题做了几个小时了,我刚开始编写代码,所以请原谅,如果这是一个非常简单的问题。
所以我有一个文本列表,我想找出每个单元格中是否有来自另一个工作表的正则表达式。如果是,则粘贴文本旁边的正则表达式。
示例:第一行的:7063生物行星列日。->我想把“生物星球”写在右边的牢房里。(因为生物行星是第二张表中要测试的正则表达式之一)。


我写了这样的东西,但不知道什么是需要修正的:
function ExpenseMatching() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet1 = spreadsheet.getSheetByName("Import2");
var sheet2 = spreadsheet.getSheetByName("Regular Expression");
for ( i =1; i<24 ; i++)
{
//Browser.msgBox(i)
var test1 = sheet2.getRange("A"+ i);
var test2 = sheet1.getRange("A2");
var test = new RegExp(test1).test(test2);
if (regexp==true)
{
test1.copyTo(sheet1.getRange("I2"));
Browser.msgBox(test)
}
else
{
}
}
}
谢谢您的提前帮助,各位!
发布于 2020-03-30 23:04:31
Import2上的列"A“的值和工作表Regular Expression上的列"A”的值。Import2的值是否包括Regular Expression的值。当Import2的值包含Regular Expression的值时,您希望将Regular Expression的值放到Import2上的列"B“中。如果我的理解是正确的,那么这个答案呢?
修改要点:
if (regexp==true)不工作,并且会发生错误。因为没有声明regexp。- From your question, I thought that you want to put the result value to the column "B" of `Import2`. But it seems that your script puts the value to the column "I" from `test1.copyTo(sheet1.getRange("I2"))`.
- Your script checks only "A2" of `Import2`.
- Each row is checked and copy the value in the for loop. In this case, the process cost will be high.当以上要点反映到您的脚本中时,下面的修改脚本如何?
修改脚本:
function ExpenseMatching() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet1 = spreadsheet.getSheetByName("Import2");
var sheet2 = spreadsheet.getSheetByName("Regular Expression");
const values1 = sheet1.getRange(`A2:A${sheet1.getLastRow()}`).getValues();
const values2 = sheet2.getRange(`A2:A${sheet2.getLastRow()}`).getValues();
const res = values1.map(([r1]) => {
for (let i = 0; i < values2.length; i++) {
if (new RegExp(values2[i][0]).test(r1)) {
return [values2[i][0]];
}
}
return [""];
});
sheet1.getRange(2, 2, res.length, 1).setValues(res);
}if (r1.includes(values2[i][0])) {而不是if (new RegExp(values2[i][0]).test(r1)) {。这可能会降低更多的成本。注意:
Import2的列"B“中。参考文献:
https://stackoverflow.com/questions/60939413
复制相似问题