सेल कैसे हटाएं और Google शीट्स में समान विवरण फिर से दर्ज करें

Jan 12 2021

मैं वर्तमान में स्टॉक मूल्य के डेटा लाने को स्वचालित करने का एक तरीका बना रहा हूं ..

सबसे पहले, मैंने सोचा था कि सेल के मूल्य को अपडेट करने के लिए, मुझे सिर्फ सेल में importxml स्टेटमेंट को रिफ्रेश करना होगा। इसलिए मैंने समय-समय पर IMPORTXML () स्प्रेडशीट फ़ंक्शन से इस कोड का उपयोग किया

function RefreshImports() {
  var lock = LockService.getScriptLock();
  if (!lock.tryLock(5000)) return;             // Wait up to 5s for previous refresh to end.
  // At this point, we are holding the lock.

  var id = "YOUR-SHEET-ID";
  var ss = SpreadsheetApp.openById(id);
  var sheets = ss.getSheets();

  for (var sheetNum=0; sheetNum<sheets.length; sheetNum++) {
    var sheet = sheets[sheetNum];
    var dataRange = sheet.getDataRange();
    var formulas = dataRange.getFormulas();
    var tempFormulas = [];
    for (var row=0; row<formulas.length; row++) {
      for (col=0; col<formulas[0].length; col++) {
        // Blank all formulas containing any "import" function
        // See https://regex101.com/r/bE7fJ6/2
        var re = /.*[^a-z0-9]import(?:xml|data|feed|html|range)\(.*/gi;
        if (formulas[row][col].search(re) !== -1 ) {
          tempFormulas.push({row:row+1,
                             col:col+1,
                             formula:formulas[row][col]});
          sheet.getRange(row+1, col+1).setFormula("");
        }
      }
    }

    // After a pause, replace the import functions
    Utilities.sleep(5000);
    for (var i=0; i<tempFormulas.length; i++) {
      var cell = tempFormulas[i];
      sheet.getRange( cell.row, cell.col ).setFormula(cell.formula)
    }

    // Done refresh; release the lock.
    lock.releaseLock();
  }
}

जाहिरा तौर पर, यह सेल को अपडेट नहीं करता है .. इसलिए मैंने पाया कि सेल को रिफ्रेश करने के लिए, मुझे इसकी आवश्यकता है

  1. स्टॉक का नाम हटाएं
  2. स्टॉक का नाम फिर से दर्ज करें

यहाँ एक वीडियो दिखाया जा रहा है जिसका मैं मतलब है (बस इसे स्पष्ट करने के लिए) https://streamable.com/eciks0

मैं इसे कैसे स्वचालित कर सकता हूं, शायद Google शीट स्क्रिप्ट का उपयोग कर रहा हूं?

जी शुक्रिया


EDIT: यहां Google शीट की एक प्रति काम कर रही है

https://docs.google.com/spreadsheets/d/1BFz3LHWEw-wT9exJv558mAFOv-fIKPINaplmzRY24kw/edit?usp=sharing

कृपया इसकी एक प्रति बनाने का प्रयास करें।

मदद के लिए फिर से धन्यवाद

जवाब

2 Tanaike Jan 12 2021 at 12:18

अपने नमूना वीडियो से, अपनी स्थिति में, मैंने सोचा कि जब कोशिकाओं "B9" और "B10" के मूल्यों में शामिल किए गए हैं urlऔर xpathसूत्र के =IMPORTXML(url, xpath), जब सेल "बी 1" का मान बदल गया है, सूत्र ताज़ा किया जाता है। तो, निम्नलिखित नमूना स्क्रिप्ट के बारे में कैसे?

नमूना स्क्रिप्ट:

कृपया Google स्प्रेडशीट के स्क्रिप्ट एडिटर के लिए निम्न स्क्रिप्ट को कॉपी और पेस्ट करें और फ़ंक्शन को चलाएं myFunction। इस नमूने की स्क्रिप्ट में, सेल "बी 1" का मूल्य अधिक है newValue

function myFunction() {
  var newValue = "###"; // Please set the new value.
  var sheetName = "Sheet1";  // Please set the sheet name.
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  sheet.getRange("B1").setValue(newValue);
}
  • यदि उपरोक्त स्क्रिप्ट उपयोगी नहीं है और जब आप अपने स्क्रिप्ट का उपयोग अपने प्रश्न में करना चाहते हैं, तो आप निम्न स्क्रिप्ट का उपयोग कर सकते हैं। इस स्थिति में, कृपया var id = "YOUR-SHEET-ID";अपनी वास्तविक स्थिति के लिए निर्धारित करें।

      function myFunction() {
        var newValue = "###"; // Please set the new value.
        var sheetName = "Sheet1";  // Please set the sheet name.
        var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
        sheet.getRange("B1").setValue(newValue);
        RefreshImports(); // <--- Added
      }
    
  • या, मुझे लगता है कि आप शीट में सूत्रों को ताज़ा करने के लिए निम्नलिखित स्क्रिप्ट का उपयोग करने में सक्षम हो सकते हैं।

      function myFunction2() {
        var newValue = "###"; // Please set the new value.
        var sheetName = "Sheet1";  // Please set the sheet name.
        var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
        sheet.getRange("B1").setValue(newValue);
    
        var formula = "=";
        var tempFormula = "=sample";
        sheet.createTextFinder(`^\\${formula}`).matchFormulaText(true).useRegularExpression(true).replaceAllWith(tempFormula); sheet.createTextFinder(`^\\${tempFormula}`).matchFormulaText(true).useRegularExpression(true).replaceAllWith(formula);
      }
    

संदर्भ:

  • संबंधित सूत्र
    • कस्टम कार्य और पुनर्गणना
    • अब कार्य करें

जोड़ा गया:

आपके उत्तर और आपके साझा किए गए वीडियो से, निम्न नमूना स्क्रिप्ट के बारे में कैसे? इस मामले में, एक साधारण स्क्रिप्ट के रूप में, सेल को मंजूरी दे दी जाती है और acenफिर से मूल्य डाल दिया जाता है ।

नमूना स्क्रिप्ट:

function myFunction() {
  var newValue = "acen"; // Please set the new value.
  var sheetName = "Sheet1";  // Please set the sheet name.
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var range = sheet.getRange("B1");
  range.clearContent();
  SpreadsheetApp.flush();
  range.setValue(newValue);
}
1 Cooper Jan 12 2021 at 15:29

GetEmCheckEm और B CouncilEm

शीर्ष फ़ंक्शन आपको उन सभी कक्षों का चयन करने की अनुमति देता है जिन्हें आप उछालना चाहते हैं। नियंत्रण कुंजी का उपयोग करें और सभी कक्षों का चयन करें और फिर getThem चलाएं ();

function getThem() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('Sheet1');
  const rgl=sh.getActiveRangeList();
  let rlA=[];
  rgl.getRanges().forEach(function(rg,i){                      
    let h=rg.getHeight();
    let w=rg.getWidth();
    let row=rg.getRow();
    let col=rg.getColumn();
    for(let i=0;i<h;i++) {
      for(let j=0;j<w;j++) {
        rlA.push(sh.getRange(Number(row+i),Number(col+j)).getA1Notation());
      } 
     }
    });
  PropertiesService.getScriptProperties().setProperty('mystocks',JSON.stringify(rlA));
  ss.toast("Process Complete");  
}

आपके द्वारा उन्हें प्राप्त करने के बाद आप स्क्रीन पर क्लिक करके अपने चयनों को साफ़ कर सकते हैं। रन चेकथेम () और आपके चयन फिर से प्रकट होने चाहिए, क्योंकि उन्हें PropertiesService में सहेजा जाना चाहिए था।

function checkThem() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getActiveSheet();
  const rangeList=sh.getRangeList(JSON.parse(PropertiesService.getScriptProperties().getProperty('mystocks')));
  sh.setActiveRangeList(rangeList);
  ss.toast('Process Complete');
}

अब आप bounceThem चला सकते हैं () और मान गायब हो जाएंगे और फिर दिखाई देंगे

function bounceThem() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getActiveSheet();
  const list=sh.getRangeList(JSON.parse(PropertiesService.getScriptProperties().getProperty('mystocks')));
  let data=[];
  list.getRanges().forEach(r=>{data.push(r.getValue());r.setValue('');});
  SpreadsheetApp.flush();
  Utilities.sleep(5000);
  list.getRanges().forEach((r,i)=>{r.setValue(data[i]);});
  SpreadsheetApp.flush();
  ss.toast("Process Complete");
}

मुझे यह बहुत अच्छा लगा, इसलिए मैं आज सुबह वापस आया और सेटवैल्यूज़ () के बजाय सेटवैल्यूज़ () का उपयोग करने के लिए इसे सेट किया और यह अब तेज़ी से बाउंस कर रहा है।

function getThem1() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('Sheet1');
  const rgl=sh.getActiveRangeList();
  console.log(sh.getName());
  let rlA=rgl.getRanges().map(function(rg){return rg.getA1Notation();});
  PropertiesService.getScriptProperties().setProperty('mystocks1',JSON.stringify(rlA));//Stored as JSON in property service
  ss.toast("Process Complete");  
}

function checkThem1() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getActiveSheet();
  const rangeList=sh.getRangeList(JSON.parse(PropertiesService.getScriptProperties().getProperty('mystocks1')));
  sh.setActiveRangeList(rangeList);
  ss.toast('Process Complete');
}

function bounceThem1() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getActiveSheet();
  const list=sh.getRangeList(JSON.parse(PropertiesService.getScriptProperties().getProperty('mystocks1')));
  let data=[];
  list.getRanges().forEach(function(rg){
    let sA=rg.getValues();//the stored array
    data.push(sA);
    let nA=[];//this is the null array to remove data
    sA.forEach(function(r,i){
      nA[i]=[];
      r.forEach(function(c,j){
        nA[i][j]='';
      });
    });
    rg.setValues(nA);//removing data
  });
  SpreadsheetApp.flush();//insure all data is visible on the sheet
  Utilities.sleep(5000);//5 second bounce delay
  list.getRanges().forEach(function(r,i){r.setValues(data[i]);});//Replacing all data as 2d arrays
  SpreadsheetApp.flush();//Making sure data is complete and visible
  ss.toast("Process Complete");
}

WaveChappelle Jan 12 2021 at 12:11

इस बात पर निर्भर करता है कि आपके पास कितने कॉलम हैं जिन्हें मैं केवल क्रिया का एक मैक्रो रिकॉर्ड कर सकता हूं (टूल> मैक्रोज़> रिकॉर्ड मैक्रो) और एक बार पूर्ण रूप से अपने ताज़ा करने के लिए नीचे दिए गए प्रश्न के उत्तर में दिए गए निर्देशों का पालन करें। चलाने के लिए

क्या Google स्प्रैडशीट लिपियों को स्वचालित करना संभव है (उदाहरण के लिए उन्हें ट्रिगर करने के लिए एक घटना के बिना)?