2017-01-16 61 views
0

我想隐藏Google电子表格中特定工作表的所有行(spreasheet包含其他工作表)。要隐藏的行是由两个prompt命令(first_r和last_r)给出的两个整数之间的ID。Javascript HideRows(Google Sheet脚本编辑器)

当我点击按钮hide,我得到两个提示窗口,但是一个“成品脚本”,但行不隐藏。
这里是我的代码

function hide(){ 
var ui = SpreadsheetApp.getUi(); 
var first_r_str = ui.prompt('First row to hide'); 
var last_r_str = ui.prompt("Last row to hide"); 
var first_r = parseInt(first_r_str); 
var last_r = parseInt(last_r_str); 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName('MYSheet'); 

for (i = first_r; i <= last_r; i++){ 
sheet.hideRows(i); 
} 

function onOpen() { 
    var ui = SpreadsheetApp.getUi(); 
    ui.createMenu('Custom Menu') 
     .addItem('Hide Rows', 'hide') 
     .addToUi(); 
} 

我的代码是在脚本编辑器(从电子表格顶部的菜单,选择工具,然后脚本编辑器)

+0

[UI似乎并不具有hideRows方法(https://developers.google.com/apps-script/reference/base/ui)你想要得到的[表](HTTPS: //developers.google.com/apps-script/reference/spreadsheet/sheet)并隐藏行。 –

+0

谢谢@RobinGertenbach!我用“sheet.hideRows(i);”试过(并编辑了上面的代码),仍然得到相同的结果:行不隐藏。但是,如果我在'for'循环之前添加这些comamnds'sheet.hideRows(50); sheet.hideRows(51); sheet.hideRows(52); ' 然后这3行被隐藏。所以在我的'for'循环中似乎有些错误 – Enora

回答

1

下面的代码工作完全正常,你错过了获取文本值正确并且可以使用该范围。

来源Google Apps Script

function hide(){ 
var ui = SpreadsheetApp.getUi(); 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheets()[0]; 

var startRow = ui.prompt('enter first').getResponseText(); 
var endRow = ui.prompt('enter last').getResponseText(); 
var range = sheet.getRange(startRow, 1, endRow); 
ss.hideRow(range); 

} 

function onOpen() { 
    var ui = SpreadsheetApp.getUi(); 
    ui.createMenu('Custom Menu') 
     .addItem('Hide Rows', 'hide') 
     .addToUi(); 
} 
+0

这是误导,我认为主要的问题是Op没有使用getResponseText。 [hideRows(rowIndex)](https://developers.google.com/apps-script/reference/spreadsheet/sheet#hideRows(Integer))确实存在。 –

+0

出于某种原因,我必须使用这个,否则endRow是我为endRow + startRow输入的值(如果我输入5和90,那么第5到95行将被隐藏)。这修正了它:'var range = sheet.getRange(startRow,1,endRow-startRow + 1);' – Enora

1

由于MGA显示了他的榜样的主要问题是,你没有提取答案的文字。

既然你有一个连续的范围,你应该打一个电话hideRows而不是循环,这是更有效的。

function hide(){ 
    var ui = SpreadsheetApp.getUi(); 
    var first_r_str = ui.prompt('First row to hide').getResponseText(); 
    var last_r_str = ui.prompt("Last row to hide").getResponseText(); 
    var first_r = parseInt(first_r_str); 
    var last_r = parseInt(last_r_str); 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName('Sheet1'); 

    sheet.hideRows(first_r, last_r - first_r + 1); 
} 
+0

而不是新的答案,我想你可以请求编辑或发表评论,因为它不会添加任何值。 – MGA

相关问题