【问题标题】:appendRow Column Starting PositionappendRow 列起始位置
【发布时间】:2020-08-21 11:42:23
【问题描述】:

当我将表单提交到谷歌表格时,我试图添加一个自动时间戳,但问题是我希望在一行的第一列中添加时间戳,然后将其余数据推算到之后。 我似乎无法让我的 processForm 函数从第二列开始,而让第一列不理会。如果我尝试在 ws.appendRow 部分下放置一个空的 formObject ,它将覆盖我的 onEdit 函数并且不允许出现日期。有什么方法可以让我从第二列而不是第一列开始追加我的行?

function doGet(request) {
  return HtmlService.createTemplateFromFile('Index')
      .evaluate();
}

/* @Include JavaScript and CSS Files */
function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
      .getContent();
}

function onEdit(event)
{ 
  var timezone = "GMT-5";
  var timestamp_format = "MM-dd-yyyy"; // Timestamp Format. 
  var updateColName = "Total Defects";
  var timeStampColName = "Date";
  var sheet = event.source.getSheetByName('Data'); //Name of the sheet where you want to run this script.


  var actRng = event.source.getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol = headers[0].indexOf(timeStampColName);
  var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
  if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
    var cell = sheet.getRange(index, dateCol + 1);
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
    cell.setValue(date);
  }
}


/* @Process Form */
function processForm(formObject) {
  var url = "LINK TO SPREADSHEET URL";
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Data");
  
  
  ws.appendRow([
                formObject.data_1,
                formObject.data_2,
                formObject.data_3
]);
} 

'''

【问题讨论】:

    标签: javascript html google-apps-script


    【解决方案1】:

    创建时间戳的代码是独立的,值得拥有自己的timestamp() 函数。

    (注意:“GMT-5”不遵守夏令时:这对您是否正确?考虑使用提供的getSpreadsheetTimeZone。)

    提取timestamp() 后,您可以将其插入到您的processForm 函数中,如下所示:

    /** @returns {string} */
    function timestamp() {
      var timezone = "GMT-5"; // consider using getSpreadsheetTimeZone()
      var timestamp_format = "MM-dd-yyyy";
      return Utilities.formatDate(new Date(), timezone, timestamp_format);
    }
    
    /* @Process Form */
    function processForm(formObject) {
      var url = "LINK TO SPREADSHEET URL";
      var ss = SpreadsheetApp.openByUrl(url);
      var ws = ss.getSheetByName("Data");
    
      ws.appendRow([
        timestamp(),
        formObject.data_1,
        formObject.data_2,
        formObject.data_3,
      ]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 2018-05-12
      相关资源
      最近更新 更多