0

Googleスクリプト、フォーム、スプレッドシートを使用してヘルプデスクシステムをプログラミングしています。クエリをフィルタリングするために、提出物はカテゴリに応じて異なるシートに配置されます。これは、FILTER関数を介して行われます。ただし、新しい送信が行われるたびに、フィルター関数は更新されません(CONTINUE関数を使用して他のセルをカバーします)。代わりに、FILTER関数のあるセルを選択し、crtl + shift+Eを入力する必要があります。

これを回避する方法はありますか?私は2つの方法を試しましたが、最初の方法はショートカットを入力する機能を探していましたが、これは可能ですか?

2つ目は、新しい送信が行われるたびに続行関数に自動的に入力することです。これは機能していますが、Googleスプレッドシートは指定された範囲を認識しません(続行関数にはCONTINUE(元のセル、行、列)が設定されています)識別されない元のセル。代わりに、手動でセルを選択し、まったく同じセル参照を書き直す必要があります。

あなたの助けに感謝します、あなたが私のコードを見る必要があるならば、尋ねてください:)

これは、セルに手動で関数を入力しようとする2番目のオプションのコードです。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var numEntry = ss.getSheetByName('Home').getRange("B8").getValue() + 2;
var cat = ss.getSheetByName('Software problem').getRange(numEntry, 4, 1, 9);
cat.getCell(1, 1).setValue('=CONTINUE(D2, '+(numEntry-1)+', 1)');
4

1 に答える 1

1

オプション1:スクリプトにキーストロークを自動的に入力させますか?apps-scriptではサポートされていません。

オプション2:フィルター範囲の行が表現された基準に一致する場合、フィルターに必要なCONTINUEは自動である必要があるため、プログラムでCONTINUEを挿入する必要はありません。他に何か問題があるので、この赤いニシンに巻き込まれないでください。

あなたは「グーグルシートは名前の付いた範囲を認識しない」と言っています-これがあなたの解決策になると思うので、それが何を意味するのか知りたいです。FILTERステートメント内で名前付き範囲を使用できます。FormInput!A1:Xまたはのような自由形式の範囲を使用することもできますFormInput!E1:E.

スクリプトを使用して名前付き範囲を操作しようとしている場合は、「removeNamedRange()はAppsScriptを介して作成された名前付き範囲のみを削除する」という既知の問題が発生している可能性があります。(これを回避するには、名前付き範囲を手動で削除してから、スクリプトからのみ作成します。)

これは、シート上のすべてのデータの名前付き範囲を作成するために使用する関数です。あなたはこれをあなたの状況に適応させることができます。(私はこれをFILTERの代わりにQUERY関数で使用します。代わりに、これを検討することをお勧めします。)

function setNamedRangeFromSheet(sheetName) {
  // Cannot remove a named range that was added via UI - http://code.google.com/p/google-apps-script-issues/issues/detail?id=1041
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  try { ss.removeNamedRange(sheetName) } catch (error) {};
  var sheet = ss.getSheetByName(sheetName);
  var range = sheet.getDataRange();
  ss.setNamedRange(sheetName,range);
}

FILTERを使用するには、sourceArray(名前付き範囲にすることができます)の長さと、使用するすべての条件配列を一致させる必要があります。sourceArray内に同じ長さの単一列基準の名前付き範囲をプログラムで作成するには、sourceArray範囲でgetNumRows()を使用します。

これで、フォームの送信時にトリガーされる送信処理機能内に、次のようなものがあります。(トラブルレポートは「FormInput」という1つのシートにまとめられていると思います。必要に応じて調整してください。)

...
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  try { ss.removeNamedRange("FormInput") } catch (error) {};
  var sheet = ss.getSheetByName("FormInput");
  var inputRange = sheet.getDataRange();
  ss.setNamedRange("FormInput",inputRange);

  try { ss.removeNamedRange("Criteria") } catch (error) {};
  var criteriaCol = 4; // Another guess, that Column E contains our criteria
  var criteriaRange = sheet.getRange(0,criteriaCol,inputRange.getNumRows(),1);
  ss.setNamedRange("Criteria",criteriaRange);
...

これで、「ソフトウェアの問題」シートのA1の内容に次の内容が含まれている必要があります。(「バグ」を探していると仮定します。):

=FILTER(FormInput,Criteria="Bug")

先ほど、制限のない範囲について説明しました。名前付き範囲を正当化するのに十分なデータ操作を行っていない場合は、次のようにフィルターを設定できます。新しい入力が入ったときにフィルターを変更する必要はありません。

=FILTER(FormInput!A1:X,FormInput!E1:E="Bug")
于 2012-12-05T04:58:17.573 に答える