如何将单个列中的一系列行从第一个空单元格复制到新列中
How to Copy a Range of Rows Within a Single Column into a New Column from the First Empty Cell
我是脚本编写的新手,我正在努力学习它,但我 运行 遇到了一个问题,我希望有人能够帮助我。
我可能无法很好地解释它,尤其是关于我使用的技术术语,但我会尽力而为。
本质上,我的目标是将 sheet1
中的 (B2:B23)
单元格范围从第一个可用单元格复制到 sheet2
中的 A 列中。但是,因为 sheet2
中的 B
列的值一直到第 450 行,我想从 A4
开始,所以我不能使用 getLastRow()
,因为它会跳转到 A450
.
*(B2:B23)
是固定的,我会定期将 C&P 值写入其中,但每次,当我 运行 我想要 sheet2
列 A
的脚本时使用下一个空单元格中的新值进行更新。
我已经尝试提升和改编我在此处和其他地方找到的代码变体,但到目前为止没有任何乐趣。
我将列出一些我一直在尝试的函数,您也许可以纠正我哪里出错了。
var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Batting");
var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Batsmen");
var colA = sheetTo.getRange('A:A').getValues();
var fcolA = colA.filter(function (e) {return e[0];});
var firstEmptyRowIncolA = fcolA.indexOf('')+1;
var valuesToCopy = sheetFrom.getRange(2, 2, sheetFrom.getMaxRows(), 1).getValues();
sheetTo.getRange(firstEmptyRowIncolA+4,1,valuesToCopy.length,1).setValues(valuesToCopy);
}
function outputAppend() {
var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Batting");
var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Batsmen");
var valuesToCopy = sheetFrom.getRange(2, 2, sheetFrom.getMaxRows(), 1).getValues();
sheetTo.getRange(sheetTo.getLastRow()+1,1,valuesToCopy.length,1).setValues(valuesToCopy);
}
function copytestdata() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Batting");
var sheet2 = ss.getSheetByName("Batsmen");
var players = sheet1.getRange("B2:B23");
var row=4;
var col=1;
var value= players.getValue();
// sheet1.getRange("B2:B23").copyTo(sheet2.getRange(sheet2.getLastRow()+1,1,1,1), {contentsOnly:true});
// }
players.copyTo(sheet2.getRange(row,col));
while(sheet2.getRange(row,col).getValue()!=""){
row++
}
// while(sheet1.getRange(row,col).getValue()!=""){
// row++;
// }
//
// sheet2.getRange(row,col).setValue(value);
}```
As you can see, it's all a bit messy and I've tied myself up in knots, so any help would be great.
Thanks
为了使您的解决方案生效,您应该使用以下函数:
getNextIndexA()
用于从 Batsmen
sheet.
中查找第一个空单元格的索引
function getNextIndexA() {
var sheetTo = SpreadsheetApp.getActive().getSheetByName("Batsmen");
var myValues = sheetTo.getRange("A:A").getValues();
var i;
for (i=0; i<myValues.length; i++) {
if (myValues[i][0] === '')
return i+1;
}
return i+1;
}
copyData()
用于复制你想要的数据到下一个空闲行。
这是通过使用带有 B2:B23
参数的 .getRange()
、.copyTo
方法和带有以下参数的 .getRange()
来完成的:
- 行:
getIndexA()
returns A 中的第一个空单元格
- column:
1
也就是A 对应的列
- numRows:
22
这是需要复制的行数
- colRows:
1
这是需要复制的列数。
function copyData() {
var sheetFrom = SpreadsheetApp.getActive().getSheetByName("Batting");
var sheetTo = SpreadsheetApp.getActive().getSheetByName("Batsmen");
var valuesToCopy = sheetFrom.getRange("B2:B23").getValues();
sheetFrom.getRange("B2:B23").copyTo(sheetTo.getRange(getNextIndexA(), 1, 22, 1));
}
此外,我建议您查看以下链接,因为它们可能会有所帮助:
我是脚本编写的新手,我正在努力学习它,但我 运行 遇到了一个问题,我希望有人能够帮助我。
我可能无法很好地解释它,尤其是关于我使用的技术术语,但我会尽力而为。
本质上,我的目标是将 sheet1
中的 (B2:B23)
单元格范围从第一个可用单元格复制到 sheet2
中的 A 列中。但是,因为 sheet2
中的 B
列的值一直到第 450 行,我想从 A4
开始,所以我不能使用 getLastRow()
,因为它会跳转到 A450
.
*(B2:B23)
是固定的,我会定期将 C&P 值写入其中,但每次,当我 运行 我想要 sheet2
列 A
的脚本时使用下一个空单元格中的新值进行更新。
我已经尝试提升和改编我在此处和其他地方找到的代码变体,但到目前为止没有任何乐趣。
我将列出一些我一直在尝试的函数,您也许可以纠正我哪里出错了。
var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Batting");
var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Batsmen");
var colA = sheetTo.getRange('A:A').getValues();
var fcolA = colA.filter(function (e) {return e[0];});
var firstEmptyRowIncolA = fcolA.indexOf('')+1;
var valuesToCopy = sheetFrom.getRange(2, 2, sheetFrom.getMaxRows(), 1).getValues();
sheetTo.getRange(firstEmptyRowIncolA+4,1,valuesToCopy.length,1).setValues(valuesToCopy);
}
function outputAppend() {
var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Batting");
var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Batsmen");
var valuesToCopy = sheetFrom.getRange(2, 2, sheetFrom.getMaxRows(), 1).getValues();
sheetTo.getRange(sheetTo.getLastRow()+1,1,valuesToCopy.length,1).setValues(valuesToCopy);
}
function copytestdata() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Batting");
var sheet2 = ss.getSheetByName("Batsmen");
var players = sheet1.getRange("B2:B23");
var row=4;
var col=1;
var value= players.getValue();
// sheet1.getRange("B2:B23").copyTo(sheet2.getRange(sheet2.getLastRow()+1,1,1,1), {contentsOnly:true});
// }
players.copyTo(sheet2.getRange(row,col));
while(sheet2.getRange(row,col).getValue()!=""){
row++
}
// while(sheet1.getRange(row,col).getValue()!=""){
// row++;
// }
//
// sheet2.getRange(row,col).setValue(value);
}```
As you can see, it's all a bit messy and I've tied myself up in knots, so any help would be great.
Thanks
为了使您的解决方案生效,您应该使用以下函数:
getNextIndexA()
用于从 Batsmen
sheet.
function getNextIndexA() {
var sheetTo = SpreadsheetApp.getActive().getSheetByName("Batsmen");
var myValues = sheetTo.getRange("A:A").getValues();
var i;
for (i=0; i<myValues.length; i++) {
if (myValues[i][0] === '')
return i+1;
}
return i+1;
}
copyData()
用于复制你想要的数据到下一个空闲行。
这是通过使用带有 B2:B23
参数的 .getRange()
、.copyTo
方法和带有以下参数的 .getRange()
来完成的:
- 行:
getIndexA()
returns A 中的第一个空单元格
- column:
1
也就是A 对应的列
- numRows:
22
这是需要复制的行数 - colRows:
1
这是需要复制的列数。
function copyData() {
var sheetFrom = SpreadsheetApp.getActive().getSheetByName("Batting");
var sheetTo = SpreadsheetApp.getActive().getSheetByName("Batsmen");
var valuesToCopy = sheetFrom.getRange("B2:B23").getValues();
sheetFrom.getRange("B2:B23").copyTo(sheetTo.getRange(getNextIndexA(), 1, 22, 1));
}
此外,我建议您查看以下链接,因为它们可能会有所帮助: