【问题标题】:How can I combine data from multiple g-sheets into one?如何将多个 g-sheet 中的数据合并为一个?
【发布时间】:2020-10-09 14:21:49
【问题描述】:

这里是一个例子的链接:

https://docs.google.com/spreadsheets/d/1qNN3G4c9FNGk3bwKXJODUuIQIe5dRfVOwu8M7ZgU384/edit#gid=329910889

我想将“First”、“Second”和“Third”选项卡中的数据合并到“Combined”选项卡中,它们都在相同的标题(标题、类型、流派)下

如果有此脚本,请告诉我 - 因为我需要使用它的实际文档有 30 多个选项卡,并且公式可能会崩溃。

【问题讨论】:

    标签: javascript google-apps-script google-sheets google-sheets-formula google-sheets-api


    【解决方案1】:

    解释:

    • 以下脚本使用forEach 遍历工作表, 不包括exclude_sheets 数组中提到的那些。

    • 对于每个工作表,它将值(您需要在脚本开头设置的特定范围之间)存储到 data 数组。

    • 范围从 A 列 (start_col=1) 和C 列 (@987654334) 之间的第6 行 (start_row) 开始@)。最后一行被定义为包含内容的最后一行,因此您无需手动设置它,并且它也可以在工作表之间有所不同。但是,工作表之间的起始行和列范围必须相同。

    • 它最终将data 从单元格A2 开始粘贴到测试表(res_sheet = 'Test')。

    请随意修改以上参数,但尊重底层逻辑,否则脚本将无法正常运行。


    Google Apps 脚本解决方案:

    function myFunction() {
      
      const ss = SpreadsheetApp.getActive();
      const sheets = ss.getSheets();
      const exclude_sheets = ['Combined','Test'];
      const res_sheet = 'Test';
      const start_row = 6;
      const start_col = 1;
      const end_col = 3;
      
      const data = []
      sheets.forEach(sh=>{
                     
      if(!exclude_sheets.includes(sh.getName())){
      let temp = sh.getRange(start_row,start_col,sh.getLastRow()-start_row+1,end_col).getValues()
      data.push(...temp);
      }});
    
     ss.getSheetByName(res_sheet).getRange(2,1,data.length,data[0].length).setValues(data);
     
    }
    

    在使用此解决方案之前,请确保 V8 runtime enviroment 已启用。


    参考资料:

    【讨论】:

    • 嘿马里奥斯,谢谢。我尝试将它用于我的实际文档,只更改排除和 res 表中的选项卡名称,我收到此错误:异常:范围内的行数必须至少为 1。(第 77 行,文件“onOpen” ) 知道这里有什么问题吗?我没有调整其他任何东西(我启用了 V8)
    • @Christina 我在哪里使用了onOpen?请转到 Views = > Script editor 并运行myFunction。我将它添加到您的文件中。 prntscr.com/uw8i1p 。数据将从第二行开始添加到Test 表中(这就是我清除该表的原因,除了标题)。
    • @Christina 如果您想从onOpen 菜单执行此功能,请告诉我。但是,请记住,您需要向我提供您的完整代码,因为如果您已经使用了 onOpen 函数,我必须对其进行调整才能正常工作。
    • 我分享的文档只是我创建的一个示例表。我将代码粘贴到实际文档中(我无法共享),并且在那个文档上我有更多功能 - onOpen 只是文件名,但我使用了您的确切代码并且我收到了该错误(我所做的唯一更改是在排除和 res 的选项卡名称)鉴于我无法与您共享原始文档 - 知道错误可能来自哪里吗?
    • @Christina 该错误表明其中一张工作表在我在回答中解释的范围内有 0 个条目。 检查是否每张工作表都有A6:C范围内的数据。
    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2019-05-02
    • 2014-05-15
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多