创建菜单,允许在Google文档脚本中隐藏或取消隐藏两个不同的列(如果它们的值等于0)



我有一个谷歌文档,在C列和D列都有公式。这是一张预测表,所以我知道我们手头有什么(C)和订单上有什么(D)。我想要一个在顶部打开菜单的脚本,这样我就可以快速隐藏或取消隐藏等于0且与D列相同的C列值。

我已经从这里的某个人那里提取了这个脚本来创建一个隐藏行的菜单,但我无法将其用于我的应用程序。我不确定单元格中的公式是否阻止函数查找0。

更新:我有第一个函数在工作。它隐藏C列中所有具有0的行。当一行被隐藏并更新为具有值时,函数不会取消隐藏它。第二个函数仍然不是全部取消隐藏。一旦我弄清楚了这两个,我就可以为D列构建同样的东西。下面是更新的脚本

 function onOpen() {
// get active spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
// create menu
var menu = [{name: "Show Only On Hand", functionName: "hideRow"},
  {name: "Show All", functionName: "showRow"}];
// add to menu
ss.addMenu("Filter", menu);
}
function hideRow() {
// get active spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
// get first sheet
var sheet = ss.getSheetByName('Inventory')
// get data
var data = sheet.getDataRange();
// get number of rows
var lastRow = data.getLastRow()+1;
Logger.log(lastRow);
// itterate through rows
for(var i=1; i<lastRow; i++) {
 if(data.getCell(i, 3).getValue() == 0) {
    sheet.hideRows(i);
 }
}
}
function showRow() {
// get active spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
// get first sheet
var sheet = ss.getSheets()[0];
// get data
var data = sheet.getDataRange();
// get number of rows
var lastRow = data.getLastRow();
// show all rows
sheet.showRows(lastRow, 1);
}

我不会为你做一切,因为这不是这个网站的目标,但我会指出脚本可能失败的地方,行:

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

它总是你使用的第一张纸吗?如果没有,可以使用方法getSheetByName()

for(var i=1; i<lastCol; i++) {

这在列之间迭代,你真的想要吗?如果是针对行,则需要更改行方法的getLastColumn

if(data.getCell(i, 3).getValue() == '0') {

同样,如果你想隐藏的是行,你必须重构getCell,因为i是行,3是列,你可以添加另一个条件,因为你也想要D列。此外,您可能需要记录data.getCell(),以检查0是否真的是字符串,如果它是数字,请删除单引号。

sheet.hideColumns(i);

同样,对于row,需要对其进行重构。

更新:

尽你所能:

var sheet = SpreadsheetApp.getActiveSheet();
var fullSheetRange = sheet.getRange(1,1,sheet.getMaxRows(), sheet.getMaxColumns() )  
sheet.unhideColumn( fullSheetRange );
sheet.unhideRow( fullSheetRange ) ;   

然后把它们藏起来。要对列执行此操作,只需复制并更改getCell()中指定的列C,就可以使用OR逻辑运算符在if中添加另一个条件。

非常感谢Kriggs帮我解决了这个问题。我肯定它有点笨重,但它非常适合我的需要。

function onOpen() {
// get active spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
// create menu
var menu = [{name: "Show Only On Hand", functionName: "hideRow"},
            {name: "Show Only On Order", functionName: "hideorder"}];
// add to menu
ss.addMenu("Filter", menu);
}
function hideRow() {
// get active spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
// get first sheet
var sheet = ss.getSheetByName('Inventory')
// get data
var data = sheet.getDataRange();
// get number of rows
var lastRow = data.getLastRow()+1;
Logger.log(lastRow);
var sheet = SpreadsheetApp.getActiveSheet();
var fullSheetRange = sheet.getRange(1,1,sheet.getMaxRows(), sheet.getMaxColumns() )  
sheet.unhideColumn( fullSheetRange );
sheet.unhideRow( fullSheetRange ) ;
  // itterate through rows
for(var i=1; i<lastRow; i++) {
 if(data.getCell(i, 3).getValue() == 0) {
    sheet.hideRows(i);
 }
}
}
function hideorder() {
// get active spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
// get first sheet
var sheet = ss.getSheetByName('Inventory');
// get data
var data = sheet.getDataRange();
// get number of rows
var lastRow = data.getLastRow()+1;
Logger.log(lastRow);
  var sheet = SpreadsheetApp.getActiveSheet();
var fullSheetRange = sheet.getRange(1,1,sheet.getMaxRows(), sheet.getMaxColumns() )  
sheet.unhideColumn( fullSheetRange );
sheet.unhideRow( fullSheetRange ) ;
// itterate through rows
for(var i=1; i<lastRow; i++) {
 if(data.getCell(i, 4).getValue() == 0) {
    sheet.hideRows(i);
 }
}
}

最新更新