सेल कैसे हटाएं और Google शीट्स में समान विवरण फिर से दर्ज करें
मैं वर्तमान में स्टॉक मूल्य के डेटा लाने को स्वचालित करने का एक तरीका बना रहा हूं ..
सबसे पहले, मैंने सोचा था कि सेल के मूल्य को अपडेट करने के लिए, मुझे सिर्फ सेल में 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();
}
}
जाहिरा तौर पर, यह सेल को अपडेट नहीं करता है .. इसलिए मैंने पाया कि सेल को रिफ्रेश करने के लिए, मुझे इसकी आवश्यकता है
- स्टॉक का नाम हटाएं
- स्टॉक का नाम फिर से दर्ज करें
यहाँ एक वीडियो दिखाया जा रहा है जिसका मैं मतलब है (बस इसे स्पष्ट करने के लिए) https://streamable.com/eciks0
मैं इसे कैसे स्वचालित कर सकता हूं, शायद Google शीट स्क्रिप्ट का उपयोग कर रहा हूं?
जी शुक्रिया
EDIT: यहां Google शीट की एक प्रति काम कर रही है
https://docs.google.com/spreadsheets/d/1BFz3LHWEw-wT9exJv558mAFOv-fIKPINaplmzRY24kw/edit?usp=sharing
कृपया इसकी एक प्रति बनाने का प्रयास करें।
मदद के लिए फिर से धन्यवाद
जवाब
अपने नमूना वीडियो से, अपनी स्थिति में, मैंने सोचा कि जब कोशिकाओं "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);
}
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");
}
इस बात पर निर्भर करता है कि आपके पास कितने कॉलम हैं जिन्हें मैं केवल क्रिया का एक मैक्रो रिकॉर्ड कर सकता हूं (टूल> मैक्रोज़> रिकॉर्ड मैक्रो) और एक बार पूर्ण रूप से अपने ताज़ा करने के लिए नीचे दिए गए प्रश्न के उत्तर में दिए गए निर्देशों का पालन करें। चलाने के लिए
क्या Google स्प्रैडशीट लिपियों को स्वचालित करना संभव है (उदाहरण के लिए उन्हें ट्रिगर करने के लिए एक घटना के बिना)?