Yeni bir satır otomatik olarak nasıl eklenir ve işlevler / formüller son satırdan nasıl korunur?


24

Bunun gibi fonksiyonları / formülleri olan hücrelere sahip bir masam var:

görüntü tanımını buraya girin

Son kullanılan satırın fonksiyonlarını / formüllerini kopyalayarak yeni bir satır oluşturan bir komut dosyasına ihtiyacım var. Yeni bir satır yaratan bu betiği buluyorum ancak işlevleri / formülleri kopyalamıyor . Bu biçimlendirme kopya görevini manuel olarak seçip kopyalamak zorunda kalmadan Google Apps Komut Dosyası'nda nasıl uygulayabilirim?


önceki satır formülüm = HTTPResponse (C4) ise nasıl aynı formülü fakat yeni satır için yeni hücre numarasını kopyalayabilirim?
user1788736 5:15

Yanıtlar:


20

Formülün normal değerler olarak kopyalanması için aşağıdaki kodu kullanın. Elektronik tablo menüsünden Araçlar'ı seçerek kodu ekleyin. Sonra script editörünü seçip kodu ekleyin. "Hata" düğmesine bastığınızdan ve komut dosyasını doğruladığınızdan emin olun.

kod

// global 
var ss = SpreadsheetApp.getActive();

function onOpen() {
  var menu = [{name:"Add New Last Row", functionName:"addRow"}];
  ss.addMenu("Extra", menu);
}

function addRow() {
  var sh = ss.getActiveSheet(), lRow = sh.getLastRow(); 
  var lCol = sh.getLastColumn(), range = sh.getRange(lRow,1,1,lCol);
  sh.insertRowsAfter(lRow, 1);
  range.copyTo(sh.getRange(lRow+1, 1, 1, lCol), {contentsOnly:false});
}

düşünce

Ayar contentOnly için falsestandart bir kopyasını verecektir. Ayarlamak true, sadece değerleri yapıştırır. Bulduğunuz örnek komut dosyası, değerleri yapıştırmaktan çok daha fazlasını yapar.

Örnek

Sizin için bir örnek dosya oluşturdum: Formül'lü Satır Ekleme


3

Bu ArrayFormula bir betiği dahil etmeden aynısını yapabilir. D4'e girin ve altındaki herhangi bir boş hücrede otomatik olarak taşınacaktır.

ArrayFormula(vlookup(B4:B:tax_table!$A$2:$G$8;3;true))

Notlar: "B4: B", B4'ten başlayarak sütunun sonuna kadar tüm hücrelere bakın.

ArrayFormula ise kendisini altındaki hücrelere kopyalamayı önemser. Sadece altındaki hücrelerin boş olduğundan emin olun.


3

Tepeye yeni bir satır eklemeniz (ilk satır) ve ilk üst satırdaki formülü kopyalamanız gerekirse, formülleri getFormulas()ve setFormulas()işlevlerini kullanarak kopyalamanız gerekir . firstRowÖrneğin e-tablonuzda başlık varsa , değerini 2 olarak değiştirebilirsiniz .

function addFirstRow() {
    var firstRow = 1;
    var sh = ss.getActiveSheet();
    var lCol = sh.getLastColumn();
    var range = sh.getRange(firstRow, 1, 1, lCol);
    var formulas = range.getFormulas();
    sh.insertRowsAfter(1, 1);
    newRange = sh.getRange(firstRow, 1, 1, lCol);
    newRange.setFormulas(formulas);
}

1
Merhaba Denis, Benim yarattığım gönderiden mi bahsediyorsun? Ben sadece senaryoyu kontrol ediyorum ve hala çalışıyor. Saygılarımızla Jacob Jan
Jacob Jan Tuinstra

Merhaba @JacobJanTuinstra, evet haklısın. Aslında üstüne yeni bir satır eklemeye ve formülü aynı satırdan tutmaya çalışıyordum, çünkü komut dosyası yeni oluşturulan boş satırdan veri kopyalamaya çalışıyordu. Bunu yansıtmak için cevabımı güncelleyeceğim. Teşekkür ederim
dgpro

Merhaba @DenGordo! Bunun için teşekkürler. Taşınacak değerlerim varsa ve formüller de yoksa, bunu nasıl değiştiririm? Teşekkürler!
Drewdavid

Oh PS - Hangi sekmeyle uğraştığımı nereden bulabilirim? Tekrar teşekkürler.
Drewdavid

-2

Bu sorunu çözmek için setFormula(range), örneğin kullandım:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

var cell = sheet.getRange("B5");
 cell.setFormula("=SUM(B3:B4)");

Formülünüz satır indeksine göre otomatik olarak artacaktır.

Son olarak, bir onUpdate veya onEdit tetikleyicisi ekleyebilirsiniz.


1; Kod nasıl kullanılır? Bir miktar ekliyorsunuz, ancak fiziksel olarak bir satır eklemeniz gerekiyor. onUpdateTetik yok.
Jacob Jan Tuinstra
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.