【问题标题】:Getting substrings of each Array-Element获取每个数组元素的子字符串
【发布时间】:2020-12-09 14:09:50
【问题描述】:

我正在尝试将以“dd.mm.yy”格式存储的数据转换为 Google 表格/Appscript 中的“w”格式。不幸的是,我无法使用“.formatDate()”函数,因为工作表无法将输入值识别为日期值,因此我尝试了以下操作:

function CheckWeekNuber() {
   
 
  var dateStr =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("INSERT RAW DATA HERE").getRange(3,5,300,4).getValues();
 
  var day = dateStr.substring(0,2);
  var month = dateStr.substring(3,5);
  var year = "20"+dateStr.substring(6,8);
  var weekNumb = Utilities.formatDate(new Date(year, month-1, day), "GMT", "w");
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("WEEKNUMBERS").getRange(3,5,300,4).setValues(weekNumb);
   
 }

它与 foo 循环完美配合,一次转换每个单个值。但它超级慢。我的问题在于对数组使用“.substring()”公式,它似乎不起作用.. 你知道如何解决它吗?

【问题讨论】:

  • 工作表中的值是合法的日期对象吗? =date(A1) 是否为存储在单元格 A1 中的日期返回 true ?
  • 不,不幸的是它们被视为文本(因为输入日期格式已经错误)

标签: javascript java arrays google-sheets substring


【解决方案1】:

直接应用于数组时不能使用 substring()。循环获取数组中每个元素的 substring() 的唯一方法。

建议

如果您愿意更改工作表中的数据,可以尝试在数据范围内使用 createTextFinder(".").replaceAllWithText("/") 将数据转换为日期格式。一旦你有了这个,你仍然会循环进入你的新数据来获取每个日期的周数。代码如下,这是我的工作:

function CheckWeekNuber() {
   
  var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("INSERT RAW DATA HERE").getRange(3,5,300,4);
  range.createTextFinder(".").replaceAllWith("/") // converts str date to date format
  var dateFormat = range.getValues();
  var lastRow = range.getLastRow();
  var lastCol = range.getLastColumn();
  var weekNumb = [];
  for(var row in dateFormat){
    for(var column in dateFormat[row]){
      dateFormat[row][column] = Utilities.formatDate(new Date(dateFormat[row][column]), "GMT", "w");
    }
  }
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("WEEKNUMBERS").getRange(3,5,300,4).setValues(dateFormat);
}

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 2021-08-06
    • 2020-01-09
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多