2016-07-01 173 views
-1

我有搜索Google电子表格的任何重复条目的代码。当找到重复项时,会弹出一个消息框告诉用户。它询问用户他/她是否想用YES和NO按钮删除副本。在Google电子表格中创建自定义msgBox按钮

这一切工作正常。但是,理想情况下,我不想使用YES和NO按钮,而是希望有三个按钮:“删除原始”,“删除重复”和“不要删除(或取消)”,以便用户可以选择要删除的项目。

有什么方法可以在消息框中创建自定义按钮吗?或者,至少要更改股票的名称是/否按钮,并有一个取消按钮?

编辑:

这是我的HTML代码,弹出一个对话框:

<!DOCTYPE html> 
<html> 
    <head> 
    <base target="_top"> 
    <script> 
    function onSuccess(result) 
    { 
     var resultInfo = document.getElementById("myPara"); 

     resultInfo.innerHTML = result; 
    } 

    google.script.run.withSuccessHandler(onSuccess(result)).passResultToHTML(); 
    </script> 
    </head> 
    <body> 
    <p id = "myPara">This is the default text.</p> 
    <div id = "myDiv"></div> 

    <button onclick=google.script.run.deleteOriginalTitle()>Delete Original</button> 
    <button onclick=google.script.run.deleteDuplicateTitle()>Delete Duplicate</button> 
    </body> 
</html> 

编辑2:

代码在.GS:

function findDuplicateTitles() 
{ 
    var startRow = Browser.inputBox("At which row would you like to start the search?\\n\\n"); 
    var output = HtmlService.createHtmlOutputFromFile("scriptTestingHTML").setSandboxMode(HtmlService.SandboxMode.IFRAME); 

    for (var x = (startRow - 1); x < titleColumnArray.length; x++) 
    { 
    currentTitle = titleColumnArray[x][0]; 
    var y = x + 1; 

    for (y; y < titleColumnArray.length; y++) 
    { 
     if (titleColumnArray[y][0] == currentTitle) 
     { 
     currentTitleValues = sheet.getRange(x + 1, 1, 1, 8).getDisplayValues() 
     duplicateFound = true; 
     duplicateCount++; 
     duplicateRowNum = y + 1; 
     duplicateTitleValues = sheet.getRange(duplicateRowNum, 1, 1, 8).getDisplayValues(); 

     //resultString is a global String 
     resultString = "I found a duplicate entry \\n\\n" + 
            "Original Title on Row: " + (x + 1) + "\\n\\n" + 
            currentTitleValues[0][0] + " | " + 
            currentTitleValues[0][1] + " | " + 
            currentTitleValues[0][2] + " | " + 
            currentTitleValues[0][3] + " | " + 
            currentTitleValues[0][4] + " | " + 
            currentTitleValues[0][5] + " | " + 
            currentTitleValues[0][6] + " | " + 
            currentTitleValues[0][7] + " | " + 
            "\\n\\n" + 
            "Duplicate Title on Row: " + duplicateRowNum + 
            "\\n\\n" + 
            duplicateTitleValues[0][0] + " | " + 
            duplicateTitleValues[0][1] + " | " + 
            duplicateTitleValues[0][2] + " | " + 
            duplicateTitleValues[0][3] + " | " + 
            duplicateTitleValues[0][4] + " | " + 
            duplicateTitleValues[0][5] + " | " + 
            duplicateTitleValues[0][6] + " | " + 
            duplicateTitleValues[0][7] + " | " + 
            "\\n\\nDelete this duplicate? Or delete the original?"; 


     Logger.log(resultString); 
     SpreadsheetApp.getUi().showModalDialog(output, "Duplicate Entry Found"); 

     Utilities.sleep(5000); 
     } 
    } 
    } 

后r esultString设置和打开的对话框中,HTML调用打开了该功能:

function passResultToHTML() 
{ 
    return resultString; 
} 
+0

欢迎来到[so]。请按照[旅游]和结帐[问]。 –

回答

1

可悲的是,这是目前不可能在一个独立的脚本。然而,你可以做的是让这个脚本容器绑定(又名附加组件)。然后,而不是使用浏览器,你可以用用SpreadsheetApp.getUi()。在showModalDialog()

https://developers.google.com/apps-script/reference/base/ui#showmodaldialoguserinterface-title

这将允许您弹出自定义的HTML文件作为一个对话框,您可以设置自定义响应你的按钮与Javascript。

+0

谢谢,Ev!我稍微看了一下shoModalDialog(),但并没有走得很远。我会再玩一遍,看看会发生什么。 – deusexmachina

+0

好吧,我为对话框创建了一个HTML文件,并且我试图将包含重复信息的字符串传递给它。但是当我为它调用服务器时,它会回到未定义状态。有什么想法吗? google.script.run.withSuccessHandler(onSuccess).passResultToHTML(); function onSuccess(resultFromServer) var resultInfo = document.getElementById(“myPara”); resultInfo.innerHTML = resultFromServer; } (passResultToHTML()只是返回字符串。) – deusexmachina

+0

这有点难以阅读,但我认为我看到了您的问题。 尝试: 'google.script.run.withSuccessHandler(onSuccess(result))。passResultToHTML(); ' 这个问题似乎是,你实际上并没有拿起返回的数据。 – EvSunWoodard