0

いくつかのデータを含むゴーグルスプレッドシートがあり、シートで使用するカスタム関数を作成します。この関数は、セルの範囲と区切り文字を受け入れ、各セルの値を取得し、区切り文字で分割して、合計をカウントします。

For example
Column A has the following values in rows 1-3: {"Sheep","Sheep,Dog","Cat"}
My function would be called like this: =CountDelimitedValues(A1:A3;",");
It should return the value: 4 (1+2+1)

私が抱えている問題は、カスタムスクリプトに次のようなエラーが発生することです。

「TypeError:タイプSheepから関数GetValuesを取得できません」

これは私の現在のスクリプトです:

function CountArrayList(arrayList, delimiter) {
  var count = 0;
  //for (i=0; i<array.length; i++)
  //{
    //count += array[i].split(delimiter).length;
  //}

  var newArray = arrayList.GetValues();
  return newArray.ToString();

  //return count;
}

パラメータarraylistがスプレッドシートからオブジェクトの配列を受け取っていることは理解していますが、それらのオブジェクトから値を取得する方法、またはおそらくそれらを文字列にキャストする方法がわかりません。

あるいは、私はこれについて間違った方法で行っている可能性がありますか?2つの文字の間のセルからテキストを抽出する別のスクリプトがあります。これは1つのセルで正常に機能します。異なるセルの範囲についてはどうですか?

4

3 に答える 3

3

これは、スクリプトを使用せずに達成できることですが、単純な古い式です。

=SUM(ARRAYFORMULA(LEN(A1:A3)-LEN(SUBSTITUTE(A1:A3; ","; "")) + 1))

クレジットはここにあります:https ://webapps.stackexchange.com/q/37744/29140

于 2013-01-09T22:46:00.207 に答える
1

このようなものが機能します:

function CountArrayList(arrayList) {
return arrayList.toString().split(',').length
}

それで十分ではないでしょうか?

Oooopsを編集してください、申し訳ありませんが、ユーザー定義の区切り文字を忘れたので、このように

function CountArrayList(arrayList,del) {
return arrayList.toString().split(del).length
}

利用方法 :=CountArrayList(A1:C1;",")

注:上記のこの例では、配列要素をコンマで結合するため、「、」以外の区切り文字を使用するのは危険toString()です...本当に必要な場合は、正規表現を使用してコンマを使用して適用するものに変更してみてくださいその上で分割。

このようにしてみてください:

function CountArrayList(arrayList,del) {
return arrayList.toString().replace(/,/g,del).split(del).length
}
于 2013-01-09T15:55:41.787 に答える
0

Another solution I have was that I needed to implicitly cast the objects in the array being passed as a string.

For example this function accepts the array of cells, and outputs their contents as a string with del as the delimiter (similar to the String.Split() function). Note the TrimString function and that it is being passed an element of the array.

function ArrayToString(array,del) {
  var string = "";

  for (i=0; i < array.length; i++) {
    if (array[i] != null) {
      var trimmedString = TrimString(array[i]);
      if (trimmedString != "") {
        if (string.length > 0) {
          string += del;
        }

        string += trimmedString;
      }
    }
  }

  return string;
}

Below is the TrimString function.

function TrimString(string) {
  var value = "";
  if (string != "" && string != null) {
    var newString = "";
    newString += string;

    var frontStringTrimmed = newString.replace(/^\s*/,"");
    var backStringTrimmed = frontStringTrimmed.replace(/\s*$/,"");
    value = backStringTrimmed;
  }
  return value;
}

What I found is that this code threw a TypeError unless I included the declaration of the newString variable, and added the array element object to it, implicitly casting the array element object as a string. Otherwise the replace() functions could not be called.

于 2013-01-10T14:24:44.390 に答える