自动日期脚本

时间:2017-02-17 19:02:07

标签: google-apps-script

我正在尝试创建一个脚本来自动将电子表格中的日期提前一个。有没有办法做到这一点?

例如,在我们的电子表格中,我们可能有4个不同的日期需要提前一个。

2/17/2017

2/14/2017

2/15/2017

2/18/2017.

基本上每次我想运行这个脚本时,我都希望电子表格中的所有日期都提前一个。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

我用一些财务数据对此进行了测试,看起来工作正常。它运行得相当快。

如果您想要电子表格中的所有日期,那么incrDate的第一行应该是

var rng = SpreadsheetApp.getActiveSheet().getDataRange(); 

我刚刚回去测试了那个。

这是code.gs文件的完整代码,包括菜单。所以你可能想稍微训练一下。

我是一个有趣的问题。实际上最困难的部分是找出isDate函数。 感谢

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Range Tools')
      .addItem('Increment A Date by one day','incrDate')
      .addToUi();
};

function incrDate()
{
    var rng = SpreadsheetApp.getActiveRange(); // current selection
  var rngA = rng.getValues();
  if(rng.getNumRows() > 1 && rng.getNumColumns() > 1) // two dimension array
  {
    for(var i = 0; i < rngA.length; i++)
    {
      for(var j =0; j < rngA[i].length;j++)
      {

        if(isDate(rngA[i][j]))
        {
          rngA[i][j] = new Date(rngA[i][j].getTime() + (1 * 86400000));
        }
      }
    }
  }
  if(rng.getNumRows() > 1 && rng.getNumColumns() == 1) //single column
  {
    for(var i = 0; i < rngA.length ; i++)
    {
      if(isDate(rngA[i][0]))
      {
        rngA[i][0] = new Date(rngA[i][0].getTime() + (1 * 86400000));
      }
    }

  }
    if(rng.getNumRows() == 1 && rng.getNumColumns() > 1)//single row
  {
    for(var i = 0; i < rngA[0].length ; i++)
    {
      if(isDate(rngA[0][i]))
      {
        rngA[0][i] = new Date(rngA[0][i].getTime() + (1 * 86400000));
      }
    }
  }
  if(rng.getNumRows() == 1 && rng.getNumColumns() == 1) //single cell
  {
    if(isDate(rngA[0][0]))
    {
      rngA[0][0] = new Date(rngA[0][0].getTime() + (1 * 86400000));
    }
  }
  rng.setValues(rngA);
}

function isDate (x)  
{ 
  return (null != x) && !isNaN(x) && ("undefined" !== typeof x.getDate); 
}