我有一个应用脚本代码,可在两列中添加值,并在第三列中显示结果。即,将B列的值(持续时间)添加到D列(持续时间),结果显示在E列中。但是我的代码显示错误怎么办
function adder()
{
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet5');
var lastRow = sheet.getLastRow();
var cell = sheet.getRange('B1:B'+lastRow).getValues();
var data = sheet.getRange('D1:D'+lastRow).getValues();
for (var i = 0; i < lastRow; i++){
var value1 = cell[i][0];
var value2 = data[i][0];
var range = sheet.getRange('E'+(i+1)).setFormula(value1+value2);
var formattedDate = Utilities.formatDate(new Date(range.getValue()), 'GMT', 'dd/MM/yyyy
HH:mm:ss');
}
sheet.getRange('E' + (i+1).toString()).setValue(formattedDate);
}
function dateAdd()
{
var ss =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet5');
var range = ss.getRange('E23').setFormula('D23+B23');
var formattedDate = Utilities.formatDate(range.getValue(), 'GMT',
'dd/MM/yyyy HH:mm:ss');
}
以上代码仅适用于一行,我想将其设置为循环。
答案 0 :(得分:1)
您的失败是value1 + value2将变成文本
因此,我对您的脚本进行了一些修改(我的+0和+8,我认为是您的区域,请更改):
function adder()
{
var sheet = SpreadsheetApp.getActive().getSheetByName('Log');
var lastRow = sheet.getLastRow();
var cell = sheet.getRange('C2:C'+lastRow).getValues();
var data = sheet.getRange('D2:D'+lastRow).getValues();
for (var i = 0; i < lastRow-1; i++){
var value1 = cell[i][0];
var value2 = data[i][0];
var d = value1;
d.setHours(value1.getHours()+value2.getHours()+0);
d.setMinutes(value1.getMinutes()+value2.getMinutes()+8);
var range = sheet.getRange('E'+(i+2)).setValue(d);
}
}
我的更新:
function adder()
{
var sheet = SpreadsheetApp.getActive().getSheetByName('Log');
var lastRow = sheet.getLastRow();
var cell = sheet.getRange('B1:B'+lastRow).getValues();
var data = sheet.getRange('D1:D'+lastRow).getValues();
for (var i = 0; i < lastRow; i++){
var value1 = cell[i][0];
var value2 = data[i][0];
var d = value1;
d.setHours(value1.getHours()+value2.getHours()+0);
d.setMinutes(value1.getMinutes()+value2.getMinutes()+8);
var range = sheet.getRange('E'+(i+1)).setValue(d);
}
}
答案 1 :(得分:1)
尝试一下:
在读取数据并使用Range.getDisplayValue()s之前,将持续时间列重新格式化为“#。##########”,然后将其格式化为“ [h]:mm:ss”不要碰到字符串和数字的问题。
function runThree() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet5');
var rgB=sh.getRange(2,2,sh.getLastRow()-1,1);
var rgD=sh.getRange(2,4,sh.getLastRow()-1,1);
var rgE=sh.getRange(2,5,sh.getLastRow()-1,1);
rgE.clearContent();
rgB.setNumberFormat("#.##########");//increased precision improves round off
rgD.setNumberFormat("#.##########");
var vB=rgB.getDisplayValues();
var vD=rgD.getDisplayValues();
rgB.setNumberFormat("[h]:mm:ss");
rgD.setNumberFormat("[h]:mm:ss");
var vE=[];
SpreadsheetApp.flush();
for(var i=0;i<vB.length;i++){
var sum=vB[i][0]+vD[i][0];
vE.push([Number(vB[i][0])+Number(vD[i][0])%24]);
}
rgE.setValues(vE);
rgE.setNumberFormat("[h]:mm:ss")
}
运行前的第5页:
运行后显示第5页:
我惊讶地发现持续时间将显示高达1150小时的小时值。