Google apps script 如何将2D数组作为范围传递给Google电子表格图表?

Google apps script 如何将2D数组作为范围传递给Google电子表格图表?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,假设我们有: A栏: Cat Dog Pig B栏: 2 3 4 添加新的图表功能: function newChart() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var activeRange = sheet.getActiveRange(); var data = ss.getSheets()[0]; Logger.log(activeR

假设我们有:

A栏:

Cat
Dog
Pig
B栏:

2
3
4
添加新的图表功能:

function newChart() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var activeRange = sheet.getActiveRange();

  var data = ss.getSheets()[0];

  Logger.log(activeRange.getValues())

  var chart = data.newChart()
     .setChartType(Charts.ChartType.PIE)
     .addRange(activeRange)
     .setPosition(3, 2, 0, 0)
     .setOption('title','Farm')
     .build();

  data.insertChart(chart);
}
细胞A1:B3中的活性范围; activeRange值(二维数组):

但当我尝试将2D数组作为范围传递时

  var range = [['Cat', 2.0], ['Dog', 3.0], ['Pig', 4.0]];

  var chart = data.newChart()
     .setChartType(Charts.ChartType.PIE)
     .addRange(range)
     .setPosition(3, 2, 0, 0)
     .setOption('title','Farm')
     .build();
我得到了下一个错误:

无法将数组转换为范围


请帮助我了解如何将2D数组作为范围传递

通过将中的值设置为范围,可以尝试将数组对象转换为范围。检查以下代码:

function newChart() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = [['Cat', 2.0], ['Dog', 3.0], ['Pig', 4.0]];
  var activeRange = sheet.getRange(1, 1, 3, 2).setValues(range);
  var data = ss.getSheets()[0];
  var chart = data.newChart()
     .setChartType(Charts.ChartType.PIE)
     .addRange(activeRange)
     .setPosition(3, 2, 0, 0)
     .setOption('title','Farm')
     .build();

  data.insertChart(chart);
}

已尝试并能够获取数组值的饼图。希望有帮助

以防万一这对某人有用。从活动范围创建图表的简单功能:

  // global
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var activeRange = sheet.getActiveRange();

function newChart() {

  // Get values from Active Range:
  var source = activeRange.getValues();

  // Get only unique entries (uses 2D Arrays Library):
  var uniqueCount = ArrayLib.unique(source)

  // Some rearrangemen to get propper output:
  var sourceOutput = [];  
     for(var i = 0; i < uniqueCount.length; i++)
{
    sourceOutput = sourceOutput.concat(uniqueCount[i]);
}

  // Empty arr
  var empArr = new Array([]);

  var counts = {};    
     for(var i = 0; i< source.length; i++) {
        var num = source[i];   
       if(empArr < num){
    counts[num] = counts[num] ? counts[num]+1 : 1;
       }    
}

  var keyArray = Object.keys(counts).map(function (key) {return counts[key]});

  var output=[];
     for(i=0;i<sourceOutput.length;i++){
       output.push( [sourceOutput[i], keyArray[i] ]);
};

  Logger.log(output)

  // Create a chart
  var data = ss.getSheets()[0];  
  var outputRange=data.getRange(10, 1, uniqueCount.length, 2).setValues(output);  
  var chart = data.newChart()
     .setChartType(Charts.ChartType.PIE)
     .addRange(outputRange)
     .setPosition(3, 3, 0, 0)
     .setOption('title','%your_title%')
     .build();

  data.insertChart(chart);
}
//全局
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getActiveSheet();
var activeRange=sheet.getActiveRange();
函数newChart(){
//从活动范围获取值:
var source=activeRange.getValues();
//仅获取唯一条目(使用二维数组库):
var uniqueCount=ArrayLib.unique(源)
//有些人希望获得支撑器输出:
var sourceOutput=[];
对于(变量i=0;i对于(i=0;iit需要一个工作表范围而不是一个数组。请参阅其他图表方法,可能还有另一种用于PASS原始数据的方法。
  // global
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var activeRange = sheet.getActiveRange();

function newChart() {

  // Get values from Active Range:
  var source = activeRange.getValues();

  // Get only unique entries (uses 2D Arrays Library):
  var uniqueCount = ArrayLib.unique(source)

  // Some rearrangemen to get propper output:
  var sourceOutput = [];  
     for(var i = 0; i < uniqueCount.length; i++)
{
    sourceOutput = sourceOutput.concat(uniqueCount[i]);
}

  // Empty arr
  var empArr = new Array([]);

  var counts = {};    
     for(var i = 0; i< source.length; i++) {
        var num = source[i];   
       if(empArr < num){
    counts[num] = counts[num] ? counts[num]+1 : 1;
       }    
}

  var keyArray = Object.keys(counts).map(function (key) {return counts[key]});

  var output=[];
     for(i=0;i<sourceOutput.length;i++){
       output.push( [sourceOutput[i], keyArray[i] ]);
};

  Logger.log(output)

  // Create a chart
  var data = ss.getSheets()[0];  
  var outputRange=data.getRange(10, 1, uniqueCount.length, 2).setValues(output);  
  var chart = data.newChart()
     .setChartType(Charts.ChartType.PIE)
     .addRange(outputRange)
     .setPosition(3, 3, 0, 0)
     .setOption('title','%your_title%')
     .build();

  data.insertChart(chart);
}