arrays - 如何在 Google Apps 脚本中将数组项加入到每行的单个字符串中?
问题描述
我想在 Google 表格中设想以下内容,我可以在其中运行一个脚本来检查 A 列与三个列表的对比,G 列中的输出将说明 A 列中出现的值的列表:
我已经能够通过一组非常低效的嵌套循环 setValue() 和 getValue() 来产生这种效果。
但是,我知道有更优化的方法来处理它,例如通过数组附加项目。
我对 Google Apps 脚本数组的语法不是很熟悉,所以我想知道如何去做。到目前为止,我已经写了以下内容:
function list_function()
{
var sheet = SpreadsheetApp.getActiveSheet();
var check_list = sheet.getRange("A1:A").getValues();
var list_A = sheet.getRange("C1:C").getValues();
var list_B = sheet.getRange("D1:D").getValues();
var list_C = sheet.getRange("E1:E").getValues();
var checking_array = [];
for(var i=1; i<check_list.length; i++)
{
//list A here
for (var j = 1; j < list_A.length; j++)
{
if (check_list[i][0] != "" && check_list[i][0].toUpperCase() == list_B[j][0].toUpperCase())
{
checking_array.push(['List_A"']);
}
}
//List B here
for (var k = 1; k < list_B.length; k++)
{
if (check_list[i][0] != "" && check_list[i][0].toUpperCase() == list_B[k][0].toUpperCase())
{
checking_array.push(['List_B"']);
}
}
//List C here
for (var l = 1; l < list_C.length; l++)
{
if (check_list[i][0] != "" && check_list[i][0].toUpperCase() == list_C[l][0].toUpperCase())
{
checking_array.push(['List_C"']);
}
}
//Problem here, not sure how to join() array items into single string value for cell and match according to list
//ideally matches the above picture
sheet.getRange(1, 7, check_list.length).setValues(checking_array);
}
}
解决方案
您可以一次获取整个电子表格的值,并获取值或设置值:
function list_function()
{
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var data = sheet.getRange(1, 1, lastRow, lastColumn).getValues(); //getRange(starting Row, starting column, number of rows, number of columns)
var check = "";
var dataValue;
var checkValue;
//All lists here
for (var i = 1; i < lastRow; i++) {
checkValue = data[i][0];
for (var j = 2; j < lastColumn - 2; j++)
{
for (var k=1 ; k< lastRow; k++){
dataValue = data[k][j];
if (dataValue.toUpperCase() === checkValue.toUpperCase() )
{
check=check + "," + data[0][j];
}
}
}
data[i][lastColumn-1]=check.slice(1);
check = "";
}
check = "x"; // set breakpoint here to check data[][] values before write
sheet.getRange(1, 1, lastRow, lastColumn).setValues(data);
}
推荐阅读
- c# - 如何让 Tensorflow PoseNet 与 Xamarin forms/Xam.Android 一起使用
- assembly - MASM 5.1a:警告 A4057 操作数和链接 V2.0 的大小非法:对象模块无效
- android - 拒绝对 OkHttp 中先前失败的类重新初始化
- mongodb - 尝试使用 $cond 到 $sum 和 $subtract
- swift - 嵌套枚举的可编码一致性?
- android-studio - 如何创建检测 lambda 函数中“it”使用情况的 Lint 规则。在 Intellij/Android Studio 中
- z3 - 在 z3 中迭代添加
- java - 子实体具有复合键时如何级联插入子实体
- python - 如何取消注释 spyder python
- python - 无法在 Ubuntu 上安装 scipy