-2

编辑:2020.07.24。这是一个电子表格,您可以在其中看到我的问题。 https://docs.google.com/spreadsheets/d/1-knADrKsStLz5lS_9gayHpZFcaZPsEbBMmrpOGXGMqg/edit?usp=sharing

我有一个电子表格(我不能分享),用脚本制作了我自己的自定义函数。

=cutomF(A1,A2,A3)  
A1 = 8:00  (1899.12.30.08:00)
A2 = 16:00 (1899.12.30.16:00)
A3 = 05:00 (1899.12.30.05:00)

在脚本中,如果我只用其中两个时间(如 A2-A1)进行计算,它会返回一个正确的数字,我需要除以 /1000/60/60/24

但如果我想计算这个:A2-A3-A1 它只会返回极端错误的数字。

有什么可能是错的?

编辑:代码从我的语言稍微改写为英语......

在电子表格单元格中有这样的时间内容 08:00;

我想存档类似工人之间的比较的东西。

function CUSTOM_WORK_TIME(ROW_DATA,DAY,KM,ADDRESS,AVERAGE_KM,AVERAGE_ADDRESS,AVERAGE_TIME){
    
    if(ROW_DATA[0][0]!=""){
        Utilities.sleep(50);

        var WORK_TIME;
        var WORK_OVERTIME;
        var WORK_TIME_WEEKEND = ((ROW_DATA[0][2]-ROW_DATA[0][1])/1000/60/60/24);

        var return_array = [[]];

        var KM_RATE = ((KM/AVERAGE_KM)*0.33);
        var ADDRESS_RATE = ((ADDRESS/AVERAGE_ADDRESS)*0.33);
        var TIME_RATE = ((ROW_DATA[0][2]-ROW_DATA[0][1])/AVERAGE_TIME)*0.34;
        var PRINT_THIS;
        
        PRINT_THIS = (ROW_DATA[0][2]-ROW_DATA[0][1])/1000/60/60/24; // JUST FOR TESTING

        switch (ROW_DATA[0][0]){
            case "TRANSPORT":
            if(ROW_DATA[0][2]!="" && ROW_DATA[0][1]!=""){
                
                Utilities.sleep(100);
                
                if(DAY=="SATURDAY" || DAY=="SUNDAY"){
                    return_array[0][0] = "";
                    return_array[0][1] = "";
                    return_array[0][2] = WORK_TIME_WEEKEND;
                    return return_array;
                }else{
                    Utilities.sleep(200);
                    
                    WORK_TIME = ((ROW_DATA[0][2]-ROW_DATA[0][1])/1000/60/60/24);
                    if(WORK_TIME >(9/24)){
                        WORK_OVERTIME = (((ROW_DATA[0][2]-ROW_DATA[0][1])/1000/60/60/24) - (9/24))*(TIME_RATE+KM_RATE+ADDRESS_RATE);
                        WORK_TIME = (9/24);
                        return_array[0][0] = WORK_TIME;
                        return_array[0][1] = WORK_OVERTIME;
                        return_array[0][2] = "";
                        return return_array;
                        // return PRINT_THIS;
                    }else{
                        return_array[0][0] = WORK_TIME*(TIME_RATE+KM_RATE+ADDRESS_RATE);
                        return_array[0][1] = "";
                        return_array[0][2] = "";
                        return return_array;
                    }
                }
            }else{return "H";}

            break;
     
            default:
            break;
        }
    } 
}
4

1 回答 1

0

我想我已经弄清楚了你的问题的原因。我在您的工作表中添加了一个选项卡 Munkalap1-GK,我在其中展示了我的逻辑。要获得 9:54(9 小时 54 分钟)的值,我必须更改您的公式,并更改您的单元格格式。我添加的 customF2GK 函数使用的新公式是:

function customF2(AVERAGE,START,END,WORK_RATIO) {
  return ((END-START)/AVERAGE)*WORK_RATIO*AVERAGE;}

其次,如果单元格格式为 hh:mm ss.sss 或类似的格式,则计算失败。将它们格式化为纯数字,即一天的一小部分,并且公式有效。如果您愿意,可以使用隐藏单元格来保存传递给函数的数值。隐藏的单元格将仅指向当前单元格,例如。A2、B2、C2,但格式为数字,而不是 hh:mm ss.sss。如果您不清楚,请告诉我。

在表格中处理时间时,我发现最容易在一天内工作,以防万一还涉及日期。但是,如果您知道您只处理时间而不是日期,它也可以只使用几个小时和一个小时的一小部分(不是分钟)来完成。

让我知道这是否适合您。如果是这样,您将需要调整 customF1 和 customF3 函数以使用可比较的逻辑。

于 2020-07-24T23:56:43.247 回答