获取每个数组元素的子字符串

llew8vvj  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(434)

我正在尝试将存储在googlesheets/appscript中的“dd.mm.yy”格式的数据转换为“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);

 }

它与foor循环完美结合,一次转换每个值。但速度太慢了。我的问题在于对数组使用“.substring()”公式,它似乎不起作用。。你知道怎么修吗?

1qczuiv0

1qczuiv01#

直接应用于数组时,无法使用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);
}

相关问题