google-apps-script - 如何为 setValue 返回多个列值
问题描述
我试图运行一些脚本来查找各种单元格值,返回包含搜索值的单元格的每个列号,然后setValue
根据每个返回值。我已经到了下面的例子:
function superAuto() {
var report = SpreadsheetApp.openById('REPORTSHEET');
var reportData = report.getDataRange().getValues();
var scorecard = SpreadsheetApp.openById('SCORESHEET');
var scorecardData = scorecard.getDataRange().getValues();
var column = columnfinder ();
scorecard.getRange(18, [column]).setValue("Example input");
}
function columnfinder() {
var report = SpreadsheetApp.openById('REPORTSHEET');
var reportData = report.getDataRange().getValues();
for(var j=0, jLen=reportData.length; j<jLen; j++) {
for(var k=0, kLen=reportData[0].length; k<kLen; k++) {
var find = "Nov-20" || "Dec-20" || "Jan-21";
if(find == reportData[j][k]) {
Logger.log(k);
return (k);}
}
}
}
我的代码的问题在于它只返回k
一个搜索词(第一个,"Nov-20"
),因此只有setValue
一个SCORESHEET
基于此的单元格,而在这个例子中,我真的很喜欢 3 个单元格找到REPORTSHEET
(所有搜索词都可以找到),k
要返回 3 个值,因此要填充 3 个单元格SCORESHEET
。
有什么想法吗?
解决方案
如果要columnfinder()
返回列索引列表,则需要定义一个数组变量,该变量将在返回其值之前保存匹配的列索引。您可以使用array.push()将值附加到您的数组。
你的代码:
function superAuto() {
var report = SpreadsheetApp.openById('REPORTSHEET');
var reportData = report.getDataRange().getValues();
var scorecard = SpreadsheetApp.openById('SCORESHEET');
var scorecardSheet = scorecard.getSheetByName('Sheet1');
var scorecardData = scorecard.getDataRange().getValues();
var columns = columnfinder();
Logger.log(columns);
columns.forEach(col=>{
scorecardSheet.getRange(18, col).setValue("Example input");
})
}
function columnfinder() {
var report = SpreadsheetApp.openById('REPORTSHEET');
var reportData = report.getDataRange().getValues();
var result = [];
for(var j=0, jLen=reportData.length; j<jLen; j++) {
for(var k=0, kLen=reportData[0].length; k<kLen; k++) {
var find = ["Nov-20", "Dec-20", "Jan-21"];
if(find.includes(reportData[j][k])) {
//return (k);
//Array is in zero-based, but column index for sheet range is in one-based.
result.push(k+1);
}
}
}
return result;
}
修改完成:
我声明了一个
result
数组columnfinder()
,它将保存列索引并使用 in 推送找到的索引result.push(k+1);
替换了匹配字符串中的条件
columnfinder()
,我声明了一个数组find
并使用了 array.includes()并检查find
数组是否包含正在检查的当前单元格。result
完成循环后返回columnfinder()
中添加了一个
scorecardSheet
变量superAuto()
。最初您试图getRange(row, column)
在电子表格中使用scorecard
这是不可能的。(请参阅电子表格方法)。getRange(row, column)在工作表类中可用
输出:
报告表:
评分表:
推荐阅读
- firebase - 如果有人窃取了您的 GoogleInfo.plist 并一直创建 Firebase 用户怎么办?[Firestore、Firebase 身份验证、安全规则]
- r - 迭代地计算 data.table 的列,一次一行(递归列定义)
- azure-devops - 从 Multistage YAML 中的其他管道下载工件
- python - 具有嵌套过滤器和 AND 和 OR 条件的 Elasticsearch-dsl 完全匹配
- python - python matplotlib y轴移动图像
- javascript - 组件在 Next.js/React 项目中没有返回错误
- excel - Excel VBA Web Scraping - 通过 XML HTTP 请求忽略多个表之一
- database - 在 Oracle 11g 中创建新实例
- javascript - 包裹在 UseEffect 中的 React 异步函数
- mongodb - Mongodb如何匹配两个字段之一不等于零?