回答編集履歴

3

修正

2021/10/21 14:06

投稿

退会済みユーザー
test CHANGED
@@ -426,21 +426,33 @@
426
426
 
427
427
  var row = sourceData[i];
428
428
 
429
-
429
+
430
430
 
431
431
  // エラー調査用
432
432
 
433
- Logger.log((i+1)+"行目を処理中");
433
+ //Logger.log((i+1)+"行目を処理中");
434
-
434
+
435
- Logger.log("1列目の値="+row[0]);
435
+ //Logger.log("1列目の値="+row[0]);
436
-
436
+
437
- Logger.log("1列目の型="+Object.prototype.toString.call(row[0]));
437
+ //Logger.log("1列目の型="+Object.prototype.toString.call(row[0]));
438
-
438
+
439
- Logger.log("2列目の値="+row[1]);
439
+ //Logger.log("2列目の値="+row[1]);
440
-
440
+
441
- Logger.log("2列目の型="+Object.prototype.toString.call(row[1]));
441
+ //Logger.log("2列目の型="+Object.prototype.toString.call(row[1]));
442
+
443
+
444
+
442
-
445
+ // A列とB列から日付時刻データを計算。
446
+
443
-
447
+ var targetDateTime = getDateTime(row[0], row[1]);
448
+
449
+ if (targetDateTime == null) {
450
+
451
+ Logger.log((i+1) + '行目で日付/時刻の変換に失敗したため、スキップします。\nA列=' + row[0] + '\nB列=' + row[1]);
452
+
453
+ continue;
454
+
455
+ }
444
456
 
445
457
 
446
458
 
@@ -448,98 +460,122 @@
448
460
 
449
461
  var duration = Math.floor(baseDateTime.getTime() / 1000) -
450
462
 
463
+ Math.floor(targetDateTime.getTime() / 1000);
464
+
465
+
466
+
467
+ // 当日の7:30との差が、0秒より大きく24時間以下の場合は、書き込み用の配列に加える
468
+
469
+ if (duration > 0 && duration <= 60 * 60 * 24) {
470
+
471
+ outputValues.push(row);
472
+
473
+ }
474
+
475
+ }
476
+
477
+
478
+
479
+ // 日誌用シートのB列6行目以降にデータを書き込む
480
+
481
+ if (outputValues.length > 0) {
482
+
483
+ fS_Nissi.getRange(6, 2, outputValues.length, 7).setValues(outputValues);
484
+
485
+ Logger.log(outputValues.length +'件のデータを書き込みました。');
486
+
487
+ } else {
488
+
489
+ Logger.log('対象データは0件でした。')
490
+
491
+ }
492
+
493
+ Logger.log('処理が完了しました。')
494
+
495
+ }
496
+
497
+
498
+
499
+
500
+
501
+ /************************************************
502
+
503
+ * 日付と時刻のセルから、対応する日時データを返す。
504
+
505
+ *
506
+
507
+ * 引数:
508
+
509
+ * date : Date : 日付
510
+
511
+ * time : Date : 時刻
512
+
513
+ *
514
+
515
+ * 返り値:
516
+
517
+ *  :正常に処理できた場合:指定された date と timeに対応するDateオブジェクト
518
+
519
+ *  :日付時刻への変換に失敗した場合:null
520
+
521
+ * ***********************************************/
522
+
523
+ function getDateTime(date, time) {
524
+
525
+ try {
526
+
527
+ var hour = time.getHours();
528
+
529
+ var minute = time.getMinutes();
530
+
531
+ date.setHours(hour);
532
+
533
+ date.setMinutes(minute);
534
+
535
+ return date;
536
+
537
+ } catch (err) {
538
+
539
+ Logger.log(err.toString());
540
+
541
+ return null;
542
+
543
+ }
544
+
545
+ }
546
+
547
+ ```
548
+
549
+
550
+
551
+ #補足
552
+
553
+  
554
+
555
+ ・getTime()関数は、過去のある一時点(1970年1月1日午前0時0分0秒)から指定した日時までのミリ秒数を返します。
556
+
557
+
558
+
559
+ ```
560
+
561
+ var duration = Math.floor(baseDateTime.getTime() / 1000) -
562
+
451
563
  Math.floor(getDateTime(row[0], row[1]).getTime() / 1000);
452
564
 
453
-
454
-
455
- // 当日の7:30との差が、0秒より大きく24時間以下の場合は、書き込み用の配列に加える
456
-
457
- if (duration > 0 && duration <= 60 * 60 * 24) {
458
-
459
- outputValues.push(row);
460
-
461
- }
462
-
463
- }
464
-
465
-
466
-
467
- // 日誌用シートのB列6行目以降にデータを書き込む
468
-
469
- fS_Nissi.getRange(6, 2, outputValues.length, 7).setValues(outputValues)
470
-
471
- }
472
-
473
-
474
-
475
-
476
-
477
- /************************************************
478
-
479
- * 日付と時刻のセルから、対応する日時データを返す。
480
-
481
- *
482
-
483
- * 引数:
484
-
485
- * date : Date : 日付
486
-
487
- * time : Date : 時刻
488
-
489
- *
490
-
491
- * 返り値:Date
492
-
493
- *  :指定されたdate と timeに対応するDateオブジェクト
494
-
495
- * ***********************************************/
496
-
497
- function getDateTime(date, time) {
498
-
499
- var hour = time.getHours();
500
-
501
- var minute = time.getMinutes();
502
-
503
- date.setHours(hour);
504
-
505
- date.setMinutes(minute);
506
-
507
- return date;
508
-
509
- }
510
-
511
- ```
565
+ ```
512
-
513
-
514
-
566
+
515
- #補足
567
+ の部分は、このgetTime()関数を利用して、基準となる日時(当日の7時30分)と、セルから得た日付・時刻の差を計算しています。
516
568
 
