77715


引数arrayが0以外の場合意図する動作が実現できないようです。誰か問題点を指摘できますか ?

[code]

    const spreadsheets = [];
    let spreadsheet = SpreadsheetApp.openById("X");
    spreadsheets.push(spreadsheet);
    
    function problem(array,index){
      const things =[];
      const sheets = spreadsheets[0].getSheets();
      const values =sheets[index].getRange(1,array+1,1000,1).getValues();
      Logger.log(values);
    //problem(0,1):[[a1],[a2],[],[],[],[],.....]
    //problem(1,1):[[b1],[b2],[b3],[],[],[],.....]
      for(let i=0;i<1000;i=i+1){
        if(values[i][array]==""){break;}
        things.push(values[i][array]);
        }
      Logger.log(things);
    //problem(0,1):[a1,a2]
    //problem(1,1):[null,null,null,......]
      return things;
    }
    
[/code]

spreadsheets[0].getSheets()[1] | A | B  
---|---|---  
1 | a1 | b1  
2 | a2 | b2  
3 |  | b3


CC BY-SA 4.0
2021-06-22T15:13:28.653
77714
2021-06-22T16:04:07.860
46987
question
google-apps-script
各列の値を持つセルの値を取得したい
  
  
二次元配列へのアクセスが誤っているのが原因です。

[code]

      Logger.log(values);
    //problem(0,1):[[a1],[a2],[],[],[],[],.....]
    //problem(1,1):[[b1],[b2],[b3],[],[],[],.....]
    
[/code]

`values` には、「「1つだけ要素のある配列（＝セル、より正確には1行から幅が1つ分）」の配列（ ＝`getValues()`
で取得した範囲）」が入っています。

なので、例えば `a1` の部分を取得するには `values[0][0]` 、 `a2` の部分を取得するには `values[0][1]` 、同様に
`problem(1, 1)` で `b1` の部分を取得するには `values[0][0]` 、……とアクセスする必要があります。

というところで続きのコードですが、

[code]

      for(let i=0;i<1000;i=i+1){
        if(values[i][array]==""){break;}
        things.push(values[i][array]);
        }
      Logger.log(things);
    //problem(0,1):[a1,a2]
    //problem(1,1):[null,null,null,......]
    
[/code]

…… `values[i][array]` というアクセスをしています。これは、

  * `problem(0, 1)` の時：`values[0][1]`（a1） 、`values[1][1]` （a2）にアクセスする
  * `problem(1, 1)` の時：`values[1][1]` （ `null`） 、`values[1][1]` （ `null`）、……にアクセスする  
（無限に `null` がかえるので、終了しない）

という結果を起こします。  
ですので、 `values` へのアクセス方法を修正すれば解決するでしょう。


CC BY-SA 4.0
2021-06-22T16:04:07.860
77715
2021-06-22T16:04:07.860
29826
77714
answer