主頁 > 企業開發 > 將Google表格獲取到可更新的JSON腳本以只需要標題行

將Google表格獲取到可更新的JSON腳本以只需要標題行

2021-12-13 17:21:09 企業開發

我繼承了一個 Google 作業表腳本,該腳本從側邊欄中的 HTML 表單中選擇的作業表生成實時可更新的 JSON 鏈接

在專案開始時,唯一可能存在的資料是元素和連接表上的標題(它們總是存在),隨著專案的成熟,資料行被添加到一個或兩個表中

我的問題是生成 json 的腳本要求至少存在兩行資料(在兩個作業表上)標題行和資料行

當您運行腳本時,您會看到一個帶有鏈接的彈出視窗,然后您單擊該鏈接并打開一個包含 JSON 資料的新瀏覽器選項卡。在這一步我收到錯誤 將 Google 表格獲取到可更新的 JSON 腳本以只需要標題行

161gsmodual是properties.setProperty("settings", newProperties);

function setExportProperties(newProperties){
  var properties = PropertiesService.getDocumentProperties();  
  var prop = properties.getProperty("settings");  
  properties.setProperty("settings", newProperties);
}

但這是292HTML模塊在線設定

 function setProperties(){
    return google.script.run.setExportProperties(generateProperties());
 }

我已經嘗試了幾個小時來弄清楚如何修改腳本,所以只有標題行是必要的,但我還沒有做到這一點

這里有很多代碼,在我看來太多了,無法發布,但代碼中有詳細記錄,我認為知道自己在做什么的人可以很容易地弄清楚需要做什么

從添加的選單中單擊Open Sidebar以進入表單。我已經提前設定了 將 Google 表格獲取到可更新的 JSON 腳本以只需要標題行

預先感謝您對此的幫助

gs代碼

//===================================================================================================================
//ExportJson Code
//===================================================================================================================
//Displays an HTML-service dialog in Google Sheets that contains client-side JavaScript code for the Google Picker API.
function showForm() {
  var html = HtmlService.createHtmlOutputFromFile('Sidebar.html')
      .setTitle('Export Sheet As JSON Data')
      .setWidth(300)
      .setHeight(480)
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  
  SpreadsheetApp.getUi().showSidebar(html);
}

//function showData(elements,connections,headerrow,datarow,prefix,separator){
function showData(sheets,settings){
  //Sheets Array
  var elements=sheets[0];
  var connections=sheets[1];
  
  //Settings Array
  var emptycells=settings[0];
  var headerrow=settings[1];
  var datarow=settings[2];
  var prefix=settings[3];
  var separator=settings[4];
  var keepignore=settings[5];
  var cellarrays=settings[6];
  var separator2=settings[7];
  var columnignore=settings[8];
  var colprefix=settings[9];  
  
  var sheetid=SpreadsheetApp.getActiveSpreadsheet().getId();  
  
  if(elements=='' && connections==''){
    Browser.msgBox('Select any one or both sheets and run again!');
    return;
  }
  
  if(headerrow=='' || headerrow<=0){
    Browser.msgBox('Please enter row number of your data header, it should be an integer value greater than 0');
    return;
  }

  if(datarow=='' || datarow<=0){
    Browser.msgBox('Please enter row number where data starts, it should be an integer value greater than 0');
    return;
  }
  
  if(keepignore==true){
    if(prefix=='' && separator!=''){
      Browser.msgBox('Please Column Prefix And Array Separator');
      return;
    }
  }
  
  if(columnignore==true){
    if(colprefix=='' || colprefix==false){
      Browser.msgBox('Please Enter Column Prefix');
      return;
    }
  }  
  
  if(cellarrays==true){
    if(separator2=='' || separator2==false){
      Browser.msgBox('Please Enter Array Separator');
      return;
    }
  }      
  
  if(elements=='' && connections==''){
    Browser.msgBox('Select sheet(s)!');
    return;
  }
  
  var webappurl='https://script.google.com/macros/s/AKfycbwn.../exec';
  webappurl=webappurl   '?id='   sheetid;
  
  if(elements!='')
    webappurl=webappurl   '&sheet1='   elements;
  else
    webappurl=webappurl   '&sheet1='   '';
  
  if(connections!='')
    webappurl=webappurl   '&sheet2='   connections;
  else
    webappurl=webappurl   '&sheet2='   '';
    
  webappurl=webappurl   '&header='   headerrow;  
  webappurl=webappurl   '&startrow='   datarow;  
  
  if(keepignore==true){
    if(prefix=='' || separator==''){
      webappurl=webappurl   '&prefix='   'false';
      webappurl=webappurl   '&separator='   'false';
    }
    else{
      webappurl=webappurl   '&prefix='   prefix;
      webappurl=webappurl   '&separator='   separator;
    }
  }
  else{
      webappurl=webappurl   '&prefix='   'false';
      webappurl=webappurl   '&separator='   'false';  
  }
  
  if(emptycells==true)
    webappurl=webappurl   '&emptycells='   'yes';
  else
    webappurl=webappurl   '&emptycells='   'no';
    
  if(cellarrays==true){
    webappurl=webappurl   '&cellarrays='   'yes';
    webappurl=webappurl   '&separator2='   separator2;
  }
  else{
    webappurl=webappurl   '&cellarrays='   'no';   
    webappurl=webappurl   '&separator2='   'no';
  }
  
  if(columnignore==true){
    webappurl=webappurl   '&columnignore='   'yes';
    webappurl=webappurl   '&colprefix='   colprefix;
  }
  else{
    webappurl=webappurl   '&columnignore='   'no';   
    webappurl=webappurl   '&colprefix='   'no';
  }  
  

  //Workflows.setCurrentMapSource("");
  var kumuurl='Workflows.setCurrentMapSource("'  webappurl  '")';
  openUrl(webappurl,kumuurl);
} 

//===================================================================================================================
function openUrl( url,kumuurl ){
  var html = HtmlService.createHtmlOutput('<html>'
  // '<script>'
  // 'window.close = function(){window.setTimeout(function(){google.script.host.close()},9)};'
  // 'var a = document.createElement("a"); a.href="' url '"; a.target="_blank";'
  // 'if(document.createEvent){'
  // '  var event=document.createEvent("MouseEvents");'
  // '  if(navigator.userAgent.toLowerCase().indexOf("firefox")>-1){window.document.body.append(a)}'                          
  // '  event.initEvent("click",true,true); a.dispatchEvent(event);'
  // '}else{ a.click() }'
  // 'close();'
  // '</script>'
  // Offer URL as clickable link in case above code fails.
   '<body style="word-break:break-word;font-family:sans-serif;"><a href="' url '" target="_blank" onclick="window.close()">'   kumuurl   '</a></body>'
   '<script>google.script.host.setHeight(150);google.script.host.setWidth(600)</script>'
   '</html>')
  .setWidth(600).setHeight(1);
  SpreadsheetApp.getUi().showModalDialog( html, "Click the Link below to get the LIVE Link" );
}

//===================================================================================================================
function setExportProperties(newProperties){
  var properties = PropertiesService.getDocumentProperties();  
  var prop = properties.getProperty("settings");  
  properties.setProperty("settings", newProperties);
}

//===================================================================================================================
function getExportProperties(){
  var props = PropertiesService.getDocumentProperties();
  var prop = props.getProperty("settings");
  //Logger.log(prop);
  return prop;
}

//===================================================================================================================
function getSheetList(){
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  
  var sheets=ss.getSheets();
  
  var sheetnames=[];
  sheetnames[0]="|"
  for(var i=0;i<sheets.length;i  ){
    var sh=sheets[i];
    sheetnames[i 1]=sh.getName() "|" sh.getName();
  }
  
  return sheetnames;
}


