7

在我的谷歌电子表格 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 显示为空,但实际上那里有一个 CONTINUE 公式可以从单元格 A1 继续导入范围公式。

我正在寻找一个脚本来自动隐藏单元格 nr 中的列。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. 第二个选项,显示所有隐藏的列

请参阅我准备观看的示例文件:基于单元格值隐藏列

于 2012-11-27T19:38:27.743 回答
1

除了 Jacob 的回答之外,还可以将过滤器写入公式本身,以仅显示第 3 行中包含数据的列。例如,如果您在 A1 中的 ImportRange 公式为:

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

你可以改用这个:

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

或者这个,它只使用一个 ImportRange 调用:

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

于 2012-11-27T21:08:24.807 回答