วิธีแทรกแถวใหม่โดยอัตโนมัติและเก็บฟังก์ชัน / สูตรจากแถวสุดท้ายได้อย่างไร


24

ฉันมีตารางที่มีเซลล์ที่มีฟังก์ชั่น / สูตรเช่นนี้

ป้อนคำอธิบายรูปภาพที่นี่

ฉันต้องการสคริปต์ที่สร้างแถวใหม่คัดลอกด้วยฟังก์ชัน / สูตรของแถวที่ใช้ล่าสุด ฉันพบสคริปต์นี้ซึ่งสร้างแถวใหม่ แต่ก็ไม่ได้คัดลอกฟังก์ชั่น ฉันจะใช้งานการคัดลอกการจัดรูปแบบนี้ใน Google Apps Script ได้อย่างไรโดยไม่ต้องเลือกและคัดลอกด้วยตนเอง


หากสูตรแถวก่อนหน้าของฉันคือ = HTTPResponse (C4) ฉันจะคัดลอกสูตรเดียวกันได้อย่างไร แต่จะมีหมายเลขเซลล์ใหม่สำหรับแถวใหม่
user1788736

คำตอบ:


20

ใช้รหัสด้านล่างเพื่อคัดลอกสูตรของค่าปกติเช่นกัน เพิ่มรหัสโดยเลือกเครื่องมือจากเมนูสเปรดชีต จากนั้นเลือกตัวแก้ไขสคริปต์และเพิ่มรหัส ตรวจสอบให้แน่ใจว่าได้กดปุ่ม "ข้อผิดพลาด" และตรวจสอบความถูกต้องของสคริปต์

รหัส

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

ข้อสังเกต

การตั้งค่าเนื้อหาเพียงอย่างเดียวเพื่อfalseให้ได้สำเนามาตรฐาน การตั้งค่าเป็นtrueจะวางเฉพาะค่า สคริปต์ตัวอย่างที่คุณพบทำวิธีการวางค่า .....

ตัวอย่าง

ฉันสร้างไฟล์ตัวอย่างให้คุณแล้ว: เพิ่มแถวด้วยสูตร


3

ArrayFormula นี้สามารถทำได้เหมือนกันโดยไม่ต้องมีสคริปต์ ใส่มันใน D4 และมันจะถูกพาไปโดยอัตโนมัติในจำนวนเซลล์ว่างใด ๆ ด้านล่าง

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

หมายเหตุ: "B4: B" หมายถึงดูเซลล์ทั้งหมดที่เริ่มต้นจาก B4 จนถึงจุดสิ้นสุดของคอลัมน์

ในขณะที่ ArrayFormula ดูแลการคัดลอกตัวเองลงในเซลล์ด้านล่าง เพียงตรวจสอบให้แน่ใจว่าเซลล์ด้านล่างนั้นว่างเปล่า


3

ในกรณีที่คุณต้องการเพิ่มแถวใหม่ที่ด้านบน (แถวแรก) และคัดลอกสูตรจากแถวบนสุดจากนั้นคุณจะต้องคัดลอกสูตรไปใช้getFormulas()และsetFormulas()ฟังก์ชั่น คุณสามารถเปลี่ยนค่าfirstRowเป็น 2 ได้หากสเปรดชีตของคุณมีส่วนหัว

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
สวัสดีเดนิสคุณหมายถึงโพสต์ที่ฉันสร้างหรือไม่? ฉันเพิ่งตรวจสอบสคริปต์และมันยังทำงานอยู่ ขอแสดงความนับถือ Jacob Jan
Jacob Jan Tuinstra

สวัสดี @JacobJanTuinstra ใช่คุณพูดถูก ที่จริงฉันพยายามเพิ่มแถวใหม่ที่ด้านบนและเก็บสูตรจากแถวเดียวกันและไม่ทำงานเนื่องจากสคริปต์พยายามคัดลอกข้อมูลจากแถวว่างที่สร้างขึ้นใหม่ ฉันจะอัปเดตคำตอบเพื่อสะท้อนสิ่งนี้ ขอบคุณ
dgpro

สวัสดี @ DenGordo! ขอบคุณสำหรับสิ่งนี้. ฉันจะแก้ไขสิ่งนี้ได้อย่างไรถ้าฉันมีค่าที่จะย้ายไม่ใช่สูตรด้วย ขอบคุณ!
Drewdavid

โอ้ PS - ฉันจะอ้างอิงแท็บใดที่ฉันติดต่อด้วย ขอบคุณอีกครั้ง.
Drewdavid

-2

เพื่อแก้ปัญหานี้ฉันได้ใช้setFormula(range)ตัวอย่างเช่น:

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

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

สูตรของคุณจะเพิ่มโดยอัตโนมัติตามดัชนีแถว

สุดท้ายคุณสามารถเพิ่มทริกเกอร์ onUpdate หรือ onEdit


-1; รหัสนี้เป็นอย่างไร? คุณกำลังเพิ่มผลรวม แต่คุณต้องเพิ่มแถวทางกายภาพ onUpdateทริกเกอร์ไม่อยู่
จาค็อบแจน Tuinstra
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.