2017-01-16 57 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

相關問題