【问题标题】:Get list inside list in google spreadsheet在谷歌电子表格中的列表中获取列表
【发布时间】:2021-04-23 09:43:24
【问题描述】:

我在谷歌电子表格中有这张表。 spreadsheet image

合并表头

Monday Tuesday
Morning Afternoon Evening Morning Afternoon Evening
Breakfast Pick Bro Dinner Breakfast Pick Bro Dinner
Cleaning House Reading Book Reading Book Go to Grand Dad

获取范围

function testing() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var gr = spreadsheet.getRange("A1:F4").getValues();
  Logger.log(gr)
}

我明白了

[
 [Monday, , , Tuesday, , ],
 [Morning, Afternoon, Evening, Morning, Afternoon, Evening],
 [Breakfast, Pick Bro, Dinner, Breakfast, Pick Sis, Dinner],
 [Cleaning House, , Reading Book, Reading Book, , Go to Grand Dad]
]

但我需要循环的结果是

[
 [Monday,
  [Morning,[Breakfast,Cleaning House]]
  [Afternoon,[Pick Bro]]
  [Evening,[Dinner,Reading Book]]
 ],
 [Tuesday,
  [Morning,[Breakfast,Reading Book]]
  [Afternoon,[Pick Sis]]
  [Evening,[Dinner,Go to Grand Dad]]
 ],
]

它看起来像按列循环,而不是按行循环。我怎样才能得到这个结果?

【问题讨论】:

    标签: javascript json google-apps-script google-sheets arraylist


    【解决方案1】:

    我相信你的目标如下。

    • 您希望使用 Google Apps 脚本实现以下转换。

      • 来自

        Monday Tuesday
        Morning Afternoon Evening Morning Afternoon Evening
        Breakfast Pick Bro Dinner Breakfast Pick Bro Dinner
        Cleaning House Reading Book Reading Book Go to Grand Dad
      •   [
           [Monday,
            [Morning,[Breakfast,Cleaning House]]
            [Afternoon,[Pick Bro]]
            [Evening,[Dinner,Reading Book]]
           ],
           [Tuesday,
            [Morning,[Breakfast,Reading Book]]
            [Afternoon,[Pick Sis]]
            [Evening,[Dinner,Go to Grand Dad]]
           ],
          ]
        

    在这种情况下,我想提出以下示例脚本。

    示例脚本:

    function myFunction() {
      // 1. Retrieve the merged ranges from the header row.
      var spreadsheet = SpreadsheetApp.getActiveSheet();
      var mergedRanges = spreadsheet.getRange(1, 1, 1, spreadsheet.getLastColumn()).getMergedRanges();
    
      // 2. Retrieve the header and values.
      var [header, ...values] = spreadsheet.getRange("A1:F4").getValues();
    
      // 3. Transpose the values.
      var ar = values[0].map((_, i) => {
        const [h, ...v] = values.map(row => row[i]);
        return [h, v.filter(String)];
      });
      
      // 4. Create an result array using the meadedRanges and the transposed values.
      var res = header.filter(String).map((r, i) => [r, ...ar.splice(0, mergedRanges[i].getNumColumns())]);
      console.log(JSON.stringify(res))
    }
    
    • 这个脚本的流程如下。

      1. 从标题行检索合并的范围。
      2. 检索标头和值。
      3. 转置值。
      4. 使用 meadedRanges 和转置值创建一个结果数组。

    结果:

    上面的脚本运行时,得到如下结果。

    [
      ["Monday",
        ["Morning",["Breakfast","Cleaning House"]],
        ["Afternoon",["Pick Bro"]],
        ["Evening",["Dinner","Reading Book"]]
      ],
      ["Tuesday",
        ["Morning",["Breakfast","Reading Book"]],
        ["Afternoon",["Pick Bro"]],
        ["Evening",["Dinner","Go to Grand Dad"]]
      ]
    ]
    

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      相关资源
      最近更新 更多