Hello stackoverflow社区,
我想创建一个脚本来按名称搜索Google工作表,因为此文件将在脚本末尾删除。一个新文件将每周自动上载到Google Drive。这将成为每周运行的脚本的基础。
代码运行正常,但在4个输出单元格中返回undefined。
电子表格“ LocafoxInventoryData_Automatic”中一行的示例数据:
1 || 5b8ff4fc3e578c005487dcd5 | 60.0000 | 38.6300 | 19.0000 ||| 2.0000
我想检索上述字符串中的最后一个数字。 (在最后一个“ |”之后)
我希望有人能帮助我。搜索的字符串是产品的ID:在上面的示例“ 5b8ff4fc3e578c005487dcd5”中。该ID在工作表中只能找到两次。我想始终检索第一个。第一产品ID和第二产品ID之间的差异是字符串中的第一个数字。有“ 1”和“ 2”。
function getData() {
var files = DriveApp.getFilesByName('LocafoxInventoryData_Automatic');
while (files.hasNext()) {
var file = files.next();
var id = file.getId()
}
var sheetData = SpreadsheetApp.openById(id).getActiveSheet().getDataRange().getValues();
var sspre = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Vorlage");
var searchString1 = sspre.getRange('I7').getValue();
var searchString2 = sspre.getRange('I8').getValue();
var searchString3 = sspre.getRange('I9').getValue();
var searchString4 = sspre.getRange('I10').getValue();
for(var i=0;i<sheetData;i++)
{
//Column 1 should be searched
if(sheetData[i][0].search(searchString1)!=-1)
{
var rowData1 = sheetData[i];
return rowData1;
}
else if(sheetData[i][0].search(searchString2)!=-1)
{
var rowData2 = sheetData[i];
return rowData2;
}
else if(sheetData[i][0].search(searchString3)!=-1)
{
var rowData3 = sheetData[i];
return rowData3;
}
else if(sheetData[i][0].search(searchString4)!=-1)
{
var rowData4 = sheetData[i];
return rowData4;
}
}
sspre.getRange('D7').setValue(rowData1);
sspre.getRange('D8').setValue(rowData2);
sspre.getRange('D9').setValue(rowData3);
sspre.getRange('D10').setValue(rowData4);
file.setTrashed(true);
}
答案 0 :(得分:0)
好的,这对我有用。我有一个名为“ LocafoxInventoryData_Automatic”的文件,它是一个包含一张纸的电子表格。我会寻找具有该名称的文件,如果发现多个文件,则会抛出错误,以便您找出想要的文件。
然后我使用openById将其作为SpreadSheet打开。我从“工作表”列I7、8、9、10中获得了产品ID,并使用正则表达式将它们包装起来,该正则表达式如下所示:^ 1 \ | \ | cw8vtfxa5owglp03btv22g9d。 \ | \ | \ |(.. )$。尽管在代码中反斜杠\
必须是\\
双反斜杠,这花了我一段时间才能弄清楚。
所以这是最后的数字,我将它们放入Vorlage列D7,8,9,10中。然后我将文件isTrashed设置为true。我不知道您是否要返回数据,所以我将对象留在那里,但将其注释掉。我还删除了所有其他ifs。
function getData() {
var filename='LocafoxInventoryData_Automatic';
var files = DriveApp.getFilesByName(filename);
var n=0;
while (files.hasNext()) {
var file = files.next();
var id = file.getId();
n++;
}
if(n>1){throw(Utilities.formatString('Error: More than file named %s', filename));}//Will present an error if there is more than one file
if(id){
var sheetData = SpreadsheetApp.openById(id).getActiveSheet().getDataRange().getValues();//I assumed no headers in this file
var sspre = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Vorlage");
var re1 = new RegExp('^1\\|\\|' + sspre.getRange('I7').getValue() + '.*\\|\\|\\|(.*)$','i');
var re2 = new RegExp('^1\\|\\|' + sspre.getRange('I8').getValue() + '.*\\|\\|\\|(.*)$','i');
var re3 = new RegExp('^1\\|\\|' + sspre.getRange('I9').getValue() + '.*\\|\\|\\|(.*)$','i');
var re4 = new RegExp('^1\\|\\|' + sspre.getRange('I10').getValue() + '.*\\|\\|\\|(.*$)','i');
for(var i=0;i<sheetData.length;i++){
var rD1=re1.exec(sheetData[i][0]);
if(rD1) {
var rowData1 = rD1[1];
}
var rD2=re2.exec(sheetData[i][0]);
if(rD2) {
var rowData2 = rD2[1];
}
var rD3=re3.exec(sheetData[i][0]);
if(rD3) {
var rowData3 = rD3[1];
}
var rD4=re4.exec(sheetData[i][0]);
if(rD4) {
var rowData4 = rD4[1];
}
}
//var rObj={rowData1:rowData1,rowData2:rowData2,rowData3:rowData3,rowData4:rowData4};
sspre.getRange('D7').setValue(rowData1);
sspre.getRange('D8').setValue(rowData2);
sspre.getRange('D9').setValue(rowData3);
sspre.getRange('D10').setValue(rowData4);
file.setTrashed(true);
//return rObj;
}
}
用某种碰巧用您开发时使用的语言编写自己的regex测试器对某种问题很有帮助。很抱歉,我花了这么长时间。如果您遇到其他问题,请告诉我。