【发布时间】:2021-12-21 16:36:46
【问题描述】:
我已经修改了一个打卡系统的脚本,添加了一个函数,该函数从 Schedule_data 表中的 AQ1 单元格中获取一个值,并将其放在 Break_data 表的 E 列中,最后一个空行与单独单元格中的其他数据一起。 我遇到的问题是有时单元格内容被复制过来,有时我得到#VALUE!而是错误。我尝试从引用的单元格中删除公式,只留下纯文本,但得到了相同的结果。将 getValue() 更改为 getDisplayValue() 也没有改变结果。在 if/else 语句之后清除记录器也没有帮助。该错误似乎没有任何模式出现。原始脚本仍然可以正常工作,并且始终在其各自的 A、B、C、D 列中生成数据,但恐怕我对应用程序脚本的了解不够,无法有效地对其进行故障排除。
这是我目前所拥有的:
function cellRange(value) {
return
SpreadsheetApp.getActive().getSheetByName('Schedule_data').getRange(value).getDisplayValue();
}
function setValue(cellName, value) {
SpreadsheetApp.getActive().getSheetByName('Break_data').getRange(cellName).setValue(value);
}
function getValue(cellName) {
return
SpreadsheetApp.getActive().getSheetByName('Break_data').getRange(cellName).getValue();
}
function getNextRow() {
return SpreadsheetApp.getActive().getSheetByName('Break_data').getLastRow() + 1;
}
function addRecord(a, b, c, d, e) {
var row = getNextRow();
setValue('A' + row, a);
setValue('B' + row, b);
setValue('C' + row, c);
setValue('D' + row, d);
setValue('E' + row, e);
}
function pause() {
var sheet = SpreadsheetApp.getActive().getSheetByName('Break_data');
var lastRow = sheet.getLastRow();
var setColumn = 2;
var inORout = sheet.getRange(lastRow, setColumn).getValue();
Logger.log(inORout);
if(inORout == 'Pause'){
return;
}
else
var formatDate = Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "h:mma");
var fullDate = Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "MM/dd/yy");
setValue('d1', Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "EEEE"));
addRecord(getValue('d1'),'Pause', formatDate, fullDate, cellRange('aq1'));
}
function resume() {
var sheet = SpreadsheetApp.getActive().getSheetByName('Break_data');
var lastRow = sheet.getLastRow();
var setColumn = 2;
var inORout = sheet.getRange(lastRow, setColumn).getValue();
Logger.log(inORout);
if(inORout == 'Resume'){
return;
}
else
var formatDate = Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "h:mma");
var fullDate = Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "MM/dd/yy");
setValue('d1', Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "EEEE"));
addRecord(getValue('d1'),'Resume', formatDate, fullDate, cellRange('aq1'));
}
尽管它在所附图像中看起来如何,但添加的 E 列与一周中的当前日期无关或与 A 列相关,而是显示项目的开始日期,有时可能持续时间比天。
【问题讨论】:
标签: google-apps-script google-sheets copy-paste valueerror getvalue