【问题标题】:Returning a Range with some rows having merged columns in Google Appscript返回一个范围,其中一些行在 Google Appscript 中具有合并的列
【发布时间】:2015-12-11 01:11:04
【问题描述】:

我要使用 Google AppScript 为 Google 表格创建一个自定义函数。我有一组数据,我的自定义函数将汇总并在另一张纸上显示汇总。

我能够为摘要创建我的 on 算法并返回如下范围:

当前

现在我知道 Appscript 函数返回一个二维数组,但我的问题是如何使用 Appscript 合并一些单元格?什么时候有一个月?像这样:

目标

对于上面的例子, 我将从自定义函数返回的范围是

[
    ['January', ''],
    ['Project 1', '10 Hours'],
    ['Project 2', '20 Hours'],
    ['Project 3', '30 Hours'],
    ['Project 4', '40 Hours'],
    ['Project 5', '50 Hours'],
    ['February', ''],
    ['Project 1', '10 Hours'],
    ['Project 2', '20 Hours'],
    ['Project 3', '30 Hours'],
    ['Project 4', '40 Hours'],
    ['Project 5', '50 Hours']
]

那么我如何告诉 AppScript 告诉 GooglSheets ['January', ''],['February', ''], 是要合并的单元格?

如果 Excel 中有可以做到这一点的函数,我也愿意接受其他方法。 :)

谢谢

【问题讨论】:

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


    【解决方案1】:

    此示例将表从 Sheet1 复制到 Sheet2 到 3 行和 4 列。

    function myFunction() {  
      var ss = SpreadsheetApp.getActiveSpreadsheet();  
      var sheet1 = ss.getSheets()[0];
      var data = sheet1.getDataRange().getValues();   
      var mergeRows = [];  
      for(var i = 0; i < data.length; i++) {    
        if (data[i][1] == "") {
          mergeRows.push(i);      
        }
      }  
      var startRow = 3;  
      var startCol = 4;  
      var sheet2 = ss.getSheets()[1];  
      sheet2.getRange(startRow, startCol, data.length, data[0].length).setValues(data);  
      for(var i = 0; i < mergeRows.length; i++) {    
        sheet2.getRange(startRow + mergeRows[i], startCol, 1, 2).merge().setHorizontalAlignment('center');
      }  
    }
    

    【讨论】:

    • Nice answer Speedy,我这确实有帮助,在我接受这个作为答案之前,只需再提出一个后续问题,我如何使 startRowstartCol 动态化?我怎么知道myFunction 用在哪张纸上?
    • 对动态不太了解。要将数据粘贴到哪里?到第一个空行还是在另一个数据之后?请给我更多信息。关于工作表:您可以打开电子表格by id 并选择工作表by name
    • 当我说动态时,它可以随时更改,而无需我对哪个单元格进行硬编码。在sheet1!A:2 上说我输入了=myFunction(),所以它必须将结果范围返回到该单元格。返回范围部分很简单,但我如何让函数知道它是从哪个单元格调用的?非常感谢快速!这就是我完成这个答案所需要知道的全部内容。
    • 忽略后续问题,我找到了这个“In Google Script, get the spreadsheet cell calling a custom function”,可以添加到您的解决方案中,谢谢!
    【解决方案2】:

    您必须使用merge()mergeAcross() 方法。 类似的东西

    sheet.getRange('A1:B1').merge();
    sheet.getRange('A7:B7').merge();
    

    【讨论】:

    • 感谢 Tovly 的回答,但我如何告诉表格一月哪个单元格以及二月哪个单元格? 1 月和 2 月的项目数量是动态的,因此它们可以移动。
    猜你喜欢
    • 2022-11-03
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    相关资源
    最近更新 更多