首页 文章

使用Apps脚本网络应用访问Google表格

提问于
浏览
1

我有一个日常工作日志,供我修理的电器的各个客户使用 . 此工作日志采用具有多个工作表的Google电子表格的形式,其中每个工作表都分配给特定的常规客户 . 我通过基于Google Apps脚本的手机,通过基本网络应用程序记录当前日期,工作设备和工作完成情况 .

在我的开发环境中,我使用模态对话框“测试”弹出框,它完美地工作 . 我从下拉列表中选择客户,在文本字段中输入信息并单击“保存”,相关客户的工作表将填充数据 . 但是,当我发布或部署应用程序时,尽管从列表中选择了任何客户,但只会填充最左侧的工作表(sheet1) . 不知何故,通过URL访问“服务器”电子表格会使“google.script.run”调用失效 . 有没有人有任何想法如何解决这个问题 . 在此提前感谢您提供任何帮助 .

**Index.html**

<!DOCTYPE html>
<html lang='en'>
<head>

<base target="_top">
  <meta charset="utf-8">
  <title></title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, 
   maximum-scale=1.0">    
</head> 
<body>
<form>  
<h1>Daily Work Record</h1>    

<p><label class="question" for="customer">Customer: </label>
            <select name="customer" id="customer" onchange    
="customerSelect(this)"/>

                <option></option>
                <option value="1">Customer A</option>
                <option value="2">Customer B</option>
                <option value="3">Customer C</option>
            </select></p>                   


<p><label class="question" for="equipment">Equipment: </label>       
             <select name="equipment" id="equipment"> 
                <option>Toaster</option>
                <option>Mixer</option>
                <option>Blender</option>
                <option>Slicer</option>                                             
                <option>Other</option>                              
              </select></p>                               

<p><label class="question" for="work">Work Done: </label>
<input type="text" name="work" id="work" placeholder="enter work carried 
 out" size="25" /></p>


 <input type="button" id="button" value="Save"
    onclick="google.script.run
       .withSuccessHandler(DataSaved)
        .itemAdd(this.parentNode)"/>             

</form> 
<script>    

    function customerSelect(menu){      
          if(menu.value=='1'){  
           google.script.run.sheetOne();   

        } else if(menu.value=='2'){
           google.script.run.sheetTwo();

        } else if(menu.value=='3'){
           google.script.run.sheetThree();             

        } else return false; 

        }   

</script>    

<div id="Message"></div>

<script>
       function DataSaved(){
       document.getElementById('Message').innerHTML="<span class='save'>Data 
       Saved</span>";
       return;
       }

</script>      
</body>

**Code.gs**

function onOpen() {
   var ui = SpreadsheetApp.getUi();
   ui.createMenu('Test').addItem('PopUp', 'show').addToUi();
}

function show() {
   var html = HtmlService.createHtmlOutputFromFile('Index')
             .setSandboxMode(HtmlService.SandboxMode.IFRAME)  
             .setHeight(800)
             .setWidth(800)
   SpreadsheetApp.getUi().showModalDialog(html, 'Enter Job Details');  
}  

function doGet() {
    var html = HtmlService.createHtmlOutputFromFile('Index')
              .setSandboxMode(HtmlService.SandboxMode.IFRAME);
              return html;  
}

function sheetOne() {    
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("Customer A");
    sheet.getRange("A1").activate();//used instead of setActiveSheet
    return true;
}

function sheetTwo() {    
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName("Customer B");
   sheet.getRange("A1").activate(); 
   return true;
}

function sheetThree() {    
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName("Customer C");
   sheet.getRange("A1").activate(); 
   return true;
}

function itemAdd(form) {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = SpreadsheetApp.getActiveSheet();
   sheet.appendRow([Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd"), 
    form.equipment, form.work]);
return true;
}

1 回答

  • 0

    我会使用不同的策略 . 我不会在SELECT标签中需要 customerSelect() 函数 .

    <select name="customer" id="customer" />
    

    您也不需要任何功能:

    • sheetOne

    • sheetTwo

    • sheetThree

    更改 itemAdd() 函数以按名称获取工作表选项卡

    function itemAdd(form) {
       var ss = SpreadsheetApp.getActiveSpreadsheet();
    
       var sheetToValue = {//Object literal mapping user answer to sheet tab name
         "Customer A":"Customer A",
         "Customer B":"Customer B",
         "Customer C":"Customer C"
       }
    
       var whichSheetToGet = sheetToValue[form.customer];
    
       var sheet = ss.getSheetByName(whichSheetToGet);//Get sheet tab
    
       sheet.appendRow([Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd"), 
        form.equipment, form.work]);
    
      return true;
    }
    

相关问题