使用从 google 个工作表中的其他选项卡收集的特定值填充一个选项卡中的单元格

Fill cells in one tab with specific values collected from other tabs in google sheets

我正在尝试使用从 google 工作表中其他选项卡收集的特定值填充一个选项卡中的单元格范围。但是,我无法为其编写正确的脚本。

这里有更详细的解释:

我的 google 工作表文档中有几个选项卡代表一年中的一个月,即它们被命名为 July 2017December 2016 等等。我还有另外两个名为 GraphsBlank.

的选项卡

N6 单元格中的每个月选项卡都具有如下值:Balance 33050,32 UAH(数字可能因选项卡而异)。

我想做什么:

我需要从我所有的月份选项卡中收集 N6 值,并将这些值填充到 Graphs 选项卡的 A 列中。然后我需要根据我收集的所有值构建一个图表。但现在的主要问题是正确收集值。

我试过为此写一个脚本,但似乎我做错了什么。我对 google 脚本的东西很陌生,所以我可能在这里遗漏了一些简单的东西。

这是我的脚本:

var months = [
  "january","february","march","april","may","june","july","august","september","october", "november","december"
];

var graphSheetName = 'Graphs';
var ss = SpreadsheetApp.getActiveSpreadsheet();
var graphSheet = ss.getSheetByName(graphSheetName);

// this function tells if the name of the tab refers to one of the month tabs.
function isMonthSheet(name) {
  return matchInArray(name, months);
}

function matchInArray(string, expressions) {
    var len = expressions.length,
        i = 0;

    for (; i < len; i++) {
        if (string.toLowerCase().match(expressions[i])) {
            return true;
        }
    }
    return false;
}

// This function runs on every edit of the google sheets document.
// It should fill the cells in the `Graphs` tab.
function getMonthsTotals() {  
  var sheets = ss.getSheets(); // get all tabs
  var values = [];

  for (var i = 0; i < sheets.length; ++i) {
   var sheet = sheets[i];

    // if it is a month tab, collect the N6 value into the `values` array.
    // "Balance 33050,32 UAH".slice(8,-4) --> "33050,32".
    if (isMonthSheet(sheet.getName())) {
      var value = sheet.getRange('N6').getValue().slice(8, -4);
      values.push(value);
    }
  }

  // fill the `Graphs` tab with the collected values into the `A` column.
  var rangeStr = 'A1:A' + values.length;
  graphSheet.getRange(rangeStr).setValues(values);
}

正如我上面已经说过的,我对 google 工作表脚本很陌生,所以我也不太熟悉其中的调试,所以我的方法是使用 toast 功能。因此,我无法真正提供很多关于脚本实际如何运行的信息 运行ning.

我寻求有关如何更正我的脚本以使其 运行 正确的建议和帮助。

好的,所以问题出在 getMonthTotals.

中的 getRange().setValues() 函数

它期望获得 Object[][] 类型,但却得到了一个简单的字符串数组。我已经设法通过循环和使用 setValue(string) 函数而不是 setValues(Object[][]).

来克服这个问题

这是我想出的:

function getMonthsTotals() {  
  var sheets = ss.getSheets();
  var values = [];

  for (var i = 0; i < sheets.length; ++i) {
   var sheet = sheets[i];

    if (isMonthSheet(sheet.getName())) {
      var value = sheet.getRange('N6').getValue().slice(8, -4);
      values.push(value);
    }
  }

  for (var i = 1; i <= values.length; ++i) {
   graphSheet.getRange('A' + i).setValue(values[i - 1]);
  }
}
function gatheringValues()
{
  var months=['January','February','March','April','May','June','July','August','September','October','December'];
  var ss=SpreadsheetApp.getActive();
  var allsheets=ss.getSheets();
  var n6s=[];
  for(var i=0;i<allsheets.length;i++)
  {
    var month=allsheets[i].getName().split(' ')[0];
    if(months.indexOf(month)>-1)
    {
      n6s.push([allsheets[i].getRange('N6').getValue().slice(8,-4)]);
    }
  }
  var graphsht=ss.getSheetByName('Graphs');
  graphsht.getRange(2,1,n6s.length,1).setValues(n6s);
}