517
569
   
518
570
 
519
- getTime()関数過去のある一(1970年1月1日午前0時0分0秒)から指定した日時までのミリ秒数を返します。
571
+ getDateTime(row[0], row[1]) はオリジナルの関数日付セル(row[0])と刻セルrow[1])から、対応する日時を表すDateオブジェクトを返す関数です
520
-
521
-
522
-
523
- ```
524
-
525
- var duration = Math.floor(baseDateTime.getTime() / 1000) -
526
-
527
- Math.floor(getDateTime(row[0], row[1]).getTime() / 1000);
528
-
529
- ```
530
-
531
- の部分は、このgetTime()関数を利用して、基準となる日時(当日の7時30分)と、セルから得た日付・時刻の差を計算しています。
532
572
 
533
573
   
534
574
 
535
- getDateTime(row[0], row[1]) はオリジナルの関数で、日付セル(row[0])と時刻セル(row[1])から、対応する日時を表すDateオブジェクトを返す関数です。
536
-
537
575
   
538
576
 
539
577
   
540
578
 
541
-  
542
-
543
579
  ・(追記)日付形式・時刻形式のセルでないと、getHours()やgetMinutes()等の関数がエラーになるようなので、
544
580
 
545
581
  getValuesの前にあらかじめA列とB列の表示形式を変えます。

2

ログ用コード追加

2021/10/21 14:06

投稿

退会済みユーザー
test CHANGED
@@ -428,6 +428,22 @@
428
428
 
429
429
 
430
430
 
431
+ // エラー調査用
432
+
433
+ Logger.log((i+1)+"行目を処理中");
434
+
435
+ Logger.log("1列目の値="+row[0]);
436
+
437
+ Logger.log("1列目の型="+Object.prototype.toString.call(row[0]));
438
+
439
+ Logger.log("2列目の値="+row[1]);
440
+
441
+ Logger.log("2列目の型="+Object.prototype.toString.call(row[1]));
442
+
443
+
444
+
445
+
446
+
431
447
  // 当日の7:30との差(秒)を計算
432
448
 
433
449
  var duration = Math.floor(baseDateTime.getTime() / 1000) -

1

修正

2021/10/21 13:01

投稿

退会済みユーザー
test CHANGED
@@ -372,6 +372,16 @@
372
372
 
373
373
 
374
374
 
375
+ // 追加
376
+
377
+ fbSheet.getRange('A:A').setNumberFormat('yyyy/MM/dd'); // A列の表示形式を日付形式にする。
378
+
379
+ fbSheet.getRange('B:B').setNumberFormat('H:mm'); // B列の表示形式を時刻形式にする。
380
+
381
+
382
+
383
+
384
+
375
385
  //----------定義----------//
376
386
 
377
387
  var okData_days = [] //発生日時の格納先
@@ -490,7 +500,7 @@
490
500
 
491
501
   
492
502
 
493
- getTime()関数は、過去のある一時点(1970年1月1日午前0時0分0秒)から指定した日時までのミリ秒数を返します。
503
+ getTime()関数は、過去のある一時点(1970年1月1日午前0時0分0秒)から指定した日時までのミリ秒数を返します。
494
504
 
495
505
 
496
506
 
@@ -507,3 +517,35 @@
507
517
   
508
518
 
509
519
  getDateTime(row[0], row[1]) はオリジナルの関数で、日付セル(row[0])と時刻セル(row[1])から、対応する日時を表すDateオブジェクトを返す関数です。
520
+
521
+  
522
+
523
+  
524
+
525
+  
526
+
527
+ ・(追記)日付形式・時刻形式のセルでないと、getHours()やgetMinutes()等の関数がエラーになるようなので、
528
+
529
+ getValuesの前にあらかじめA列とB列の表示形式を変えます。
530
+
531
+ ```diff
532
+
533
+ + // 追加
534
+
535
+ + fbSheet.getRange('A:A').setNumberFormat('yyyy/MM/dd'); // A列の表示形式を日付形式にする。
536
+
537
+ + fbSheet.getRange('B:B').setNumberFormat('H:mm'); // B列の表示形式を時刻形式にする。
538
+
539
+
540
+
541
+
542
+
543
+ //----------定義----------//
544
+
545
+ var okData_days = [] //発生日時の格納先
546
+
547
+ var aValues = fbSheet.getRange('A:A').getValues(); //"障害報告"の"発生日時"部分の値を全て取得
548
+
549
+ var lastRow = aValues.filter(String).length; //空白の要素を除いた長さを取得
550
+
551
+ ```