添加行并保持格式 - Google 张
Adding rows and keeping formatting - Google Sheets
我需要编写一个脚本,在 table 中添加行并保留上面行的现有格式。我有两个独立的函数可以做同样的事情,添加一行并保留上面一行的现有格式。 table 相同,只是电子表格中的位置不同。
出于某种原因,第二个 table 当我 运行 脚本时,它在第 37 行中应在的位置下方添加第 5 行单元格。我指定在单元格 33 中开始第二行,但出于某种原因,当我添加第二行时,它正在添加它。有人知道我可能做错了什么吗?
非常感谢任何帮助
更新代码
// global
var ss = SpreadsheetApp.getActive();
function onOpen() {
var menu = [{name:"Add New Last Row", functionName:"addRow"}];
ss.addMenu("Extra", menu);
}
function addRow() {
var s, data, rw;
s=SpreadsheetApp.getActiveSheet();
data=s.getDataRange().getValues();
for (rw in data) {
if (data[rw][6]=="Condition Description :") break;
}
s.insertRowBefore(Number(rw));
s.getRange(Number(rw), 4, 1, 2).merge();
s.getRange(Number(rw), 8).setFormula("=f"+Number(rw)+"*g"+Number(rw));
}
function addFirstRow() {
var firstRow= 15;
var sh = ss.getActiveSheet();
var lCol = sh.getLastColumn();
var range = sh.getRange(firstRow, 1, 1, lCol);
var formulas = range.getFormulas();
sh.insertRowsAfter(firstRow, 1);
sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
newRange = sh.getRange(firstRow, 1, 1, lCol);
newRange.setFormulas(formulas);
sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
}
function addSecondRow() {
var firstRow= 33;
var sh = ss.getActiveSheet();
var lCol = sh.getLastColumn();
var range = sh.getRange(firstRow, 1, 1, lCol);
var formulas = range.getFormulas();
sh.insertRowsAfter(firstRow, 1);
sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
newRange = sh.getRange(firstRow, 1, 1, lCol);
newRange.setFormulas(formulas);
sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
}
您的函数应如下所示:
function addSecondRow() {
var firstRow= 33;
var sh = ss.getActiveSheet();
var lCol = sh.getLastColumn();
var range = sh.getRange(firstRow, 1, 1, lCol);
var formulas = range.getFormulas();
sh.insertRowsAfter(firstRow, 1);
sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
newRange = sh.getRange(firstRow+1, 1, 1, lCol);
newRange.setFormulas(formulas);
}
正如我在评论中提到的,这是一个不正确的语法
newRange = sh.getRange(firstRow, 1, 1, lCol);
因为它将 select 您刚插入的那一行的上方。
select 您刚刚添加的行的正确方法是:
newRange = sh.getRange(firstRow+1, 1, 1, lCol);
我需要编写一个脚本,在 table 中添加行并保留上面行的现有格式。我有两个独立的函数可以做同样的事情,添加一行并保留上面一行的现有格式。 table 相同,只是电子表格中的位置不同。
出于某种原因,第二个 table 当我 运行 脚本时,它在第 37 行中应在的位置下方添加第 5 行单元格。我指定在单元格 33 中开始第二行,但出于某种原因,当我添加第二行时,它正在添加它。有人知道我可能做错了什么吗?
非常感谢任何帮助
更新代码
// global
var ss = SpreadsheetApp.getActive();
function onOpen() {
var menu = [{name:"Add New Last Row", functionName:"addRow"}];
ss.addMenu("Extra", menu);
}
function addRow() {
var s, data, rw;
s=SpreadsheetApp.getActiveSheet();
data=s.getDataRange().getValues();
for (rw in data) {
if (data[rw][6]=="Condition Description :") break;
}
s.insertRowBefore(Number(rw));
s.getRange(Number(rw), 4, 1, 2).merge();
s.getRange(Number(rw), 8).setFormula("=f"+Number(rw)+"*g"+Number(rw));
}
function addFirstRow() {
var firstRow= 15;
var sh = ss.getActiveSheet();
var lCol = sh.getLastColumn();
var range = sh.getRange(firstRow, 1, 1, lCol);
var formulas = range.getFormulas();
sh.insertRowsAfter(firstRow, 1);
sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
newRange = sh.getRange(firstRow, 1, 1, lCol);
newRange.setFormulas(formulas);
sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
}
function addSecondRow() {
var firstRow= 33;
var sh = ss.getActiveSheet();
var lCol = sh.getLastColumn();
var range = sh.getRange(firstRow, 1, 1, lCol);
var formulas = range.getFormulas();
sh.insertRowsAfter(firstRow, 1);
sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
newRange = sh.getRange(firstRow, 1, 1, lCol);
newRange.setFormulas(formulas);
sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
}
您的函数应如下所示:
function addSecondRow() {
var firstRow= 33;
var sh = ss.getActiveSheet();
var lCol = sh.getLastColumn();
var range = sh.getRange(firstRow, 1, 1, lCol);
var formulas = range.getFormulas();
sh.insertRowsAfter(firstRow, 1);
sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
newRange = sh.getRange(firstRow+1, 1, 1, lCol);
newRange.setFormulas(formulas);
}
正如我在评论中提到的,这是一个不正确的语法
newRange = sh.getRange(firstRow, 1, 1, lCol);
因为它将 select 您刚插入的那一行的上方。 select 您刚刚添加的行的正确方法是:
newRange = sh.getRange(firstRow+1, 1, 1, lCol);