我正在执行多个过程,包括在触发复选框时在工作表之间复制信息,以及同时复制一系列公式,随着更多数据移至此处,这些公式将继续向下复制。我已经成功完成了第一次跨工作表转移,但我正在拉我的头发以复制同一张工作表中的公式。因为我在第一个函数中使用了 lastRow(),所以我使用了稍微不同的方法来提取公式,但没有成功。
如您所见,我对这种类型的编程很陌生,但最终我的目标是使该脚本在结构上足够强大,可以同时处理多个复选框,同时还包括条件格式。
function onEdit(e) {
// goal to send data from cell in sheet 'staticData'
// to another cell in sheet 'DiscoveryRanking'
// upon checking of checkbox
var ss = SpreadsheetApp.getActive();
var s = ss.getActiveSheet();
var r = ss.getActiveRange();
var row = r.getRow();
var numColumns = s.getLastColumn();
if (s.getName() == "staticData" && r.getColumn() == 53 && r.getValue() == true) {
// Create the record in "DiscoveryRanking"
var prop = PropertiesService.getDocumentProperties();
var targetSheet = ss.getSheetByName("DiscoveryRanking");
var target = targetSheet.getRange(targetSheet.getLastRow()+1, 2);
s.getRange(row, 1, 1, 1).copyTo(target, { contentsOnly: true });
//the second aim is to copy down a template range with formulas in 'DiscoveryRanking'
//to the line under the retrieved cell data from 'staticData'
//THIS PART IS WHERE I'M HAVING A PROBLEM
e.ss.getSheetName() == "DiscoveryRanking" &&
e.range.columnStart == 1 &&
e.range.columnEnd == 27 &&
e.range.rowStart >= 15 &&
e.range.rowEnd <= 16
var source = ss.getSheetByName("DiscoveryRanking");
var data_cellRows = e.range.rowStart;
source.getRange(data_cellRow,1, 2, 27).getFormulaR1C1();
var input = data_cellRows.getRange(data_cellRow.gestLastRow(),1);
data_cellRows.copyTo(input, setFormulasR1C1(sourceFormulas));
}
}
更新:如评论中所述
function onEdit(e) {
var ss = SpreadsheetApp.getActive();
var s = ss.getActiveSheet();
var r = ss.getActiveRange();
var row = r.getRow();
var numColumns = s.getLastColumn();
if (s.getName() == "staticData" && r.getColumn() == 53 && r.getValue() == true) {
var prop = PropertiesService.getDocumentProperties();
var targetSheet = ss.getSheetByName("DiscoveryRanking");
var target = targetSheet.getRange(targetSheet.getLastRow()+2, 2);
Logger.log(target.getValue());
s.getRange(row, 1, 1, 1).copyTo(target, { contentsOnly: true });
var source =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DiscoveryRanking");
var dataToCopyFormulas = source.getRange('A15:Y15')
var copyToSheet = ss.getSheetByName ("DiscoveryRanking");
var sourceValueFormulas = dataToCopyFormulas.getFormulas();
var lastRow = copyToSheet.getLastRow();
copyToSheet.getRange(lastRow + 1, 1, sourceValueFormulas.length,
sourceValueFormulas[0].length).setFormulas(sourceValueFormulas);
}
}