Cara menghapus sel dan memasukkan kembali detail yang sama di Google Sheets
Saat ini saya sedang membuat cara untuk mengotomatiskan pengambilan data harga saham ..
pada awalnya, saya berpikir bahwa untuk memperbarui nilai sel, saya hanya perlu menyegarkan pernyataan importxml di dalam sel. jadi saya menggunakan kode ini dari fungsi spreadsheet IMPORTXML () refresh berkala
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();
}
}
rupanya, itu TIDAK memperbarui sel .. jadi saya menemukan bahwa untuk menyegarkan sel, saya perlu
- hapus nama sahamnya
- masukkan kembali nama sahamnya
berikut adalah video yang menunjukkan apa yang saya maksud dengan itu (hanya untuk memperjelas) https://streamable.com/eciks0
bagaimana saya bisa mengotomatiskan ini, mungkin menggunakan skrip lembar google?
Terima kasih
EDIT: ini adalah salinan dari google sheet yang sedang saya kerjakan
https://docs.google.com/spreadsheets/d/1BFz3LHWEw-wT9exJv558mAFOv-fIKPINaplmzRY24kw/edit?usp=sharing
coba buat salinannya.
terima kasih sekali lagi atas bantuannya
Jawaban
Dari video sampel Anda, dalam situasi Anda, saya berpikir bahwa ketika nilai sel "B9" dan "B10" dimasukkan ke dalam url
dan xpath
dari rumus =IMPORTXML(url, xpath)
, ketika nilai sel "B1" diubah, rumus disegarkan. Lantas, bagaimana dengan contoh script berikut ini?
Contoh skrip:
Harap salin dan tempel skrip berikut ke editor skrip Google Spreadsheet dan jalankan fungsi myFunction
. Dalam contoh skrip ini, nilai sel "B1" diganti dengan 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);
}
Jika skrip di atas tidak berguna dan ketika Anda ingin juga menggunakan skrip dalam pertanyaan Anda, Anda dapat menggunakan skrip berikut. Dalam kasus ini, harap tetapkan
var id = "YOUR-SHEET-ID";
untuk situasi Anda yang sebenarnya.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 }
Atau, saya pikir Anda mungkin bisa menggunakan skrip berikut untuk menyegarkan rumus di lembar.
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); }
Referensi:
- Benang terkait
- Fungsi Kustom dan Penghitungan Ulang
- Fungsi SEKARANG () + Mengatur Zona Waktu (Google Sheets)
Ditambahkan:
Dari balasan Anda dan video yang Anda bagikan, bagaimana dengan contoh script berikut? Dalam hal ini, sebagai skrip sederhana, sel dihapus dan diberi nilai acen
lagi.
Contoh skrip:
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 Dan BouncEm
Fungsi atas memungkinkan Anda memilih semua sel yang ingin Anda pantulkan. Gunakan tombol kontrol dan pilih semua sel lalu jalankan 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");
}
Setelah Anda mendapatkannya, Anda dapat mengklik layar untuk menghapus pilihan Anda. Jalankan checkThem () dan pilihan Anda akan muncul kembali karena mereka seharusnya telah disimpan di 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');
}
Sekarang Anda dapat menjalankan bounceThem () dan nilainya akan hilang lalu muncul kembali
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");
}
Saya menemukan ini agak berjalan jadi saya kembali pagi ini dan mengaturnya untuk menggunakan setValues () daripada setValue () dan itu jauh lebih cepat melakukan pentalan sekarang.
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");
}
Bergantung pada berapa banyak kolom yang Anda miliki, saya hanya akan merekam makro tindakan (Alat> Makro> Rekam Makro) dan setelah selesai ikuti instruksi dalam jawaban yang diposting dalam pertanyaan di bawah ini untuk mengotomatiskan penyegarannya sesering Anda menyukainya. untuk berlari
Apakah mungkin untuk mengotomatiskan Google Spreadsheets Scripts (misalnya, tanpa ada kejadian yang memicunya)?