2016-07-01 20 views
-1

重複したエントリがあるかどうかGoogleスプレッドシートを検索するコードがあります。重複が見つかると、メッセージボックスがポップアップしてユーザーに伝えられます。 YESとNOボタンで複製を削除するかどうかをユーザーに尋ねます。GoogleスプレッドシートにカスタムmsgBoxボタンを作成

それはすべて正常に動作します。しかし、YESボタンとNOボタンを使用するのではなく、 "Delete Original"、 "Delete Duplicate"、 "Do not Delete(CANCEL)"の3つのボタンが必要です。

メッセージボックス内にカスタムボタンを作成する方法はありますか?または、少なくとも在庫のYES/NOボタンの名前を変更し、CANCELボタンを押しますか?

EDIT:.GSに

コード:

<!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> 

EDIT 2:

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); 
     } 
    } 
    } 
ここ

は、ダイアログボックスをポップアップ表示するために私のHTMLコードです

r esultStringが設定され、ダイアログが開き、HTMLは次の関数を呼び出します。

function passResultToHTML() 
{ 
    return resultString; 
} 
+0

ようこそ[so]。 [ツアー]とチェックアウト[質問]に従ってください。 –

答えて

1

悲しいことに、これは現在スタンドアロンスクリプトでは不可能です。しかし、あなたができることは、このスクリプトをコンテナバインド(AKAのアドオン)にすることです。代わりに、ブラウザを使用する次に、あなたは(SpreadsheetApp.getUiを使用することができます)。は、showModalDialog()

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

これは、ダイアログボックスなどのカスタムHTMLファイルをポップアップ表示することができます、あなたはにカスタム応答を設定することができますJavascriptであなたのボタン。

+0

ありがとう、エヴァ!私はshoModalDialog()を少し見ましたが、それほど遠くには達しませんでした。私はもう少し周りに遊んで何が起こるか見てみましょう。 – deusexmachina

+0

さて、私はダイアログボックス用のHTMLファイルを作成しました。重複した情報を含む文字列を渡そうとしています。しかし、私がサーバーを呼び出すと、それは未定義に戻ってきます。何かご意見は? google.script.run.withSuccessHandler(onSuccess).passResultToHTML(); 関数onSuccess(resultFromServer) { var resultInfo = document.getElementById( "myPara"); resultInfo.innerHTML = resultFromServer; } (passResultToHTML()は単に文字列を返します) – deusexmachina

+0

読みにくいですが、私はあなたの問題を見ると思います。 try: google.script.run.withSuccessHandler(onSuccess(result))。passResultToHTML(); ' 問題は、実際に返されたデータを取得していないようです。 – EvSunWoodard

関連する問題