【发布时间】:2020-04-02 13:27:34
【问题描述】:
我正在编写一个函数,它将在电子表格中搜索员工工作时间的天数,创建一个包含工作编号、工作名称、员工姓名、小时数和日期的值的数组,然后将它们放到另一个电子表格中。它还只显示过去 8 天内的小时数,以便在我们必须报告小时数的一周内计算出时间(我将其安排为在到期日运行)。我也一直在过滤掉空白时间的日子,这限制了被复制的数据量。
我遇到了一个问题,一名员工跳过空白时间的功能不起作用。对于其他员工,我已经能够使用“”来表示一个空单元格。我也尝试使用 (null) 作为一个值,但这只会忽略 7 天中的 6 天(它仍然记录没有与计算一周中小时数的单元格相邻的小时数的天数)。
我不明白为什么这不适用于整个 Google 表格文档中的 一个 表格。我已经简化了我的电子表格以减少个人信息,并使解析脚本更容易,但在我的原始文档中,我跟踪了 6 名使用类似代码的员工,只有一名员工出现了这个问题。
https://docs.google.com/spreadsheets/d/1ve0EPVQJ2vmWG1NYHMncw1ZljP3yXd28dMeNC38Jiy4/edit?usp=sharing
是电子表格的链接。代码如下。
function shoptime(){
var ss = SpreadsheetApp.getActive().getId();
var stephensheet = Sheets.Spreadsheets.Values.get(ss, 'Stephen!A2:G');
var tiffanysheet = Sheets.Spreadsheets.Values.get(ss, 'Tiffany!A2:G');
var scripts = SpreadsheetApp.getActive().getSheetByName("Scripts");
var currentDate = new Date();
var pastweek = new Date();
pastweek.setDate(currentDate.getDate() -8);
var array=[];
for (var a = 0; a < stephensheet.values.length; a++){
var jobdate = stephensheet.values[a][1];
var intime = stephensheet.values[a][2];
var outtime = stephensheet.values[a][3];
var dailyhours = stephensheet.values[a][4];
if (new Date(jobdate) > pastweek){
if (dailyhours != (null)){
array.push(["NA","Office","Stephen",dailyhours,jobdate]);
}
}
}
for (var a = 0; a < tiffanysheet.values.length; a++){
var jobdate = tiffanysheet.values[a][1];
var intime = tiffanysheet.values[a][2];
var outtime = tiffanysheet.values[a][3];
var dailyhours = tiffanysheet.values[a][4];
if (new Date(jobdate) > pastweek){
if (dailyhours != ("")){
array.push(["NA","Office","Tiffany",dailyhours,jobdate]);
}
}
}
if(array[0]){
scripts.getRange(scripts.getLastRow()+1,1,array.length,5).setValues(array);
}
SpreadsheetApp.flush();
}
【问题讨论】:
-
哪个显示问题?
-
Stephen 的行没有跳过没有时间的日期。
-
@StephenSchonewolf 你检查过脚本中
dailyhours的值吗?通过调试器运行或记录值及其类型?另外,我知道您发布的脚本已被删减,但使用高级表格服务而不是标准服务是否有特殊原因? -
好的,我现在看到了问题。是否有任何特殊原因需要您使用高级 API 而不是内置在一个 SpreadsheetApp 中?更改代码以使用内置服务时,它会按预期工作。
-
@Diego 我运行了“每日时间”的日志。它将值设为空...除了周期中的第 7 天,该单元格旁边的单元格将过去 7 天添加为每周总计。我使用高级表格纯粹是出于习惯,因为那是我大约一年前发现使用行迭代器的第一个示例的地方。我一直在尝试以其他方式做到这一点,但没有成功。在脚本的其余部分,我还从许多谷歌表格中提取数据并创建一个数组,为其他员工提供工作#、小时数等。
标签: if-statement google-apps-script google-sheets null iterator