javascript - nnnn-nnnn 形式的字符串在电子表格中显示为日期或以其他方式错误显示

标签 javascript google-apps-script google-sheets google-forms

我在测试环境中使用了一个脚本,通过从时间戳解析年份并填充响应索引来以编程方式创建跟踪号。

function setTrackingNumber(ss, lastRowInx, createDateColumn) //This block generates and stores a tracking number in Column AU on the backend
{
  var padTrackNo = "" + lastRowInx;
  var trackSize =  4;
  var trackingNumberColumn = createDateColumn-3; //trackingNumberColumn is currently in AU (Column 47) Calculating using it's relative position to createDateColumn Position

  if (ss.getRange(lastRowInx, trackingNumberColumn).getValue() == "") // so that subsequent edits to Google Form don't overwrite original tracking number
  {
    if (padTrackNo > trackSize)
    {
      var padTrackNo = pad(padTrackNo, trackSize);
    }
    else {} //do nothing

    var shortYear = setShortYear(ss, lastRowInx, createDateColumn);
    var trackingNumber = shortYear + "-" + padTrackNo;
    var createTrackingNumber = ss.getRange(lastRowInx, trackingNumberColumn);
    createTrackingNumber.setValue(trackingNumber);
   }
  else {} //should do nothing
  return;
}//This is the end of the setTrackingNumber function

function setShortYear(ss, lastRowInx, createDateColumn)
{
  var newCreateDate = ss.getRange(lastRowInx,createDateColumn).getValue();
  var strDate = "" + newCreateDate;
  var splitDate = strDate.split(" "); 
  var trimYear = splitDate[3];
  var shortYear = trimYear;

  return shortYear;
}//This is the end of the shortYear function

function pad(padTrackNo, trackSize)
{
   while (padTrackNo.length < trackSize)
    {
      padTrackNo = "0"+padTrackNo;
    }
  return padTrackNo;
}//This is the end of pad function

这让我很感动test result正如预期的那样。 2016-0005。然而,当我们将其添加到另一个生产表时,它似乎可以处理测试数据,然后生产数据显示为日期 2016 年 3 月 1 日。 production result - first cell

由于数字的原因,我认为它必须只是将字符串格式化为日期,因此我尝试将列格式化为纯文本,但这只是将日期更改为日期的纯文本版本。

我认为这可能类似于需要指定格式,就像我在这个问题 Appending initial timestamp from Google Form to end of record in order to permanently store create date onFormSubmit 中所做的那样根据 @SandyGood 的建议,我尝试通过更改将数字格式设置为 [0000-0000]

createTrackingNumber.setValue(trackingNumber);

createTrackingNumber.setValue(trackingNumber).setNumberFormat("0000-0000");

这导致[生产结果 - 第二个单元格]再次与预期结果不匹配。

奇怪的是,一些提交似乎工作得很好,如[生产结果 - 第三个单元格]。在过去的 3 天里,大约有 10 条记录,情况一直很好,然后很不稳定,然后又很好,他们很不稳定,然后又很好。我不太确定还有什么可以尝试调试这种奇怪的行为。

注意:我必须将日期解析为字符串,因为我无法从初始时间戳中获取的创建日期正确解析日期。

最佳答案

据我了解,“2016-0005”不是数字而是字符串,因此包含它的单元格应格式化为纯文本。使用脚本,可以通过

来完成
range.setNumberFormat('@STRING@') 

( source ),并且必须在将值设置到单元格之前完成。像这样:

createTrackingNumber.setNumberFormat('@STRING@').setValue(trackingNumber);

关于javascript - nnnn-nnnn 形式的字符串在电子表格中显示为日期或以其他方式错误显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36607578/

相关文章:

javascript - 如何检查元素是否有类?已经使用(hasClass方法)?

javascript - Jquery UI 中的拖放事件

google-apps-script - Google Apps 脚本中的持久变量

javascript - 如何使用mailapp发送图像和图表?

javascript - 变体数组自定义函数 Google Sheets?例如VBA

javascript - 单引号 Google 脚本的串联

javascript - JS 变量未发布

javascript - transitionEnd 在 Firefox 中不起作用

javascript - 在 Google Apps 脚本中连接字符串

javascript - 设置 Array[i].length = 13;也改变其他数组长度。为什么?