在我的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,因此这些日期永远不会为空。 Cell nr。当没有事件添加到该槽时,3显示为空,但实际上在那里有一个CONTINUE-formula,用于从单元格A1继续importrange-formula。
我正在寻找一个脚本来自动隐藏单元格中的colums。 3不包含导入的数据。
不理解关于JavaScript的事情(但愿意学习),我试图结合现有脚本中的部分,但此时我无法理解这些代码......
答案 0 :(得分:5)
以下代码可以解决问题:
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);
}
请参阅我准备观看的示例文件:Hide columns based on cell value
答案 1 :(得分:1)
除了雅各布的答案之外,还可以在公式本身中编写一个过滤器,仅显示第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 != ''"))