【问题标题】:Autofill Google Doc from Form Find Last Row从表单查找最后一行自动填充 Google 文档
【发布时间】:2021-11-23 21:14:51
【问题描述】:

我跟随 youtube 视频创建了一个 Google Apps 脚本,该脚本将在提交时自动填充一个 Google 文档(模板),其中包含来自表单的响应作为触发器。我必须添加一些计算列,以根据表单提交中填写的答案进一步计算。我需要将所有列都填入 Google Doc。

我正在粘贴下面的完整代码,我相信我很接近。粗体部分是我知道我需要更新的部分,但我不确定如何更新。目前,该脚本循环遍历所有数据行并为每一行创建一个新的 Google Doc。我需要它从电子表格中找到最后/最新的数据行(将是最新的表单提交)并用该数据填充 Doc。我到处寻找解决方案 - 感谢任何帮助!

function autoFillGoogleDocFromForm(e){
var PersonName = e.values[1];
var Month = e.values [2];
var ShowName = e.values [3];
var Sale = e.values [4];
var BuyType = e.values [5];
var Budget = e.values [6];
var Products = e.values [7];
var TermMonths = e.values [8];
var Title = e.values [9];
var Assets = e.values [10];
var NumberofShows = e.values [11];
var NumberofSales = e.values [12];
var ListSize = e.values [13];
var Agency = e.values [14];
var DataCadence = e.values [15];
var Other = e.values [16];
var AdditionalNotes = e.values [17];

**var rows = SpreadsheetApp.getActiveSpreadsheet().getDataRange().getDisplayValues();
rows.forEach(function(row){
var ContractID = row [18];
var Term = row [19];
var StartDate = row [20];
var EndDate = row [21];
var CustomerCost = row [22];
var CostShow = row [23];
var Cost = row [24];
var TotalEngagements = row [25];
var CostSplit = row [26];
var TotalEmails = row [27];
var CostData = row [28];**

var templateFile = DriveApp.getFileById("9fu1jGgpaQ");
var templateResponseFolder = DriveApp.getFolderById("15h3GnG");

var copy = templateFile.makeCopy('Name' + BrName, templateResponseFolder);
var doc = DocumentApp.openById(copy.getId());
var body = doc.getBody();

body.replaceText("{{Name of Manufacturer}}", Manufacturer);
body.replaceText("{{Name of Brand}}", BrandDrugName);
body.replaceText("{{Name of Products}}", ProductsPurchased);
body.replaceText("{{Start Date}}", StartDate);
body.replaceText("{{End Date}}", CalculatedEndDate);
body.replaceText("{{Title of Sponsorship}}", SeriesSponsorshipTitle);
body.replaceText("{{Name Generic}}", ClientAssets);
body.replaceText("{{Number of Videos}}", NumberofVideos);
body.replaceText("{{Cost Video Int}}", CustomerVideoIntegrationCost);
body.replaceText("{{Total Video Eng}}", TotalVideoEngagements);
body.replaceText("{{Video Eng}}", VideoEngSplit);
body.replaceText("{{Video Eng 2}}", VideoEngSplit);
body.replaceText("{{Target List Size}}", TargetListSize);
body.replaceText("{{Cost Video Eng}}", CostVideoEngagement);
body.replaceText("{{Total Email Eng}}", TotalEmailEngagements);
body.replaceText("{{Cost Email Eng}}", CostEmailEngagement);
body.replaceText("{{Target Size}}", TargetSize);
body.replaceText("{{Data Cadence}}", DataCadence);
body.replaceText("{{Cost Data}}", CostDataTransfer);

doc.saveAndClose();

})
}

【问题讨论】:

  • 如果您只需要表单中的答案,您可以在e.values 中获得所有答案。您无需使用 var rows = ... 从电子表格中获取值。

标签: javascript google-apps-script


【解决方案1】:

你可以替换你的代码块

**var rows = SpreadsheetApp.getActiveSpreadsheet() 
... 
var CostData = row [28];** 

到下面

let entryRow = e.range.getRow(),     
  rowData = SpreadsheetApp.getActive().getSheetByName('... yourSheetName here ...').getRange(entryRow,17,1,11).getDisplayValues().flat(),
  ContractID                    = rowData[0],
  CalculatedTerm                = rowData[1],
  StartDate                     = rowData[2],
  CalculatedEndDate             = rowData[3],
  CustomerVideoIntegrationCost  = rowData[4],
  CostVideoEngagement           = rowData[5],
  CostEmailEngagement           = rowData[6],
  TotalVideoEngagements         = rowData[7],
  VideoEngSplit                 = rowData[8],
  TotalEmailEngagements         = rowData[9],
  CostData                      = rowData[10];

但问题是工作表上Q:Z 列中的公式是否有时间在使用.getDisplayValues() 获取数据之前处理信息。您可能会发现将所有这些公式转换为脚本并在脚本内处理表单中的数据更容易,而无需使用工作表上的公式

【讨论】:

  • 非常感谢您的观看!我想知道公式是否有时间处理信息。以上似乎也没有从我的计算列中提取任何值:(我会尝试在脚本中编写公式,但它们很复杂,因为它们引用备用选项卡以通过 VLOOKUP、MATCH/INDEX 提取各种信息,等
  • 上面带有 ForEach 的原始脚本是从列中提取值,但是它正在循环并为每一行创建一个新文档。想知道我是否可以对不使用 ForEach 的情况进行任何修改?再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2017-12-16
  • 2022-09-30
  • 2020-11-08
  • 1970-01-01
相关资源
最近更新 更多