繁体   English   中英

Google Apps脚本mailmerge不提取arrayformula结果

[英]google apps script mailmerge not extracting arrayformula results

关于Google脚本,我是新手。 我在网上找到了一些代码,这些代码从google工作表的当前行(来自表单)获取信息,并将其放入google doc(有点像mailmerge,但仅用于当前行)。 我已经对其进行了调整以满足自己的需求。

这是发生了什么。 用户完成链接到工作表的表单。 使用arrayformula在工作表上进行了许多计算,以提供有关文档的其他信息。 无论用户在哪一行上,单击我创建的按钮,该行中的信息都会转移到模板文档中。

这对于顶部的行(行2,其中行1是标题行)工作正常,但是当我尝试为行3运行它时,表中传输的唯一信息是非arrayformula信息,即在表单中输入的信息不是计算的信息!

谁能给我一些关于为什么以及是否有解决方案的见解?

这是使用的代码的副本:

var employee_ID = "";
var SOURCE_TEMPLATE = "1roWDiQ8NuMF06thK-bim0iwmX1_mbjvvcNIDAxfZZlI";
var employee_SPREADSHEET = "1sFWhuN_nSVEWvuPjWz2gKPdDSKw8DJBe8uoapItC0G4";
var TARGET_FOLDER = "1teL41C9NM0O5ma_2BUNe-MMX0rkSiA4h";


function getCurrentRow() {
  var currentRow = 
SpreadsheetApp.getActiveSheet().getActiveSelection().getRowIndex();
  return currentRow;
}


function getRowAsArray(sheet, row) {
  var dataRange = sheet.getRange(row, 1, 1, 99);
  var data = dataRange.getValues();
  var columns = [];

  for (i in data) {
    var row = data[i];

    Logger.log("Got row", row);

    for(var l=0; l<99; l++) {
        var col = row[l];

        if(!col) {
            break;
        }

        columns.push(col);
    }
  }

  return columns;
}


function createDuplicateDocument(sourceId, name) {
    var source = DriveApp.getFileById(sourceId);
    var targetFolder = DriveApp.getFolderById(TARGET_FOLDER);
    var newFile = source.makeCopy(name, targetFolder);

    return DocumentApp.openById(newFile.getId());
}


function generateEmployeeDatasheet() {

 var data = SpreadsheetApp.openById(employee_SPREADSHEET);

  if(!employee_ID) {
    employee_ID = getCurrentRow();

    if (employee_ID == 1) {
      var employee_ID = Browser.msgBox("You need your cursor to be on the 
row within which you are working ", Browser.Buttons.OK);
    }
  }


  var sheet = data.getSheets()[1];
  var columns = getRowAsArray(sheet, 1);

  Logger.log("Processing columns:" + columns);

  var row = getRowAsArray(sheet, employee_ID);  
  Logger.log("Processing data:" + row);

  var employeeName = row[2];
  var timeStamp = row[0];
  var employeeDate = row[51];

  var target = createDuplicateDocument(SOURCE_TEMPLATE, employeeName + " 
Final Pay Letter " + employeeDate);

  Logger.log("Created new document:" + target.getId());

  for(var i=0; i<columns.length; i++) {

    var body = target.getActiveSection();
    body.replaceText("<<Name>>",row[2]); //col C   
    body.replaceText("<<Final pay period>>",row[4]); //col E
    body.replaceText("<<Training details1>>",row[9]); //col J

  }

}

Update 04/10/18看来我的问题存在于getRowsArray函数中,尤其是:

if(!col) {
        break;
    }

如果我的电子表格数据中的条目为空,则该函数会中断,因此不会捕获沿电子表格行进一步的数据。
是否有人现在要更改此设置,以便此函数以另一种方式标识行的最后一列?

这是我的实用工具,用于获取包含给定列中数据的最后一行。 两行-100%的时间有效。

    var Avals = ss.getRange("A1:A").getValues();
    var Alast = Avals.filter(String).length;
    Logger.log("The last row of data is "+Alast);

致谢:“ 确定单列中的最后一行

暂无
暂无

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

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