//===================================================================================================================
//LiveJson Code
//===================================================================================================================
function doGet(request) {
  // Get request params.
  var sheetKey   = request.parameters.id;
  var sheetName1 = request.parameters.sheet1;
  var sheetName2 = request.parameters.sheet2;
  var callback   = request.parameters.callback;
  var headerRow  = request.parameters.header;
  var startRow   = request.parameters.startrow;

  var prefix     = request.parameters.prefix;
  var separator  = request.parameters.separator;
  var emptycells = request.parameters.emptycells;
  var cellarrays = request.parameters.cellarrays;
  var separator2 = request.parameters.separator2;
  var columnignore = request.parameters.columnignore;
  var colprefix  = request.parameters.colprefix;
  
  // Parse the spreadsheet.
  var spreadsheet = SpreadsheetApp.openById(sheetKey); //.getActiveSpreadsheet();
  
  if(sheetName1!=''){    
    var keys = getHeaderRowKeys_(spreadsheet, sheetName1, headerRow, columnignore, colprefix);
    var data1 = readData_(spreadsheet, sheetName1, headerRow, keys, startRow,prefix,separator,emptycells,cellarrays,separator2,columnignore, colprefix);      
  }
  
  if(sheetName2!=''){    
    var keys = getHeaderRowKeys_(spreadsheet, sheetName2, headerRow, columnignore, colprefix);
    var data2 = readData_(spreadsheet, sheetName2,headerRow, keys, startRow,prefix,separator,emptycells,cellarrays,separator2,columnignore, colprefix);    
  }  
  
  // Write and return the response.
  if(sheetName1!='' && sheetName2!=''){    
    var response = JSON.stringify({ elements: data1,connections: data2 },null,'\t');  
  }
  else if(sheetName1!='' && sheetName2==''){
    var response = JSON.stringify({ elements: data1 },null,'\t');  
  }
  else if(sheetName1=='' && sheetName2!=''){
    var response = JSON.stringify({ connections: data2 },null,'\t');  
  }

  var output = ContentService.createTextOutput();
    
  if(callback == undefined){
    // Serve as JSON
    output.setContent(response).setMimeType(ContentService.MimeType.JSON);
  } 
  else{
    // Serve as JSONP
    output.setContent(callback   "("   response   ")").setMimeType(ContentService.MimeType.JAVASCRIPT);
  }  
  
  //output.setContent(callback   "("   response   ")").setMimeType(ContentService.MimeType.JAVASCRIPT);
  
  return output;
}

//===================================================================================================================
function readData_(spreadsheet, sheetName, headerRow, properties, startRowNum, prefix,separator,emptycells,cellarrays,separator2,columnignore, colprefix) {
  if (typeof properties == "undefined") {
    properties = getHeaderRowKeys_(spreadsheet, sheetName, headerRow, columnignore, colprefix);
  }
  
  var rows = getDataRows_(spreadsheet, sheetName,headerRow, startRowNum,columnignore, colprefix);
  var data = [];

  if(emptycells=='yes'){//Ignore Empty Cells
    for (var i = 0; i<rows.length; i  ) {
    var row = rows[i];
    var record = {};
            
    for (var p in properties) {      
      if(row[p]!=''){
        var keys=properties
        record=updateRecord(prefix,keys,p,row,record,prefix,separator,cellarrays,separator2)
        //properties[p]=properties[p].replace(prefix,"")
      }
      
    }    
            
    data.push(record);
    }  
  }
  else{//Inclue Empty Cells
    for (var i = 0; i<rows.length; i  ) {
    var row = rows[i];
    var record = {};
            
    for (var p in properties) {      
      var keys=properties
      record=updateRecord(prefix,keys,p,row,record,prefix,separator,cellarrays,separator2)      
    }    
            
    data.push(record);
    }  
  }    
  
  return data;
}

