Bagaimana cara menyisipkan baris baru secara otomatis dan mempertahankan fungsi / formula dari baris terakhir?

24

Saya memiliki tabel dengan sel yang memiliki fungsi / rumus, seperti ini:

masukkan deskripsi gambar di sini

Saya membutuhkan skrip yang membuat baris baru, menyalinnya dengan fungsi / formula dari baris yang terakhir digunakan. Saya menemukan skrip ini yang membuat baris baru tetapi tidak menyalin fungsi / formula . Bagaimana saya bisa menerapkan tugas penyalinan format ini dalam Google Apps Script tanpa harus memilih dan menyalin secara manual?

Apprentice Pythonista
sumber
jika rumus baris saya sebelumnya = HTTPResponse (C4) bagaimana saya bisa menyalin rumus yang sama tetapi nomor sel baru untuk baris baru?
user1788736

Jawaban:

20

Gunakan kode di bawah ini untuk menyalin juga rumus sebagai nilai normal. Tambahkan kode dengan memilih Alat dari menu spreadsheet. Kemudian pilih editor skrip dan tambahkan kode. Pastikan untuk menekan tombol "bug" dan otentikasi skrip.

Kode

// 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});
}

Ucapan

Mengatur kontenHanya untukfalse akan menghasilkan salinan standar. Mengaturnya ke true, hanya akan menempelkan nilai. Contoh skrip yang Anda temukan, tidak lebih dari menempelkan nilai .....

Contoh

Saya telah membuat file contoh untuk Anda: Tambahkan Baris Dengan Formula

Jacob Jan Tuinstra
sumber
3

ArrayFormula ini dapat melakukan hal yang sama tanpa melibatkan skrip. Masukkan di D4, dan itu akan terbawa secara otomatis dalam jumlah sel kosong di bawahnya.

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

Catatan: "B4: B" berarti, lihat semua sel mulai dari B4 hingga akhir kolom.

Sementara, ArrayFormula mengurus penyalinan dirinya ke dalam sel di bawahnya. Pastikan sel-sel di bawahnya kosong.

pengguna3660579
sumber
3

Jika Anda perlu menambahkan baris baru di atas (baris pertama) dan menyalin rumus dari baris atas pertama maka Anda harus menyalin rumus di seluruh penggunaan getFormulas()dan setFormulas()fungsi. Anda dapat mengubah nilai firstRowmenjadi 2 jika spreadsheet Anda memiliki header misalnya.

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);
}
dgpro
sumber
1
Hai Denis, Apakah Anda mengacu pada posting yang saya buat? Saya hanya memeriksa skrip dan masih berfungsi. Salam Jacob Jan
Jacob Jan Tuinstra
Hai @JacobJanTuinstra, ya Anda benar. Saya sebenarnya mencoba menambahkan baris baru di atas dan mempertahankan formula dari baris yang sama dan tidak berhasil karena skrip mencoba menyalin data dari baris kosong yang baru dibuat. Saya akan memperbarui jawaban saya untuk mencerminkan ini. Terima kasih
dgpro
Hai @DenGordo! Terima kasih untuk ini. Bagaimana saya memodifikasi ini jika saya hanya memiliki nilai untuk dipindahkan, dan bukan rumus juga? Terima kasih!
Drewdavid
Oh PS - Di mana saya referensi tab yang saya hadapi? Terima kasih lagi.
Drewdavid
-2

Untuk mengatasi masalah ini saya telah menggunakan setFormula(range), misalnya:

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

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

Formula Anda akan meningkat secara otomatis sesuai dengan indeks baris.

Terakhir Anda bisa menambahkan pemicu onUpdate atau onEdit.

pengguna70790
sumber
-1; Bagaimana kodenya ditimbulkan? Anda menambahkan jumlah, tetapi Anda perlu menambahkan baris secara fisik. The onUpdatepemicu tidak ada.
Jacob Jan Tuinstra