Bir hücre nasıl silinir ve aynı ayrıntılar Google E-Tablolar'da nasıl yeniden girilir?
Şu anda hisse senedi fiyatının veri alımını otomatikleştirmek için bir yol yapıyorum ..
ilk önce hücrenin değerini güncellemek için hücredeki importxml ifadesini yenilemem gerektiğini düşündüm. bu yüzden bu kodu IMPORTXML () elektronik tablo fonksiyonunu Periyodik olarak yenile
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();
}
}
görünüşe göre, hücreyi GÜNCELLEMEZ .. bu yüzden hücreyi yenilemek için ihtiyacım olduğunu keşfettim
- hisse senedinin adını sil
- hisse senedinin adını yeniden girin
işte bununla ne demek istediğimi gösteren bir video (sadece açıklığa kavuşturmak için) https://streamable.com/eciks0
bunu nasıl otomatikleştirebilirim, belki google sayfa komut dosyasını kullanarak?
teşekkür ederim
DÜZENLEME: işte birlikte çalıştığım google sayfasının bir kopyası
https://docs.google.com/spreadsheets/d/1BFz3LHWEw-wT9exJv558mAFOv-fIKPINaplmzRY24kw/edit?usp=sharing
lütfen bir kopyasını almayı deneyin.
yardım için tekrar teşekkürler
Yanıtlar
Örnek videonuzdan sizin durumunuzda, "B9" ve "B10" hücrelerinin değerleri formülün url
ve "B1" hücresinin değeri değiştirildiğinde formülün yenileneceğini düşündüm. Peki, aşağıdaki örnek komut dosyasına ne dersiniz?xpath
=IMPORTXML(url, xpath)
Örnek komut dosyası:
Lütfen aşağıdaki komut dosyasını Google E-Tablo'nun komut dosyası düzenleyicisine kopyalayıp yapıştırın ve işlevini çalıştırın myFunction
. Bu örnek komut dosyasında, "B1" hücresinin değerinin üzerine yazılmıştır 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);
}
Yukarıdaki komut dosyası kullanışlı değilse ve sorunuzda komut dosyanızı da kullanmak istediğinizde aşağıdaki komut dosyasını kullanabilirsiniz. Bu durumda, lütfen
var id = "YOUR-SHEET-ID";
gerçek durumunuza göre ayarlayın.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 }
Veya sayfadaki formülleri yenilemek için aşağıdaki komut dosyasını kullanabileceğinizi düşünüyorum.
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); }
Referanslar:
- İlgili konular
- Özel İşlevler ve Yeniden Hesaplama
- İşlev ŞİMDİ () + Saat Dilimini Ayarlama (Google E-Tablolar)
Katma:
Yanıtınızdan ve paylaştığınız videodan, aşağıdaki örnek komut dosyasına ne dersiniz? Bu durumda basit bir betik olarak hücre temizlenir ve değerini acen
yeniden koyar .
Örnek komut dosyası:
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 ve BouncEm
Üst işlev, geri döndürmek istediğiniz tüm hücreleri seçmenize olanak tanır. Kontrol tuşunu kullanın ve tüm hücreleri seçin ve ardından getThem () komutunu çalıştırın;
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");
}
Bunları aldıktan sonra, seçimlerinizi temizlemek için ekrana tıklayabilirsiniz. Run checkThem () ve seçimleriniz yeniden görünmelidir çünkü PropertiesService'e kaydedilmiş olmaları gerekir.
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');
}
Artık bounceThem () çalıştırabilirsiniz ve değerler kaybolacak ve sonra yeniden görünecektir.
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");
}

Bunu daha çok çalıştırmayı buldum, bu yüzden bu sabah geri geldim ve setValue () yerine setValues () kullanacak şekilde ayarladım ve şimdi sıçrama yapmak çok daha hızlı.
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");
}

Kaç tane sütuna sahip olduğunuza bağlı olarak, sadece eylemin bir makrosunu kaydederdim (Araçlar> Makrolar> Makro Kaydet) ve tamamlandıktan sonra, yenilemeyi istediğiniz sıklıkta otomatikleştirmek için aşağıdaki soruda yayınlanan cevaptaki talimatları izleyin koşmak
Google E-Tablolar Komut Dosyalarını otomatikleştirmek mümkün mü (örneğin, onları tetikleyecek bir olay olmadan)?