//===================================================================================================================
function updateRecord(prefix,properties,p,row,record,prefix,separator,cellarrays,separator2){

  if(prefix=='false'){
    if(cellarrays=='yes'){//Split Cell Values as arrays if contains comma
      if(row[p].toString().indexOf(separator2)>=0){//Convert Cell As Array Only If Contains Comma
        record[properties[p]]=row[p].toString().split(separator2);
      }
      else{
        record[properties[p]]=row[p];
      }
    }
    else{
      record[properties[p]]=row[p];
    }
  }
  else{//Split Entire Column as array if start with a prefix
    var key=properties[p];
    if(key.indexOf(prefix)==0){                
      
      key=key.replace(prefix,"")
      
      if(row[p].toString().indexOf(separator)>=0)
        record[key]=row[p].toString().split(separator);
      else if(row[p].toString().indexOf(separator2)>=0)
        if(cellarrays='yes')
          record[key]=row[p].toString().split(separator2);
        else
          record[key]=row[p];
      else
        record[key]=row[p];
              
    }
    else{
      if(cellarrays=='yes'){//Split Cell Values as arrays if contains separator2
        if(row[p].toString().indexOf(separator2)>=0){//Convert Cell As Array Only If Contains separator2
          record[key]=row[p].toString().split(separator2);
        }
        else{
          record[key]=row[p];
        }
      }
      else{
        record[key]=row[p];
      }      
      
    }      
  }
  
  return record;
}

//===================================================================================================================
function getDataRows_(spreadsheet, sheetName, headerRow, startRowNum, columnignore, colprefix) {  
  var properties = getHeaderRow_2(spreadsheet, sheetName, headerRow, columnignore, colprefix);   
  
  if (typeof startRowNum == "undefined") startRowNum = 2;  
  
  var sheet = spreadsheet.getSheetByName(sheetName);

  var values=sheet.getRange(startRowNum, 1, sheet.getLastRow()-1, sheet.getLastColumn()).getValues();
  
  if(columnignore=='yes'){
    var data=[];  
    for(var i=0;i<values.length;i  ){
      data[i]=[];
      var k=0;
      for(var j=0;j<properties.length;j  ){
        if(properties[j].toString().indexOf(colprefix)!=0){        
          data[i][k]=values[i][j];
          k  ;
        }
      }
    }
    
    return data;
  }
  else  
    return values;
}

//======================================================================================================================================================================================
function getHeaderRowKeys_(spreadsheet, sheetName, rowNum, columnignore, colprefix) {
  if (typeof rowNum == "undefined") rowNum = 1;  
    
  var header=getHeaderRow_(spreadsheet, sheetName, rowNum, columnignore, colprefix);
        
  return header;
}

//===================================================================================================================
function getHeaderRow_(spreadsheet, sheetName, rowNum, columnignore, colprefix) {
  var sheet = spreadsheet.getSheetByName(sheetName);
  var values=sheet.getRange(rowNum, 1, 1, sheet.getLastColumn()).getValues();
  
  if(columnignore=='yes'){
  var data=[];  
    for(var i=0;i<values.length;i  ){
      data[i]=[];
      var k=0;
      for(var j=0;j<values[0].length;j  ){
        if(values[i][j].toString().indexOf(colprefix)!=0){        
          data[i][k]=values[i][j];
          k  ;
        }
      }
    }
    return data[0];
  }
  else
    return values[0];
}

//===================================================================================================================
function getHeaderRow_2(spreadsheet, sheetName, rowNum, columnignore, colprefix) {
  var sheet = spreadsheet.getSheetByName(sheetName);
  var values=sheet.getRange(rowNum, 1, 1, sheet.getLastColumn()).getValues();
  
  return values[0];
}

HTML 代碼(一些 CSS 洗掉以免超過字符限制)

<!DOCTYPE html>
<html>
  <head>
  <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">
  <base target="_top">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
  
  <base target="_top">
  </head>

