javascript - Google 工作表日期由 toString() 存储为字符串,在写回单元格时不会被识别为日期?

标签 javascript google-sheets

我有一张每天添加数千个值的工作表。为了保持小而灵活,它定期将数据行作为逗号分隔值存储在单独的工作表上。我在所有单元格上使用 toString() 遍历每一行。

当检索所需数据并将其重新打印到新工作表时,工作表不会将字符串识别为日期。 例如2019 年 3 月 29 日星期五 13:45:06 GMT-0700(PDT)

我的解决方法是在检索字符串时对其进行切片,我只是想知道为什么他们不将标准日期字符串识别为日期。

function compressData() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var arr = sheet.getRange(1,1,2,2).getValues();
  var arrNew = []; 
  var arrRow =[];
  var arrExpanded;

  for (var i in arr) {
    for (var x in arr[i]) {
      arrRow.push(arr[x][i]);
    }
    arrNew.push([arrRow[i].toString()]);
  } 
  // stores each row of the original array as a 
  // comma separated string in a new array

  sheet.getRange(1, 3, arrNew.length, arrNew[0].length).setValues(arrNew); 
  // writes the new array to a new range
}

function expandData(){
  // prints the arrays onto a new range and the new date 
  // cell isn't recognized as a date

  var arrExpanded = [];
  var sheet = SpreadsheetApp.getActiveSheet();
  var arrCompressed = sheet.getRange(1,3,2,1).getValues();

  for (var i in arrCompressed) {
    var arrTemp = arrCompressed.toString().split(',');
    arrExpanded.push(arrTemp);
  }
  // rebuilds the 2d array

 sheet.getRange(1, 4, arrExpanded.length, arrExpanded[0].length).setValues(arrExpanded); 
}

最佳答案

您从字符串中提取日期值,并且想知道为什么 Google 表格无法将标准日期字符串识别为日期。

原因是您在屏幕上看到的日期实际上是一个数字,milliseconds from the Unix epoch .它只是被格式化显示,因此它“看起来像”一个由文本组成的日期。

要将日期字符串转换为 Google 表格将识别为日期的值,您需要对其进行转换。下面的代码提供了一个简单的例子:

在下面的屏幕截图中,Cell B1 中的值是一个字符串;该值是单元格 C1 是日期值。注意单元格 C5 中显示的实际数据值(数字)(此单元格的格式为“数字”);


function so5842277201() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetname = "Sheet1";
  var sheet = ss.getSheetByName(sheetname);

  var datestring = sheet.getRange("A1").getValue();
  Logger.log(datestring);

  var date01 = new Date(datestring);
  Logger.log(date01);
  var date02 = Utilities.formatDate(date01,"GMT-7", "EEE MMM d yyyy HH:mm:ss");
  var newdaterange = sheet.getRange("C1");
  newdaterange.setValue(date02);
}

截图

enter image description here

关于javascript - Google 工作表日期由 toString() 存储为字符串,在写回单元格时不会被识别为日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58422772/

相关文章:

android - 谷歌表格 API : How to find a row by value and update it's content

google-apps-script - 文件存在的 Google Script 测试

javascript - HTTP请求删除记录,然后从数组中删除obj Vue.js

javascript - 全屏标题图片

javascript - (更改)事件不适用于选择和输入元素,但适用于复选框 Angular 6、Material 6

javascript - 无法在 iMacros 中使用 javascript 捕获屏幕截图

javascript - 无法使用 this.ParentNode 从 HTML 页面调用 Google 脚本

javascript - 从 API 检索到的重音字符在 ReactJS 中不起作用

java - Google 电子表格 API - 获取永久访问 token

正则表达式从列表中提取所有组作为 arrayformula