繁体   English   中英

.length 不适用于 Google Apps 脚本中的数组

[英].length not working on array in Google Apps Script

我有这个代码。 我想遍历数组并为每个条目创建一个新文档。 如果我手动将循环长度设置为行数,则它工作正常。 我想将它设置为循环数组的长度。 但是 .length 属性总是返回 null。 我错过了什么。 我也试过每个循环都没有运气。

    function createDocument() 
{
  
  //var headers = Sheets.Spreadsheets.Values.get('fileID', 'A1:Z1');
  var studentHistory = Sheets.Spreadsheets.Values.get('fileID', 'A2:Z200');
  var templateId = 'fileID';
  var documentId;
  var dstFolder = DriveApp.getFolderById('folderID');
  var length = studentHistory.length;
  Logger.log(studentHistory);
  Logger.log(length);

  //Loop through rows in sheet
  for (var i = 0; i < length; i++){ 
    //Get values from sheet row
    var date = studentHistory.values[i][0];
    var studentName = studentHistory.values[i][1];
    var dob = studentHistory.values[i][2];
    var pcDoctor = studentHistory.values[i][3];
    var address = studentHistory.values[i][4];
    var fgName = studentHistory.values[i][5];
    var mgName = studentHistory.values[i][6];
    var phoneMom = studentHistory.values[i][7];
    var phoneDad = studentHistory.values[i][8];
    var empMom = studentHistory.values[i][9];
    var empDad = studentHistory.values[i][10];
    var livesWith = studentHistory.values[i][11];
    var childrenInHome = studentHistory.values[i][12];
    var childrenNotInHome = studentHistory.values[i][13];
    var othersInHome = studentHistory.values[i][14];
    var illnesses = studentHistory.values[i][15];
    var illnessDetails = studentHistory.values[i][16];
    var hospitalizations = studentHistory.values[i][17];
    var hospDetails = studentHistory.values[i][18];
    var trauma = studentHistory.values[i][19];
    var traumaDetails = studentHistory.values[i][20];
    var injuries = studentHistory.values[i][21];
    var injuryDetails = studentHistory.values[i][22];
    var medications = studentHistory.values[i][23];
    var additionalComments = studentHistory.values[i][24];
    var otherSchools = studentHistory.values[i][25];
    
    //Make a copy of the template file
    documentId = DriveApp.getFileById(templateId).makeCopy(dstFolder).getId();
    
    //Change name of newly created document
    DriveApp.getFileById(documentId).setName('SocialHistory_' + studentName + '_' + date);

    var body = DocumentApp.openById(documentId).getBody();
    
    //Insert values
    body.replaceText('<<date>>', date);
    body.replaceText('<<studentName>>', studentName);
    body.replaceText('<<dob>>', dob);
    body.replaceText('<<pcDoctor>>', pcDoctor);
    body.replaceText('<<address>>', address);
    body.replaceText('<<fgName>>', fgName);
    body.replaceText('<<mgName>>', mgName);
    body.replaceText('<<phoneMom>>', phoneMom);
    body.replaceText('<<phoneDad>>', phoneDad);
    body.replaceText('<<empMom>>', empMom);
    body.replaceText('<<empDad>>', empDad);
    body.replaceText('<<livesWithe>>', livesWith);
    body.replaceText('<<childrenInHome>>', childrenInHome);
    body.replaceText('<<childrenNotInHome>>', childrenNotInHome);
    body.replaceText('<<othersInHome>>', othersInHome);
    body.replaceText('<<illnesses>>', illnesses);
    body.replaceText('<<illnessDetails>>', illnessDetails);
    body.replaceText('<<hospitalizations>>', hospitalizations);
    body.replaceText('<<hospDetails>>', hospDetails);
    body.replaceText('<<trauma>>', trauma);
    body.replaceText('<<traumaDetails>>', traumaDetails);
    body.replaceText('<<injuries>>', injuries);
    body.replaceText('<<injuryDetails>>', injuryDetails);
    body.replaceText('<<medications>>', medications);
    body.replaceText('<<additionalComments>>', additionalComments);
    body.replaceText('<<otherSchools>>', otherSchools);

    
  }

  
}

studentHistory.values是数组。

因此,试试这个来获得长度:

var length = studentHistory.values.length;

解决方案

我看到您正在使用高级 Google 服务来调用 Sheets API。 此 Apps Script 类允许您直接从自动处理授权过程的脚本中调用 Google API。

但是,它不能作为可用于例如SpreadsheetApp包装器内的内置类。

您的请求将按照以下规范返回类似 HTTP 的响应:

{
  "range": string,
  "majorDimension": enum (Dimension),
  "values": [
    array
  ]
}

您需要解析这些响应才能获得所需的结果。

建议修改

    function createDocument() 
{
  
  //var headers = Sheets.Spreadsheets.Values.get('fileID', 'A1:Z1');
  var studentHistory = Sheets.Spreadsheets.Values.get('fileID', 'A2:Z200');
  var templateId = 'fileID';
  var documentId;
  var dstFolder = DriveApp.getFolderById('folderID');
  var length = studentHistory.values.length;

...

参考

谷歌表格 API

高级 Google 服务

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM