Saya seorang pemula yang lengkap dan hanya mencoba membuat antarmuka yang dapat digunakan oleh keluarga saya yang lain untuk penganggaran. Satu-satunya hal yang saya perjuangkan adalah otomatisasi tanggal modifikasi terakhir untuk sel-sel tertentu. Setiap kali saya menjalankan kode sebagai add-on, itu hanya mengubah kolom 7 seperti yang ditentukan dalam pernyataan pertama bahkan jika saya memasukkan kode ke dalam kolom 10,11,15, dll. tampaknya mengabaikan pernyataan "lain jika" lainnya.

function onEdit(e) {
  var row = e.range.getRow();
  var col = e.range.getColumn();
  
  if(col === 5,6 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,7).setValue(new Date());
  } 
  else if(col === 10,11 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,12).setValue(new Date());
  } 
  else if(col === 15,16 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,17).setValue(new Date());
  } 
  else if(col === 20,21 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,22).setValue(new Date());
  } 
  else if(col === 25,26 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,27).setValue(new Date());
  } 
  else if(col === 30,31 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,32).setValue(new Date());
  } 
  else if(col === 35,36 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,37).setValue(new Date());
  } 
  else if(col === 40,41 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,42).setValue(new Date());
  } 
  else if(col === 45,46 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,47).setValue(new Date());
  } 
  else if(col === 50,51 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,52).setValue(new Date());
  } 
  else if(col === 55,56 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,57).setValue(new Date());
  } 
  else if(col === 60,61 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,62).setValue(new Date());
  } 
}

0
EmmaBars 12 Mei 2021, 08:52

3 jawaban

Jawaban Terbaik
function onEdit(e) {
  const sh = e.range.getSheet();
  const cA1 = [5,6,10,11,15,16,20,21,25,26,30,31,35,36,40,41,45,46,50,51,55,56,60,61]
  const cA2 = [7,7,12,12,17,17,22,22,27,27,32,32,37,37,42,42,47,47,52,52,57,57,62,62]
  const idx = cA1.indexOf(e.range.columnStart);
  if( sh.getName() == "2021" && e.range.rowStart>3 && ~idx ) {
    sh.getRange(e.range.rowStart, cA2[idx] ).setValue(new Date());
  }
}
0
MetaMan 12 Mei 2021, 06:53

Cara lain untuk mempersingkat kode Anda dan menghapus string berulang

function onEdit(e) {
      var row = e.range.getRow(),
          col = e.range.getColumn(),
          arrOfCols = [5,10,15,20,25,30,35,40,45,50,55,60];
    
      if (row > 3 && e.source.getActiveSheet().getName() === "2021") {
        if (arrOfCols.indexOf(col)>-1) e.range.offset(0,2).setValue(new Date());   
        if (arrOfCols.indexOf(col-1)>-1) e.range.offset(0,1).setValue(new Date())
      }
    }

if (arrOfCols.indexOf(col)>-1) - kondisi ini akan memeriksa apakah kolom saat ini ada dalam daftar kolom arrOfCols (5,10,15,20,25,30,35,40,45,50,55,60) - jika ya, maka offset dua kolom di sebelah kanan dan tulis timestamp e.range.offset(0,2).setValue(new Date())

'if (arrOfCols.indexOf(col-1)>-1)' - kondisi ini akan memeriksa apakah kolom saat ini ada dalam daftar kolom arrOfCols (6,11,16,21,26,31,36 ,41,46,51,56,61) - jika ya, maka offset satu kolom ke kanan dan tulis timestamp e.range.offset(0,1).setValue(new Date())

0
Sergey 12 Mei 2021, 06:27
if ( col === 5,6 ) {
    ...
}

Setara dengan

if ( 6 ) {
    ...
}

Di mana pernyataan if selalu benar karena 6 adalah nilai kebenaran

var col = 1; // Let's take 1 for example

if ( col === 5,6 ) {
  console.log( 'Matches first if condition' );
}

if ( 6 ) {
  console.log( 'Matches second if condition' );
}

if ( col === 5 ) {
  console.log( 'Matches third if condition' );
}

Untuk memeriksa apakah nomor yang diberikan ada dalam daftar nomor, Anda dapat:

  1. Bandingkan secara terpisah
if ( ( col === 5 || col === 6 ) && /* the rest of your logic here */ ) {
    ...
}
  1. Masukkan nomor ke dalam Array dan temukan nomor yang cocok dengan indexOf sehingga Anda dapat menambahkan lebih banyak nomor kolom yang ingin Anda cocokkan dengan mudah di masa mendatang
if ( [ 5, 6 ].indexOf( col ) !== -1 && /* the rest of your logic here */ ) {
    ...
}

Selain itu, Anda tidak perlu melakukan pemeriksaan row > 3 && e.source.getActiveSheet().getName() === "2021" di setiap pernyataan if. Periksa sekali dan lanjutkan untuk memeriksa kolom yang cocok

var row         = e.range.getRow();
var col         = e.range.getColumn();
var activeSheet = e.source.getActiveSheet();
var currentDate = new Date();

if ( row > 3 && e.source.getActiveSheet().getName() === "2021" ) {
    if ( col === 5 || col === 6 ) {
        activeSheet.getRange( row, 7 ).setValue( currentDate );
    }

    if ( col === 10 || col === 11 ) {
        activeSheet.getRange( row, 12 ).setValue( currentDate );
    }

    ...
}
0
Thum Choon Tat 12 Mei 2021, 06:18