【问题标题】:How do I change a string format from 00/00/0000 to 00.00.0000如何将字符串格式从 00/00/0000 更改为 00.00.0000
【发布时间】:2020-01-25 23:05:58
【问题描述】:

我目前正在 Google App Scripts 中编写自定义函数。现在我正在挣扎。我定义了一个参数来从日期单元格中获取输入并更改格式。

例如 9/16/2010 到 09.16.2010,其中给定列具有前一个日期,而函数输出后者。

输出是一个字符串,但我似乎找不到任何关于 javascript 的特定文本编辑功能的信息。

还值得一提的是,给定列中的日期是基于表单输出的,我没有在代码中调用特定的短日期,所以这更像是字符串操作而不是日期格式

感谢任何帮助。

/**
*Generates a Trip Key
*
*@param DateColumn Date 
*@param SchoolColumn School name
*@param LocationColumn Location
*@customfunction
*/
function GENERATEKEY(DateColumn) {

  var Date = DateColumn       

  const dateStr = Date;
  const dateArr = dateStr.split('/');
  dateArr[0] = ('0' + dateArr[0]).slice(-2);
  dateArr[1] = ('0' + dateArr[1]).slice(-2);

  const DateEdited = dateArr.join('.');

  return neWDateStr; //gives 00.00.0000

  //var Key = Date SchoolColumn "@" LocationColumn




}

【问题讨论】:

  • 这不只是需要应用的单元格格式吗?
  • 您新格式化的日期是否出现在不同列的单独单元格中?
  • 获取日期值,然后根据需要格式化

标签: javascript google-apps-script google-sheets datetime-format custom-function


【解决方案1】:

Date 是一个内置对象。它不应该用作变量名。

虽然在 Google Apps 脚本中允许使用 const,但它并不完全受支持(它不像 ECMAScript 所述的那样工作)。恕我直言,最好使用var 以避免“混淆”。

在 Google 表格中,根据电子表格设置,将以支持的日期时间格式输入的值更改为序列号,并使用数字格式将其显示为日期、时间、日期时间或持续时间。当将显示为日期、日期时间、时间或持续时间的序列号传递给自定义函数时,Google Apps 脚本会将其转换为 Date 对象。

要返回格式化的日期,请使用 https://developers.google.com/apps-script/reference/utilities/utilities#formatdatedate,-timezone,-format 中的 Utilities.formatDate(...) 详细信息

相关

【讨论】:

    【解决方案2】:

    您可以简单地使用内置的TEXT 函数:

    =TEXT(A2,"mm.dd.yyyy")
    

    您当前的脚本(如先前答案之一中提供的)不起作用的原因是参数DateColumn 不是String 类型。您可以将日期对象转换为特定的字符串并进行相应的格式化,或者使用内置的Utilities 库。

    function DOWHATTEXTDOES(dateColumn) {
      return Utilities.formatDate(dateColumn, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "yyyy.MM.dd")
    }
    

    必读:

    【讨论】:

      【解决方案3】:

      你可以这样做

        "02/05/2009".split('/').join('.');
      

      【讨论】:

      • 请注意,这正是我上面的解决方案(仅在一行中)-但我自己没有这样做的原因是,尽管 OP 声明格式具有前导“0 " 在日期和月份字段中 - 给定的示例没有,因此我的解决方案将前导零提供到单个数字月份和日期值。除此之外-您的解决方案与我的解决方案完全相同。不要让单线解决方案的吸引力分散您提供可靠和强大解决方案的注意力。
      • @gavgrif 我明白了。我把它写在我的手机上,当时你的解决方案还没有发布。另外,我错过了你提醒我注意的格式。
      • 没有问题 - 我们经常同时编写解决方案。也只是一个建议 - 如果您正在寻找实现您的解决方案并假设前导零始终存在) - 那么您可以简单地使用 replace() 。 - 例如 - newDateStr = origDateStr.replace('\'g,'.') 而不必担心将字符串拆分为数组只是为了将其重新加入字符串。
      【解决方案4】:

      获取并设置活动范围的 numberFormat

      Sheet.getRange().setNumberFormat("mm.dd.yyyy");
      

      这里有一个对话框和函数,我有时会使用它来处理不同的格式。我发现使用电子表格功能更容易、更快捷。

      顶部函数是一个对话框,它读取并显示活动范围的当前格式,并为活动范围内的每个单元格提供一个文本框和按钮,允许您设置数字格式并立即查看更改。

      function getandSetActiveRangeFormats() {
        var ss=SpreadsheetApp.getActive();
        var sh=ss.getActiveSheet();
        var rg=sh.getActiveRange();
        var fA=rg.getNumberFormats();
        var html='<style>th,td{border:1px solid black;}</style><table><tr><th>Item</th><th>A1 Notation</th><th>Number Format</th><th>Enter Format</th><th>Set Format</th></tr>';
        var item=1;
        var row=rg.getRow();
        var col=rg.getColumn();
        fA.forEach(function(r,i){
          r.forEach(function(c,j){
            var txt=Utilities.formatString('<input type="text" id="RC-%s-%s" />',row+i,col+j);
            var btn=Utilities.formatString('<input type="button" value="Set Form" onClick="setFormat(%s,%s);" />',row+i,col+j);
            html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',item++,sh.getRange(row + i,col + j).getA1Notation(),fA[i][j],txt,btn);
          });
        });
        html+='</table><input type="button" value="Exit" onClick="google.script.host.close();" />';
        html+='<script>function setFormat(row,col){var f=document.getElementById("RC-"+row+"-"+col).value;google.script.run.setFormat(row,col,f);}</script>';
        var ui=HtmlService.createHtmlOutput(Utilities.formatString(html));
        SpreadsheetApp.getUi().showModelessDialog(ui, "Display Cell Formats")
      }
      
      function setFormat(row,col,format) {
        var ss=SpreadsheetApp.getActive();
        var sh=ss.getActiveSheet();
        sh.getRange(row,col).setNumberFormat(format);
      }
      

      动画:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-19
        • 1970-01-01
        • 2014-10-10
        • 2011-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多