使用 Apps 脚本在 Google 表格中插入新行时保留行格式和公式?
Preserving row format and formula when inserting new row in Google Sheets using Apps Script?
我有一个 Google Sheets 数据库:
https://docs.google.com/spreadsheets/d/1VzHY8fTq8OsXhpHYHESSSPxeVNOnqxpjcsyWJpbuEOs/edit?usp=sharing
'Base Stats' sheet (Sheet 1) 定期更新以添加新行。第 1 行是 header 行。第 2 行之后的第 5-8 列应用了字体颜色。第 6 列有一个下拉列表。第 7、12 和 13 列有公式。插入新行时,目前不会复制上面详述的格式和公式。
我做了一些搜索,找到了这个可能的答案:
function onOpen(e){
var ui = SpreadsheetApp.getUi()
ui.createMenu("Format sheet").addItem("Format", "setFormat").addToUi()
}
function onEdit(e){ //This is activated each time a modification happens in the sheet
var ss = SpreadsheetApp.getActive()
var sheet =ss.getActiveSheet()
if(sheet.getSheetName() == "Base Stats"){
var entryRange = e.range
var range = sheet.getRange(2,entryRange.getColumn(),1,entryRange.getNumColumns()) //This will be you range to get the formatting from row "1" and corresponding column based on the column being edited
Logger.log(entryRange.getA1Notation())
range.copyFormatToRange(sheet, entryRange.getColumn(), entryRange.getNumColumns()+entryRange.getColumn()-1, entryRange.getRow(), entryRange.getNumRows()+entryRange.getRow()-1)
Logger.log(entryRange.getColumn())
if(entryRange.getColumn() == 12){ //This column value will not be allowed modified except for row 1 of that column
if (entryRange.getRow() != 2){ //The columns in row "1" will be allowed to modified
e.range.setValue((e.oldvalue == undefined? "": e.oldvalue))
}
}
}
}
function setFormat(){
var ss = SpreadsheetApp.getActive()
var sheet = ss.getActiveSheet()
var firstRow = sheet.getRange(1, 1, 1, sheet.getLastColumn())
var dataRange = sheet.getDataRange()
firstRow.copyFormatToRange(sheet, 1, dataRange.getNumColumns(), 2, dataRange.getNumRows())
}
但是,我不确定我需要在脚本中编辑什么才能应用于我的 Google Sheet 示例?非常感谢任何帮助。
您不需要复制公式,更改 arrayformula
,M1 中的示例
={"Score
(Weighted)";arrayformula((H2:H*2)+(E2:E*1.5)+(F2:F+G2:G))}
立即为所有列(和整列)应用格式,您无需复制格式规则
我有一个 Google Sheets 数据库:
https://docs.google.com/spreadsheets/d/1VzHY8fTq8OsXhpHYHESSSPxeVNOnqxpjcsyWJpbuEOs/edit?usp=sharing
'Base Stats' sheet (Sheet 1) 定期更新以添加新行。第 1 行是 header 行。第 2 行之后的第 5-8 列应用了字体颜色。第 6 列有一个下拉列表。第 7、12 和 13 列有公式。插入新行时,目前不会复制上面详述的格式和公式。
我做了一些搜索,找到了这个可能的答案:
function onOpen(e){
var ui = SpreadsheetApp.getUi()
ui.createMenu("Format sheet").addItem("Format", "setFormat").addToUi()
}
function onEdit(e){ //This is activated each time a modification happens in the sheet
var ss = SpreadsheetApp.getActive()
var sheet =ss.getActiveSheet()
if(sheet.getSheetName() == "Base Stats"){
var entryRange = e.range
var range = sheet.getRange(2,entryRange.getColumn(),1,entryRange.getNumColumns()) //This will be you range to get the formatting from row "1" and corresponding column based on the column being edited
Logger.log(entryRange.getA1Notation())
range.copyFormatToRange(sheet, entryRange.getColumn(), entryRange.getNumColumns()+entryRange.getColumn()-1, entryRange.getRow(), entryRange.getNumRows()+entryRange.getRow()-1)
Logger.log(entryRange.getColumn())
if(entryRange.getColumn() == 12){ //This column value will not be allowed modified except for row 1 of that column
if (entryRange.getRow() != 2){ //The columns in row "1" will be allowed to modified
e.range.setValue((e.oldvalue == undefined? "": e.oldvalue))
}
}
}
}
function setFormat(){
var ss = SpreadsheetApp.getActive()
var sheet = ss.getActiveSheet()
var firstRow = sheet.getRange(1, 1, 1, sheet.getLastColumn())
var dataRange = sheet.getDataRange()
firstRow.copyFormatToRange(sheet, 1, dataRange.getNumColumns(), 2, dataRange.getNumRows())
}
但是,我不确定我需要在脚本中编辑什么才能应用于我的 Google Sheet 示例?非常感谢任何帮助。
您不需要复制公式,更改 arrayformula
,M1 中的示例
={"Score
(Weighted)";arrayformula((H2:H*2)+(E2:E*1.5)+(F2:F+G2:G))}
立即为所有列(和整列)应用格式,您无需复制格式规则