我正在尝试创建一个脚本来自动将电子表格中的日期提前一个。有没有办法做到这一点?
例如,在我们的电子表格中,我们可能有4个不同的日期需要提前一个。
2/17/2017
2/14/2017
2/15/2017
2/18/2017.
基本上每次我想运行这个脚本时,我都希望电子表格中的所有日期都提前一个。任何帮助表示赞赏!
答案 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);
}