【问题标题】:How to get json array from spreadsheet using Apps Script如何使用 Apps 脚本从电子表格中获取 json 数组
【发布时间】:2021-02-23 02:37:02
【问题描述】:

我尝试使用 Google Apps 脚本从电子表格中获取 JSON 数组中的所有数据,但结果始终为 null 别名没有空白。

enter image description here

我做这个功能是为了搜索记录为“NIK”或“NKK”的数据,如有错误请指正

    function getVoterByNIK(request, sheet) {
      var output = ContentService.createTextOutput(), result = {};

      var nkk = request.parameter.nkk
      var nik = request.parameter.nik

  var searchBy;
  var values; 

  if(request.parameter.nik){
    searchBy = nik
    values = sheet.getRange(2,2,sheet.getLastRow(),sheet.getLastColumn()).getValues();
  } 
  if(request.parameter.nkk){
    searchBy = nkk
    values = sheet.getRange(2,1,sheet.getLastRow(),sheet.getLastColumn()).getValues();
  }
 
  for(var i = 0; i < values.length; i++) {
    if(values[i][0] == searchBy ){
      i=i+2;
            
      var nkk = sheet.getRange(i,1).getValue();
      var nik = sheet.getRange(i,2).getValue();
      var nama = sheet.getRange(i,3).getValue();
      var tempat_lahir = sheet.getRange(i,4).getValue();
      var tgl_lahir = sheet.getRange(i,5).getValue();
      var status_perkawinan = sheet.getRange(i,6).getValue();
      var jk = sheet.getRange(i,7).getValue();
      var alamat = sheet.getRange(i,8).getValue();
      var rt = sheet.getRange(i,9).getValue();
      var rw = sheet.getRange(i,10).getValue();
      var disabilitas = sheet.getRange(i,11).getValue();
      var status_perekaman = sheet.getRange(i,12).getValue();
      var keterangan = sheet.getRange(i,13).getValue();
      var tps = sheet.getRange(i,14).getValue();
      var kehadiran = sheet.getRange(i,15).getValue();

      result = JSON.stringify({
                    "voters": {
                        "nkk":nkk,
                        "nik":nik,
                        "nama":nama,
                        "tempat_lahir":tempat_lahir,
                        "tgl_lahir":tgl_lahir,
                        "status_perkawinan":status_perkawinan,
                        "jk":jk,
                        "alamat":alamat,
                        "rt":rt,
                        "rw":rw,
                        "disabilitas":disabilitas,
                        "status_perekaman":status_perekaman,
                        "keterangan":keterangan,
                        "tps":tps,
                        "kehadiran":kehadiran
                        }});
        if(result.length != ""){
        result["error"] = false;
        result["code"] = 200;
        result["message"] = "Data ditemukan";
        output.setContent(JSON.stringify(result));
        output.setMimeType(ContentService.MimeType.JAVASCRIPT);
      }else{
        result["error"] = true;
        result["code"] = 404;
        result["message"] = "NKK atau NIK tidak ditemukan";
        output.setContent(JSON.stringify(result));
        output.setMimeType(ContentService.MimeType.JAVASCRIPT);
      }
    }
  }
  return output;
}

非常感谢帮助我解决这个问题的人

【问题讨论】:

    标签: json google-apps-script google-sheets-api


    【解决方案1】:

    你的代码很适合我。我刚刚加了

    function doGet(e) {
      const sheet = SpreadsheetApp.openById('ABCD1234')
        .getSheets()[0];
      return getVoterByNIK(e, sheet)
    }
    

    然后我通过我的 REST 客户端调用

    GET https://script.google.com/macros/s/VBNM_76544/exec?nkk=asdf56 HTTP/1.1
    Content-Type: application/json
    

    返回

    HTTP/1.1 200 OK
    Content-Type: text/javascript; charset=utf-8
    Access-Control-Allow-Origin: *
    Cache-Control: no-cache, no-store, max-age=0, must-revalidate
    Pragma: no-cache
    Expires: Mon, 01 Jan 1990 00:00:00 GMT
    Date: Tue, 23 Feb 2021 04:34:41 GMT
    Content-Encoding: gzip
    X-Content-Type-Options: nosniff
    X-Frame-Options: SAMEORIGIN
    Content-Security-Policy: frame-ancestors 'self'
    X-XSS-Protection: 1; mode=block
    Server: GSE
    Alt-Svc: h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
    Connection: close
    Transfer-Encoding: chunked
    
    "{\"voters\":{\"nkk\":\"asdf56\",\"nik\":\"asdf\",\"nama\":\"asdf\",\"tempat_lahir\":\"asdf\",\"tgl_lahir\":\"asdf\",\"status_perkawinan\":\"asdf\",\"jk\":\"asdf\",\"alamat\":\"asdf\",\"rt\":\"asdf\",\"rw\":\"asdf\",\"disabilitas\":\"asdf\",\"status_perekaman\":\"asdf\",\"keterangan\":\"\",\"tps\":\"\",\"kehadiran\":\"\"}}"
    

    我的样本数据

    建议:

    • 别忘了重新发布您的应用
    • 检查工作表中的数据类型。可能有一些错误
    • 将所有内容包装在try catch 中并写入日志
    function doGet(e) {
      try {
        const sheet = SpreadsheetApp.openById('ABCD1234')
          .getSheets()[0];
        return getVoterByNIK(e, sheet)
      } catch (err) {
        SpreadsheetApp.openById('LOG_SHEET_ID')
          .appendRow([new Date(), err.stack, err.message])
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-02-13
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2014-08-23
      • 1970-01-01
      相关资源
      最近更新 更多