【发布时间】:2019-04-18 08:07:43
【问题描述】:
我的脚本在整个工作簿中搜索特定名称并返回该名称的所有数据。该脚本有效,但仅从工作簿中的一张工作表中收集数据。
我搜索了一些代码来帮助我获取所有工作表名称。所以我有代码可以做到这一点,但由于某种原因,它仍然只能从 1 张纸返回。
下面的代码收集了所有工作表名称。 然后在查询函数中调用此函数。 我怀疑这就是问题所在
function sheetnames() {
var out = new Array()
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i=0 ; i < sheets.length ; i++) {
var name = sheets[i].getName();
var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name);
var values = data.getRange(4, 1, data.getLastRow(),
data.getLastColumn()).getValues();
out.push(values);
}
return out;
}
此函数然后搜索请求的数据。
function query() {
var Sheet = SpreadsheetApp.getActiveSpreadsheet();
var searchSheet = Sheet.getSheetByName("Search");
var searchByName = searchSheet.getRange(4, 8).getValue();
var uses = sheetnames();
var output = new Array();
var i = 0;
var r = 0;
do{
var from = uses[i];
do{
var row = from[r];
if(row == null){
r++;
continue;
}
if(searchByName != null ){
var newName = row[7];
if(newName == searchByName){
output.push(row);
}
}
r ++;
}while(r < from.length);
i ++;
}while(i < uses.length);
return output;
}
这部分只是将数据打印到单元格中,并附加到一个搜索图上,该图在工作表中运行该函数。
function search() {
var Sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Search");
var data = query();
var count1 = 0;
do{
var subData = data[count1];
var count2 = 0;
do{
var setTo = subData[count2];
Sheet.getRange((count1 + 5), (count2 + 1)).setValue(setTo);
count2 ++;
}while(count2 < subData.length);
count1 ++;
}while(count1 < data.length);
}
该表称为“每日付款表”。你可以想象有很多数据。每个工作表名称均按付款发生的月份和年份命名。更稳定的客户显然会在一个多月内购买。
因此,在搜索客户姓名时,我只返回了 1 个月(1 张数据)。我们有 2018 年 5 月至今的数据,所以同样,脚本不会从所有工作表中收集。
【问题讨论】:
标签: google-apps-script google-sheets