0

次のスクリプトで問題に直面しています。私はスクリプトにあまり興味がなく、これも私のスクリプトではありませんが、値をグループ化した結果が得られます (たとえば、3 つのセルに値 A がある場合、AAA を返す代わりに値を 3 として返す必要があります誰かが値を数えて返すのを手伝ってくれますか

前もって感謝します、

スクリプトは次のとおりです。

function sumBackgroundColors(rangeString, color) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var sumRange = s.getRange(rangeString);
//var sum = 0;
var openCount = 0;
var sumRangeBackground = sumRange.getBackgroundColors();
var sumRangeValues = sumRange.getValues();

for(var row = 0; row < sumRangeBackground.length; row++ ) {
for(var col = 0; col < sumRangeBackground[0].length; col++ ) {
if( sumRangeValues[row][col]=="LG M"&& sumRangeBackground[row][col] == color ) {
openCount = openCount + sumRangeValues[row][col];
//if(sumRangeBackground[row][col] == color && sumRangeValues[row][col] == 1 ) {
// sum = sum + parseFloat(sumRangeValues[row][col]);

} 
}
}
return openCount;
//return sum;
}
4

2 に答える 2

0

これは、検索する値を引数として受け取る関数です。残りのことはコメント行で説明されています。

function searchCount(value){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  //Get the whole data from activesheet in a 2D array
  var data = sheet.getDataRange().getValues();

  //Initialize counter
  var count = 0;

  //Iterate through the array
  for(var i in data){
    for(var j in data[i]){
      // if a match found, increament the counter
      if(value.toString == data[i][j]){
        count++;
      }
    }
  }
  // return the count value
  return count;
}
于 2012-05-14T11:07:30.403 に答える
0

あなたの問題はopenCount = openCount + sumRangeValues[row][col];

あなたの例によると、sumRangeValues[row][col]は int ではありません。int + int ではない = ??? 物事のカウントを保持したい場合は、代わりにopenCount++でその行を置き換えたいと思うでしょう。これは単なるショートカットですopenCount = openCount + 1;

sumRangeValues [row][col] int だったとしても、その行は探しているものではありません。スプレッドシートですべての 3 を検索している場合、コードは最初の 3 を見つけ、その行で0 = 0 + 3congrats を実行すると、3 つの 3 が見つかりました。3 を見つけるたびに 3 を追加し続けます。

Waqar のコードは、色をチェックせず、その行の代わりに ++ を使用することを除いて、基本的にはあなたのコードです (驚くほど単純化されていますが、同じように繰り返されます)。

于 2012-05-30T17:01:11.430 に答える