2017-09-04 57 views
0

我在Google App腳本中有以下代碼。如何在Google表格中調用外部腳本時添加ui輸入框?

function FixColumns(r) {//I thought you would want to make r an argument like this 
    var ss = SpreadsheetApp.openById("ID"); 
    var allsheets = ss.getSheets(); 
    for (var s in allsheets){ 
     var sheet=allsheets[s]; 
     if(s > r) { 
     var maxColumns = sheet.getMaxColumns(); 
     var lastColumn = sheet.getLastColumn(); 
     if (maxColumns-lastColumn != 0){ 
     sheet.setColumnWidth(1, 145); 
     sheet.deleteColumns(lastColumn+1, maxColumns-lastColumn); 
      } 
     } 
     } 
    } 

function doGet(e) { 
     return FixColumns(); 
    } 

而在我的電子表格中,我提取腳本以僅在服務器端運行它。

function FixColumnsEx() { 
    UrlFetchApp.fetch("URL"); 
    } 

但我希望能夠定義的「R」變量,最好當我在電子表格中運行該腳本時出現的UI輸入框。我試圖搗亂UiApp,但我只是完成了難倒。 我知道如何去做客戶端。

var response = ui.prompt('Start on sheet:'); 
var r = response.getResponseText(); 
var r = +r; 

但這拋出,當我把它放在上面,因爲它的服務器片面的FixColumns功能的情況下錯誤。

謝謝。

回答

0

這是整個事情。

fixcolumn.gs:

function onOpen()//Run this once from the script editor to create a menu 
{ 
    SpreadsheetApp.getUi().createMenu('My Tools') 
    .addItem('Show Dialog', 'showDialog') 
} 
function FixColumns(r) 
{ 
    var ss = SpreadsheetApp.openById("ID"); 
    var allsheets = ss.getSheets(); 
    for (var s in allsheets){ 
    var sheet=allsheets[s]; 
    if(s > r) { 
     var maxColumns = sheet.getMaxColumns(); 
     var lastColumn = sheet.getLastColumn(); 
     if (maxColumns-lastColumn != 0){ 
     sheet.setColumnWidth(1, 145); 
     sheet.deleteColumns(lastColumn+1, maxColumns-lastColumn); 
     } 
    } 
    } 
} 
//Run this function to get everything going. 
function showDialog() { 
    var ui=HtmlService.createHtmlOutputFromFile('fixcolumn') 
    SpreadsheetApp.getUi().showModelessDialog(ui, 'Fix Columns') 
} 

fixcolumn.html

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script> 
    function fixAColumn() 
    { 
     var r=$('#txt').val(); 
     if(r) 
     { 
      google.script.run.FixColumns(r); 
     } 
     } 
    </script> 
    </head> 
    <body> 
    <label>Column Number:<input type="text" id="txt" /></label> 
    <input type="button" value="Fix Column" onClick="fixAColumn();" /> 
    </body> 
</html> 

下面是它看起來它運行時,如:

enter image description here

這裏是我以前只是版本調試我的東西。我沒有調試任何代碼。我只是想確保我可以順利回顧gs代碼,並確保一切正常。

function NotonOpen()//Run this once from the script editor create a menu 
{ 
    SpreadsheetApp.getUi().createMenu('My Tools') 
    .addItem('Show Dialog', 'showDialog') 
} 

function FixColumns(r) 
{ 
    return true; 
    var ss = SpreadsheetApp.openById("ID"); 
    var allsheets = ss.getSheets(); 
    for (var s in allsheets){ 
    var sheet=allsheets[s]; 
    if(s > r) { 
     var maxColumns = sheet.getMaxColumns(); 
     var lastColumn = sheet.getLastColumn(); 
     if (maxColumns-lastColumn != 0){ 
     sheet.setColumnWidth(1, 145); 
     sheet.deleteColumns(lastColumn+1, maxColumns-lastColumn); 
     } 
    } 
    } 

} 

function showDialog() { 
    var ui=HtmlService.createHtmlOutputFromFile('fixcolumn') 
    SpreadsheetApp.getUi().showModelessDialog(ui, 'Fix Columns') 
} 

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script> 
    function fixAColumn() 
    { 
     $('#txt').css('background-color','#ffff00'); 
     var r=$('#txt').val(); 
     if(r) 
     { 
      google.script.run 
      .withSuccessHandler(clrYellow) 
      .FixColumns(r); 
     } 
     } 
     function clrYellow() 
     { 
     $('#txt').css('background-color','#ffffff'); 
     } 
     console.log('My code'); 
    </script> 
    </head> 
    <body> 
    <label>Column Number:<input type="text" id="txt" /></label> 
    <input type="button" value="Fix Column" onClick="fixAColumn();" /> 
    </body> 
</html> 

你也可以用SpreadsheetApp.getUi()。prompt()來做到這一點。但是,這是一件好事,需要學習和適應,因爲如果你想創建一個web應用程序,你可以稍後使用它。

+0

對不起,但我該如何準確地使用showDialog?我試過這樣的事情,但並不完全確定,因爲當我在電子表格中運行腳本時沒有任何反應。 –

+0

您運行對話框。在文本框中輸入你的r值並點擊Fix Column按鈕,它會轉到JavaScript函數fixAColumn,它從文本框中收集r值並調用fixColumns(r)函數。我假設你可以使用fixColumns()的參數。它不會返回任何內容,所以沒有withSuccessHandler。我剛剛編輯了你的問題,以反映我的建議。如果那對你不合適,我會很樂意將它改回來。 – Cooper

+0

對不起,如果我不夠清楚,我的意思是在哪裏/如何運行它。 如果我從GAS項目本身運行它,並且如果將它包含在doGet中,則會發生錯誤。 –

相關問題