<body>
  <body onl oad="populate()"></body>
  
  <div >
      
      <h2 align="center"  style="font-family:Open Sans;"> Select Sheets</h2>   
      <div >
      <div >
        <br>
       <center> <label  for="elmn">Select Elements Sheet</label>
        <select id="elmn" name="elmn" style="width: 180px;" ></select>
        <br>
        <label for="conn">Select Connections Sheet</label>        
        <select id="conn" name="conn" style="width: 180px;" ></select></center>
       </div>
      </div>
      
    <h2 align="center" style="font-family:Open Sans;">General Data</h2>
      <div >
      <div id="new-div">
                
       <center>Header Row:<br>
        <input type="text" name="Header Row" value="1" id="headerrow">
        <br><br>

        Start Data Row:<br>
        <input type="text" name="Data Row" value="2" id="datarow"> </center>    
     </div>   
      </div>
   

      <h2 align="center"  style="font-family:Open Sans;">JSON Settings</h2>
     

      <div  >
        <!--<div ></div>-->
             
        <button  value="Run" onclick="get_form_values()">View</button>        
        <input type="reset" value="Reset" onclick="enableTextBox()">
        
      </div>      
      
  </div>
<script> 
 var elements = "";
 var connections = ""; 
 var emptycells = ""; 
 var headerrow = ""; 
 var datarow = ""; 
 var prefix = ""; 
 var separator = ""; 
 var keepignore = ""; 
 var cellarrays = "";
 var separator2 = "";
 var columnignore="";
 var colprefix="";
 
 var elementsIndex = "";
 var elementsValue = "";
 var connectionsIndex = "";
 var connectionsValue = ""; 

 function populate(){
   var elementlist=document.getElementById('elmn');
   var connectlist=document.getElementById('conn');
   
   //document.getElementById("elmn").innerHTML = "";
   //document.getElementById("conn").innerHTML = "";
   
   function onSuccess(optionarray) {
     for(var option in optionarray){
       var pair=optionarray[option].split("|")
       
       var newoption=document.createElement("Option");
       newoption.value=pair[0];
       newoption.innerHTML=pair[1];
       elementlist.options.add(newoption);       
       
       var newoption=document.createElement("Option");
       newoption.value=pair[0];
       newoption.innerHTML=pair[1];                     
       connectlist.options.add(newoption);       
     }
     elementlist.selectedIndex=elementsIndex;
     connectlist.selectedIndex=connectionsIndex;     
   }   
   
   //console.log(document.getElementById('elmn').options); 
   google.script.run.withSuccessHandler(onSuccess).getSheetList();
   enableTextBox();
 }

 
 function get_form_values(){          
     //...
     var e = document.getElementById('elmn');
     
     elementsValue = e.options[e.selectedIndex].value;
     elements = e.options[e.selectedIndex].text;
     elementsIndex = e.options[e.selectedIndex].index;
     //...
      //...
     var c = document.getElementById('conn');
     
     connectionsValue = c.options[c.selectedIndex].value;
     connections = c.options[c.selectedIndex].text;
     connectionsIndex = c.options[c.selectedIndex].index;
     //...          

     emptycells=document.getElementById('emptycells').checked;
     headerrow=document.getElementById('headerrow').value;
     datarow=document.getElementById('datarow').value;
     prefix=document.getElementById('prefix').value;
     separator=document.getElementById('separator').value;
     keepignore=document.getElementById('keepignore').checked;     
     
     cellarrays=document.getElementById('cellarrays').checked;
     separator2=document.getElementById('separator2').value;     
     
     columnignore=document.getElementById('columnignore').checked;
     colprefix=document.getElementById('colprefix').value;
     
     var sheets=[];
     sheets[0]=elements;
     sheets[1]=connections;
     
     var settings=[];     
     settings[0]=emptycells;
     settings[1]=headerrow;
     settings[2]=datarow;
     settings[3]=prefix;
     settings[4]=separator;
     settings[5]=keepignore;
     settings[6]=cellarrays;
     settings[7]=separator2;
     settings[8]=columnignore;
     settings[9]=colprefix;
     
     setProperties();
     
     google.script.run.showData(sheets,settings);   
 }
 

 function setProperties(){
    return google.script.run.setExportProperties(generateProperties());
 }

 function generateProperties(){
    var properties = {
      //General settings
      "emptycells" : emptycells,
      "headerrow" : headerrow,
      "datarow" : datarow,
      "prefix" : prefix,
      "separator" : separator,
      "keepignore" : keepignore,
      "cellarrays" : cellarrays,
      "columnignore" : columnignore,
      "colprefix" : colprefix,
      "separator2" : separator2,
      "elements" : elements,
      "connections" : connections,      
      "elementsIndex" : elementsIndex,
      "elementsValue": elementsValue,
      "connectionsIndex" : connectionsIndex,
      "connectionsValue": connectionsValue,      
    };
    
    return JSON.stringify(properties);
 }
 //Actually sets the local properties based on stored settings.

 function updateProperties(properties){   
   var settings;    
   if(properties == null || properties === ""){
     settings = {};
   }
   else{
     settings = JSON.parse(properties);
   }
    
    //General 
   //connections   = settings["connections"] != null ? settings["connections"] : connections;      
    
   elements = settings["elements"] != null ? (settings["elements"] === "" ? elements : settings["elements"]) : elements
   elementsIndex = settings["elementsIndex"] != null ? settings["elementsIndex"] : elementsIndex;
   elementsValue = settings["elementsValue"] != null ? settings["elementsValue"] : elementsValue;
   
   connections = settings["connections"] != null ? (settings["connections"] === "" ? connections : settings["connections"]) : connections
   connectionsIndex = settings["connectionsIndex"] != null ? settings["connectionsIndex"] : connectionsIndex;
   connectionsValue = settings["connectionsValue"] != null ? settings["connectionsValue"] : connectionsValue;     
    
   emptycells    = settings["emptycells"] != null ? settings["emptycells"] : emptycells;    
   headerrow     = settings["headerrow"] != null ? settings["headerrow"] : headerrow;    
   datarow       = settings["datarow"] != null ? settings["datarow"] : datarow;    
   prefix        = settings["prefix"] != null ? settings["prefix"] : prefix;    
   separator     = settings["separator"] != null ? settings["separator"] : separator;    
   keepignore    = settings["keepignore"] != null ? settings["keepignore"] : keepignore;  
   cellarrays    = settings["cellarrays"] != null ? settings["cellarrays"] : cellarrays;  
   separator2    = settings["separator2"] != null ? settings["separator2"] : separator2;
   columnignore    = settings["columnignore"] != null ? settings["columnignore"] : columnignore;
   colprefix    = settings["colprefix"] != null ? settings["colprefix"] : colprefix;     
    
   refreshSideBar();
   //populate(elementsValue, connectionsValue); 
 }
  
   
 //Function to rebuild the sidebar after loading export parameters
 function refreshSideBar(){            
     
     document.getElementById('emptycells').checked=emptycells;
     
     if(headerrow=="")
       document.getElementById('headerrow').value="1";
     else
       document.getElementById('headerrow').value=headerrow;
       
     if(datarow=="")
       document.getElementById('datarow').value="2";
     else
       document.getElementById('datarow').value=datarow;              
     
     
     if(prefix=="")
       document.getElementById('prefix').value="ja_";
     else
       document.getElementById('prefix').value=prefix;  
       
     if(separator=="")
       document.getElementById('separator').value="|";
     else
       document.getElementById('separator').value=separator;                         
     
     document.getElementById('keepignore').checked=keepignore;     
     document.getElementById('cellarrays').checked=cellarrays;     
     document.getElementById('columnignore').checked=columnignore;
     
     if(colprefix=="")
       document.getElementById('colprefix').value="ig_";
     else
       document.getElementById('colprefix').value=colprefix;           
     
     if(separator2=="")
       document.getElementById('separator2').value="|";
     else
       document.getElementById('separator2').value=separator2;            
     
    EnableTextbox1('keepignore', 'prefix' ,'separator')

    EnableTextbox('columnignore', 'colprefix')

    EnableTextbox('cellarrays', 'separator2')     

 }
 
 function getProperties(onSuccess){
  return google.script.run.withSuccessHandler(onSuccess).getExportProperties();
 }
  //enable disable
 function EnableTextbox(CheckboxId,TextboxId1){
    if(document.getElementById(CheckboxId).checked){
        document.getElementById(TextboxId1).style.backgroundColor = "#fff"
        document.getElementById(TextboxId1).disabled=false;
        }
    else{
        document.getElementById(TextboxId1).style.backgroundColor = "#5bb800"
        document.getElementById(TextboxId1).disabled=true;
        }
 }
 
 function EnableTextbox1(CheckboxId,TextboxId1, TextboxId2){
    if(document.getElementById(CheckboxId).checked){
      document.getElementById(TextboxId1).style.backgroundColor = "#fff";
      document.getElementById(TextboxId2).style.backgroundColor = "#fff";
      document.getElementById(TextboxId1).disabled=false;
      document.getElementById(TextboxId2).disabled=false;
    }
        
    else{
      document.getElementById(TextboxId1).style.backgroundColor = "#5bb800";
      document.getElementById(TextboxId2).style.backgroundColor = "#5bb800";
      document.getElementById(TextboxId1).disabled=true;
      document.getElementById(TextboxId2).disabled=true;      
    }
 }
 function enableTextBox(){
   
   document.getElementById("elmn").selectedIndex = 0;
   document.getElementById("conn").selectedIndex = 0;
   document.getElementById("headerrow").value = "1";
   document.getElementById("datarow").value = "2";
   
   
   document.getElementById("emptycells").checked = false;
   
   //========================================================
   document.getElementById("keepignore").checked = false;
   document.getElementById("prefix").value = "ja_";
   document.getElementById("separator").value = "|";

   document.getElementById("columnignore").checked = false;
   document.getElementById("colprefix").value = "ig_";
   
   document.getElementById("cellarrays").checked = false;
   document.getElementById("separator2").value = "|";
   
   document.getElementById("prefix").style.backgroundColor = "#5bb800";
   document.getElementById("separator").style.backgroundColor = "#5bb800";
   document.getElementById("colprefix").style.backgroundColor = "#5bb800";
   document.getElementById("separator2").style.backgroundColor = "#5bb800";

   document.getElementById("prefix").disabled=true;
   document.getElementById("separator").disabled=true;
   document.getElementById("colprefix").disabled=true;
   document.getElementById("separator2").disabled=true;
}
  //end
 getProperties(updateProperties);
  
</script>
  </body>
</html>

uj5u.com熱心網友回復:

我相信你的目標如下。

  • 您要洗掉以下錯誤。(下圖來自您的問題。)

    將 Google 表格獲取到可更新的 JSON 腳本以只需要標題行

當我看到您的腳本和示例電子表格時,我注意到您的“連接”表只有標題行。在這種情況下,var values=sheet.getRange(startRowNum, 1, sheet.getLastRow()-1, sheet.getLastColumn()).getValues();腳本中會出現錯誤因為sheet.getLastRow()-10那么,在你的情況下,下面的修改如何?

從:

var values=sheet.getRange(startRowNum, 1, sheet.getLastRow()-1, sheet.getLastColumn()).getValues();

到:

var rows = sheet.getLastRow() - 1;
var values = rows > 0 ? sheet.getRange(startRowNum, 1, rows, sheet.getLastColumn()).getValues() : [];
  • 通過此修改,當“連接”表只有標題時,[]用作values.

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/379789.html

標籤:json 谷歌应用程序脚本 谷歌表格

上一篇:Google應用程式腳本-為什么我的for回圈不執行?

下一篇:如何在Google表格中解碼特定字符(unicode)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more