Google apps script Google应用程序脚本getRanges返回一个包含单个范围的列表

Google apps script Google应用程序脚本getRanges返回一个包含单个范围的列表,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在尝试获取谷歌应用程序脚本中选定单元格的范围,并将它们链接到一个HtmlOutput 我的电子表格中的一列有HTML输入。例如:你好,世界。这样做的目的是简单地提供一个漂亮的HTML预览 我的用例是,用户通过拖动光标来选择一系列单元格(多行,同一列),然后预览所选行的内容 我正在尝试使用以下代码执行此操作: function previewModal() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var ranges =

我正在尝试获取谷歌应用程序脚本中选定单元格的范围,并将它们链接到一个
HtmlOutput

我的电子表格中的一列有HTML输入。例如:
你好,世界

。这样做的目的是简单地提供一个漂亮的HTML预览

我的用例是,用户通过拖动光标来选择一系列单元格(多行,同一列),然后预览所选行的内容

我正在尝试使用以下代码执行此操作:

function previewModal() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var ranges =  sheet.getActiveRangeList().getRanges();
  var html = HtmlService.createHtmlOutput('');
  for (var i = 0; i < ranges.length; i++) {
    var contentCell = ranges[i];        
    var htmlContent = contentCell.getValue();
    html.append('<div>').append(htmlContent).append('</div>').append('<hr>');
  }
  html.setWidth(1000).setHeight(1000);
  SpreadsheetApp.getUi().showModalDialog(html, 'Preview');
}
函数预览模式(){
var sheet=SpreadsheetApp.getActiveSpreadsheet();
变量范围=sheet.getActiveRangeList().getRanges();
var html=HtmlService.createHtmlOutput(“”);
对于(变量i=0;i”);
}
setWidth(1000)、setHeight(1000);
SpreadsheetApp.getUi().showModalDialog(html,“预览”);
}
然而,当我运行这个程序时,我看到
ranges.length
等于1,无论我选择了多少个单元格。范围中包含的单元格是“活动”单元格->这是您第一次单击的单元格,然后再拖动以覆盖更多单元格。因此,我的HTML输出只包含1个单元格的值,而不是范围

我所说的“活动单元格”和“活动范围”是指:

到目前为止我所知道的:
  • sheet.getActiveRangeList()
    按预期工作并返回单元格的整个“活动范围”。我知道这一点,因为我可以调用
    。清除
    ,然后看到选定的单元格范围被清除
    
  • sheet.getActiveRangeList().getRanges()
    失败->这应该返回一个范围对象数组:
    Range[]
    ,但该数组只有“活动单元格”

    • 连续选择是单个
      范围
      。使用
      Range#getValues
      访问给定
      范围的所有值
      Range#getValue()
      始终只返回左上角的值,即使
      范围中有多个单元格

      function previewModal() {
        const sheet = SpreadsheetApp.getActiveSpreadsheet(),
              ranges =  sheet.getActiveRangeList().getRanges(),
              htmlPrefix = "",
              html = ranges.reduce(function (rgSummary, rg) {
                var summary = rg
                    .getValues() // 2D array
                    .reduce(arrayToHtmlReduceCallback_, "");
                return rgSummary + summary;
              }, htmlPrefix);
        const output = HtmlService.createHtmlOutput(html).setWidth(1000).setHeight(1000);
        SpreadsheetApp.getUi().showModalDialog(output, 'Preview');
      }
      
      function arrayToHtmlReduceCallback_(acc, row, i, allArrayRows) {
        const rowSummary = row[0]; // Using only the content of the first column.
        return acc + '<div>' + rowSummary + '</div><hr>';
      }
      
      函数预览模式(){
      const sheet=SpreadsheetApp.getActiveSpreadsheet(),
      范围=sheet.getActiveRangeList().getRanges(),
      htmlPrefix=“”,
      html=范围.reduce(函数(rgSummary,rg){
      var汇总=rg
      .getValues()//二维数组
      .减少(arrayToHtmlReduceCallback?“”);
      返回rgSummary+summary;
      },htmlPrefix);
      const output=HtmlService.createHtmlOutput(html).setWidth(1000).setHeight(1000);
      SpreadsheetApp.getUi().showModalDialog(输出“预览”);
      }
      函数数组HTMLREDUCECALLBACK_uU8(acc、row、i、allArrayRows){
      const rowSummary=行[0];//仅使用第一列的内容。
      返回acc+''+rowSummary+'
      '; }
      补充阅读: