2016-07-02 6 views
0

Googleシート内の特定の範囲のCSVファイルを書き出すためのスクリプトを作成(実際​​には変更)しました。それはうまく機能している:"For Google Script in TypeErrorループを導入

function convertRangeToCsvFile_(csvFileName,delimiter) { 
    // Get the selected range in the spreadsheet 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[0]; 
    var ws = sheet.getRange("F3:G501"); 

    try { 
    var data = ws.getValues(); 
    var csvFile = undefined; 

    // Loop through the data in the range and build a string with the CSV data 
    if (data.length > 1) { 
     var csv = ""; 
     for (var row = 0; row < data.length; row++) { 
     for (var col = 0; col < data[row].length; col++) { 
      if (data[row][col].toString().indexOf(delimiter) != -1) { 
      data[row][col] = "\"" + data[row][col] + "\""; 
      } 
     } 

     // Join each row's columns 
     // Add a carriage return to end of each row, except for the last one 
     if (row < data.length-1) { 
      csv += data[row].join(delimiter) + "\r\n"; 
     } 
     else { 
      csv += data[row]; 
     } 
     } 
     csvFile = csv; 
    } 
    return csvFile; 
    } 
    catch(err) { 
    Logger.log(err); 
    Browser.msgBox(err); 
    } 
} 

はしかし、私は今、それを設定したいようにスクリプトを反復3種類以上のセルの範囲と一つの大きな長いCSVにそれらすべてを連結します。私が言うことができるものから

TypeError: Cannot find function getValues in object 0.

、これはスコープの問題のいくつかの種類がありますが、私はできません:私は、私はそうスクリプトがエラーを返しないときしかし、forループを使用して、これをやろうとしています私の人生は私がそれを解決するのに役立つものを見つける。ここに私の壊れたコードです:

function convertRangeToCsvFile_(csvFileName,delimiter) { 
    // Get the selected range in the spreadsheet 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[0]; 
    var ranges = [sheet.getRange("F3:G501"),sheet.getRange("H3:I501"),sheet.getRange("J3:K501")]; 

    try { 

    for (var ws in ranges) { 

     var data = ws.getValues(); 
     var csvFile = undefined; 

     // Loop through the data in the range and build a string with the CSV data 
     if (data.length > 1) { 
     var csv = ""; 
     for (var row = 0; row < data.length; row++) { 
      for (var col = 0; col < data[row].length; col++) { 
      if (data[row][col].toString().indexOf(delimiter) != -1) { 
       data[row][col] = "\"" + data[row][col] + "\""; 
      } 
      } 

      // Join each row's columns 
      // Add a carriage return to end of each row, except for the last one 
      if (row < data.length-1) { 
      csv += data[row].join(delimiter) + "\r\n"; 
      } 
      else { 
      csv += data[row]; 
      } 
     } 
     csvFile = csv; 
     } 
    } 

    return csvFile; 

    } 
    catch(err) { 
    Logger.log(err); 
    Browser.msgBox(err); 
    } 
} 

私が試したところ調整forループ開始時と終了(もともとはもちろん、「未定義」エラーの原因となったvar data = ws.getValues();ラインにかかりませんでした。)

しかし、私の最善の努力にもかかわらず、私の(非常に経験の浅い)脳が解析できる方法でこの問題に対処する情報はありません!

ご了承ください。

答えて

1

あなたはオブジェクトではなく配列として範囲をループしているので、あなたが見つける最初のキーではなく、ループの増分で0

ループです:私はチェックしていない残り

var ws; 
for (var w =0; w < ranges.length; w += 1) { 
    ws = ranges[w]; 

が、あなたが変わったなら、他には何もうまくいかないはずです。

+0

ありがとう、ジョナトン - それは終わった! – sulvo