मैं एक पूर्ण नौसिखिया हूं और बस एक ऐसा इंटरफ़ेस बनाने की कोशिश कर रहा हूं जिसका उपयोग मेरे परिवार के बाकी लोग बजट बनाने के लिए कर सकें। केवल एक चीज जिससे मैं जूझ रहा हूं, वह है कुछ कोशिकाओं के लिए अंतिम संशोधित तिथि का स्वचालन। जब भी मैं कोड को ऐड-ऑन के रूप में चलाता हूं तो यह केवल पहले स्टेटमेंट में निर्दिष्ट कॉलम 7 को संशोधित करता है, भले ही मैं कॉलम 10,11,15, आदि में कोड दर्ज करता हूं। प्रतीत होता है कि अन्य "अन्य अगर" बयानों को अनदेखा कर रहा है।

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 मई 2021, 08:52

3 जवाब

सबसे बढ़िया उत्तर
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
Cooper 12 मई 2021, 09:53
if ( col === 5,6 ) {
    ...
}

के बराबर है

if ( 6 ) {
    ...
}

जहां अगर कथन हमेशा सत्य होता है क्योंकि 6 एक सत्य मान है

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' );
}

यह जांचने के लिए कि दी गई संख्या संख्याओं की सूची में है या नहीं, आप या तो कर सकते हैं:

  1. उनकी अलग से तुलना करें
if ( ( col === 5 || col === 6 ) && /* the rest of your logic here */ ) {
    ...
}
  1. संख्याओं को एक Array में रखें और indexOf से मेल खाने वाली संख्या ढूंढें ताकि आप भविष्य में आसानी से मिलान करने के लिए अधिक कॉलम नंबर जोड़ सकें।
if ( [ 5, 6 ].indexOf( col ) !== -1 && /* the rest of your logic here */ ) {
    ...
}

साथ ही, आपको प्रत्येक if स्टेटमेंट में row > 3 && e.source.getActiveSheet().getName() === "2021" चेक करने की जरूरत नहीं है। इसे एक बार जांचें और मेल खाने वाले कॉलम की जांच के लिए आगे बढ़ें

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 मई 2021, 09:18

अपने कोड को छोटा करने और दोहराए जाने वाले तारों को हटाने का दूसरा तरीका

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) - यह स्थिति जांच करेगी कि वर्तमान कॉलम arrOfCols कॉलम की सूची में है या नहीं (5,10,15,20,25,30,35,40,45,50,55,60) - अगर हां, तो दाईं ओर दो कॉलम ऑफसेट करें और टाइमस्टैम्प लिखें e.range.offset(0,2).setValue(new Date())

'if (arrOfCols.indexOf(col-1)>-1)' - यह स्थिति जांच करेगी कि क्या वर्तमान कॉलम arrOfCols कॉलम (6,11,16,21,26,31,36) की सूची में है। ,41,46,51,56,61) - अगर हां, तो एक कॉलम को दाईं ओर ऑफसेट करें और टाइमस्टैम्प लिखें e.range.offset(0,1).setValue(new Date())

0
Sergey 12 मई 2021, 09:27