1

我試圖在一個選項卡中填充單元格範圍,並使用從我的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函數。因此,我不能提供有關腳本如何實際運行的很多信息。

我尋求建議和幫助如何糾正我的腳本,使其正確運行。

+0

「看來,我做了什麼錯誤。」無助於診斷問題。結果與預期有什麼不同? – FTP

回答

2
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); 
} 
1

好的,所以問題是功能getRange().setValues()功能getMonthTotals內。

它預計會得到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]); 
    } 
} 
相關問題