我需要使用3个或4个列来创建JSON数组,但是我无法使用“ while”条件填充数据。
我有一些Google表格数据,该数据可以包含3或4列,该数据必须位于JSON数组中,例如:
|---------------------|------------------|---------------------|------------------|
| variable | condition | value | and/or |
|---------------------|------------------|---------------------|------------------|
| CPC | > | 100 | |
|---------------------|------------------|---------------------|------------------|
在第一个示例中,第四列为空,因为我们只有一行数据,因此结果必须为: [“ CPC”,“>”,100]
如果我们有两行(或更多)数据,则应如下所示:
|---------------------|------------------|---------------------|------------------|
| variable | condition | value | and/or |
|---------------------|------------------|---------------------|------------------|
| CPC | > | 100 | and |
|---------------------|------------------|---------------------|------------------|
| s_volume | < | 950 | and |
|---------------------|------------------|---------------------|------------------|
| s_volume | > | 100 | |
|---------------------|------------------|---------------------|------------------|
如您所见,最后一列的最后一行为空,结果应如下所示:
[“ CPC”,“>”,100], “和”, [“ s_volume”,“ <”,950], “和”, [“ s_volume”,“>”,100]
最后,必须将此JSON数组分配给变量。
我已经尝试过:
//Get values from cells
var fil1 = ss.getSheetByName("app").getRange(row,4,1,1).getValue();
var fil2 = ss.getSheetByName("app").getRange(row,5,1,1).getValue();
var fil3 = ss.getSheetByName("app").getRange(row,6,1,1).getValue();
var fil4 = ss.getSheetByName("app").getRange(row,7,1,1).getValue();
//Count how many rows with data exist
var coldat = ss.getSheetByName("app").getRange("D1:D").getValues();
var coldats = coldat.filter(String).length;
var jsonarr = [fil1, fil2, fil3]
//loop para añadir nuevos filtros
while (row < coldats) {
fil4,[fil1,fil2,fil3];
row++;
};
显然,在我的代码中,变量“ jsonarr”仅填充第一行,而忽略了下面的任意行。
我尝试了一些教程和数组方法来制作此JSON对象,但我只是无法获得正确的答案。对于这个新手问题,我真的感到很抱歉,我不是编码专家,只是做一些工作并且正在学习基础知识的怪胎。
答案 0 :(得分:0)
提供此答案是为了帮助OP汇总OP原始代码中标识的一系列问题。我在答案代码中留下了许多Logger语句,OP可以使用这些语句来识别代码不同阶段的值,帮助进行故障排除并有助于技能发展。
代码的结果包含在变量fildata
中。根据样本数据,值是:
["CPC",">",100],"and",["s_volume","<",950],"and",["s_volume",">",100]
如何导出此操作取决于OP。
OP试图为电子表格中的数据创建数据数组(非兼容JSON),作为到另一个系统的输入。
OP代码的设计意味着它仅检索一行数据,并且永远无法按预期建立阵列。 OP的代码是答案的基础,但有几个主要更改:
coldat
和coldats
移动到代码顶部,以便可以使用coldats
定义数据范围。getRange(2, 4, coldats, 4)
),并且仅使用一次“ getValues()”。function so54394711() {
// setup spreadsheet
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("app");
//Count how many rows with data exist
var coldat = sheet.getRange("D2:D").getValues();
var coldats = coldat.filter(String).length;
//Logger.log("DEBUG: Number of rows of data = "+coldats); //DEBUG
// establish the data range and values
var range = sheet.getRange(2, 4, coldats, 4);
//Logger.log("DEBUG: range = "+range.getA1Notation());//DEBUG
var values = range.getValues();
//Logger.log("DEBUG: values: "+ values);//DEBUG
// create a variable to hold the results
var fildata = "";
//loop through the data by row, build the results line-by-line
for (i = 0; i < coldats; i++) {
var filD = values[i][0];
var filE = values[i][1];
var filF = values[i][2];
var filG = values[i][3];
// test if column G contains a value
if (filG.length == 0) {
// array is empty
fildata += '[' + '"' + filD + '","' + filE + '",' + filF + ']';
//Logger.log("DEBUG: G=MT, fildata = "+fildata);//DEBUG
} else {
//array not empty
fildata += '[' + '"' + filD + '","' + filE + '",' + filF + ']' + ',"' + filG + '",';
//Logger.log("DEBUG: G<>MT, fildata = "+fildata);//DEBUG
}
// Logger.log("DEBUG: fildata = "+fildata);//DEBUG
}
}