7

Google スプレッドシート A では、TRANSPOSE 数式と IMPORTRANGE 数式を組み合わせて使用​​し、カレンダー スプレッドシート B からデータをインポートして、イベントの作業スケジュールを記入します。各日に 3 つのイベント スロットがあり、常に埋まっているとは限らないため、多くの古いコラムが表示されます。

テーブル レイアウト:

row1:  01-01-2013  01-01-2013  01-01-2013  02-01-2013
row2:  Event_ID    Event_ID    Event_ID    Event_ID
row3:  Event_name  Event_name  Event_name  Event_name

行 1 と 2 には自動生成された日付と event_ID が含まれているため、これらが空になることはありません。セル番号 そのスロットにイベントが追加されていない場合、3 は空を表示しますが、実際には、セル A1 から importrange-formula を続行するための CONTINUE-formula があります。

セル番号の列を自動的に非表示にするスクリプトを探しています。3 には、インポートされたデータが含まれていません。

JavaScript のことを理解していない (でも学びたい) ため、既存のスクリプトの断片を組み合わせようとしましたが、現時点ではこれらのコードを理解することができません...

4

2 に答える 2

8

次のコードはトリックを行います。

function onOpen() {
  // get active spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // create menu
  var menu = [{name: "Hide columns", functionName: "hideColumn"},
    {name: "Show all columns", functionName: "showColumn"}];

  // add to menu
  ss.addMenu("Check", menu);
}

function hideColumn() {
  // get active spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // get first sheet
  var sheet = ss.getSheets()[0];

  // get data
  var data = sheet.getDataRange();

  // get number of columns
  var lastCol = data.getLastColumn()+1;

  Logger.log(lastCol);

  // itterate through columns
  for(var i=1; i<lastCol; i++) {
     if(data.getCell(3, i).getValue() == '') {
        sheet.hideColumns(i);
     }
  }
}

function showColumn() {
  // get active spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // get first sheet
  var sheet = ss.getSheets()[0];

  // get data
  var data = sheet.getDataRange();

  // get number of columns
  var lastCol = data.getLastColumn();

  // show all columns
  sheet.showColumns(1, lastCol);
}
  1. ファイルを開いたときにメニューを作成します
  2. 最初のメニュー オプションで、行 3 を空にしてすべての列を非表示にします
  3. 2 番目のオプションは、すべての非表示の列を表示します

実際の動作を確認するために用意したサンプル ファイルを参照してください:セル値に基づいて列を非表示にする

于 2012-11-27T19:38:27.743 に答える
1

ジェイコブの答えに加えて、式自体にフィルターを書き込んで、行 3 のデータを含む列のみを表示することができます。たとえば、A1 の ImportRange 式が次の場合:

=ImportRange("key";"A1:Z3")

代わりにこれを使用できます:

=FILTER(ImportRange("key";"A1:Z3");LEN(ImportRange("key";"A3:Z3")))

またはこれは、ImportRange 呼び出しを 1 つだけ使用します。

=TRANSPOSE(QUERY(TRANSPOSE(ImportRange("key";"A1:Z3"));"select * where Col3 != ''"))

于 2012-11-27T21:08:24.807 に答える