Làm cách nào để tự động chèn một hàng mới và giữ lại các chức năng / công thức từ hàng cuối cùng?


24

Tôi có một bảng với các ô có hàm / công thức, như bảng này:

nhập mô tả hình ảnh ở đây

Tôi cần một tập lệnh tạo một hàng mới, sao chép với nó các hàm / công thức của hàng được sử dụng cuối cùng. Tôi tìm thấy tập lệnh này tạo ra một hàng mới nhưng nó không sao chép các hàm / công thức . Làm cách nào tôi có thể triển khai tác vụ sao chép định dạng này trong Google Apps Script mà không phải chọn và sao chép thủ công?


nếu công thức hàng trước của tôi là = HTTPResponse (C4) làm thế nào tôi có thể sao chép cùng một công thức nhưng số ô mới cho hàng mới?
dùng1788736

Câu trả lời:


20

Sử dụng mã dưới đây để sao chép công thức cũng như các giá trị bình thường. Thêm mã bằng cách chọn Công cụ từ menu bảng tính. Sau đó chọn trình soạn thảo tập lệnh và thêm mã. Đảm bảo nhấn nút "bug" và xác thực tập lệnh.

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

Ghi chú

Đặt nội dung Chỉ để falsetạo ra một bản sao tiêu chuẩn. Đặt nó thành true, sẽ chỉ dán các giá trị. Kịch bản ví dụ bạn đã tìm thấy, thực hiện nhiều hơn sau đó dán các giá trị .....

Thí dụ

Tôi đã tạo một tệp ví dụ cho bạn: Thêm hàng với công thức


3

ArrayFormula này có thể làm tương tự mà không liên quan đến một tập lệnh. Nhập nó vào D4 và nó sẽ được chuyển tự động trong bất kỳ số lượng ô trống nào bên dưới nó.

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

Lưu ý: "B4: B" có nghĩa là, xem tất cả các ô bắt đầu từ B4 cho đến hết cột.

Trong khi, ArrayFormula đảm nhiệm việc sao chép chính nó vào các ô bên dưới nó. Chỉ cần chắc chắn rằng các ô bên dưới nó trống rỗng.


3

Trong trường hợp nếu bạn cần thêm một hàng mới trên đầu (hàng đầu tiên) và sao chép công thức từ hàng trên cùng đầu tiên thì bạn sẽ cần sao chép các công thức qua việc sử dụng getFormulas()và các setFormulas()hàm. Bạn có thể thay đổi giá trị firstRowthành 2 nếu bảng tính của bạn có tiêu đề chẳng hạn.

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
Xin chào, bạn đang đề cập đến bài viết tôi đã tạo ra? Tôi chỉ kiểm tra kịch bản và nó vẫn hoạt động. Trân trọng Jacob Jan
Jacob Jan Tuinstra

Xin chào @JacobJanTuinstra, vâng bạn đúng. Tôi thực sự đã cố gắng thêm hàng mới trên đầu trang và giữ lại công thức từ cùng một hàng và nó không hoạt động vì tập lệnh đang cố sao chép dữ liệu từ hàng trống mới được tạo. Tôi sẽ cập nhật câu trả lời của tôi để phản ánh điều này. Cảm ơn bạn
dgpro

Xin chào @DenGordo! Cảm ơn vì điều đó. Làm cách nào để sửa đổi điều này nếu tôi chỉ có các giá trị để di chuyển và không phải là công thức? Cảm ơn!
Drewdavid

Oh PS - Tôi tham khảo tab nào tôi đang xử lý? Cảm ơn một lần nữa.
Drewdavid

-2

Để giải quyết vấn đề này, tôi đã sử dụng setFormula(range), ví dụ:

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

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

Công thức của bạn sẽ tự động tăng theo chỉ số hàng.

Cuối cùng, bạn có thể thêm một kích hoạt onUpdate hoặc onEdit.


-1; Làm thế nào là mã được gợi lên? Bạn đang thêm một khoản tiền, nhưng bạn cần thêm một hàng vật lý. Các onUpdatekích hoạt không tồn tại.
Jacob Jan Tuinstra
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.