Google sheets 脚本 - 将不同的数据从一个 sheet 复制到另一个 sheet
Google sheets script - copy varying data from one sheet to another in same spreadsheet
不知道你能不能帮我解决这个问题。尽管尝试学习,但我对脚本的了解很差。
This is an example of my spreadsheet.
每个月,在每月 sheet 中,我从冻结行下方的所有行(仅 B、C 和 D 列)复制数据,并在脑海中记下复制的行数(单元格 E2 中显示的数字可能会有所不同)。然后我转到 Daily sheet,在解冻部分的顶部插入所需的行数,然后粘贴数据值 (CTRL Shift V)。
我一直在尝试使用脚本自动执行此操作,但没有成功。我曾尝试将其他解决方案中的代码片段拼凑在一起,但使用的方法不同以及我缺乏知识意味着我无法让它们工作。
希望能帮到你。
非常感谢。
您可以执行以下操作:
- 使用 Sheet.getRange.
从 Monthly
中检索所需的范围
- 通过Range.getNumRows(), insert the corresponding number of blank rows to
Daily
(starting at row 4, first unfrozen one) using Sheet.insertRowsBefore考虑源范围行数。
- 使用 Range.copyTo.
将检索到的范围复制到 Daily!B4
(第一个解冻行)
代码片段:
function copyRange() {
const ss = SpreadsheetApp.getActive();
const monthlySheet = ss.getSheetByName("Monthly");
const dailySheet = ss.getSheetByName("Daily");
const firstRow = 5;
const sourceRange = monthlySheet.getRange(firstRow,2,monthlySheet.getLastRow()-firstRow+1,3);
dailySheet.insertRowsBefore(4, sourceRange.getNumRows());
const destRange = dailySheet.getRange("B4");
sourceRange.copyTo(destRange,SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);
}
经过多次尝试但都失败了,我现在设法通过录制宏、找出生成的脚本中每一行或每一节的作用并对其进行编辑来制作一些看起来可行的东西,需要进行一些额外的在线研究。可能有点笨拙,但这是我努力的结果:
function CommitMonthly() {
// Script is only ever run from the Monthly sheet via the Commit button. Get the number of rows.
var spreadsheet = SpreadsheetApp.getActive();
var NumberOfRows = spreadsheet.getRange('E2').getValue();
// Select the Daily sheet, select top row, insert required number of rows above it.
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Daily'), true);
spreadsheet.getRange('B4').activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), NumberOfRows);
// Copy and paste the data from Monthly to new rows in Daily.
spreadsheet.getRange('Monthly!B5:D').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
非常感谢您的帮助。
不知道你能不能帮我解决这个问题。尽管尝试学习,但我对脚本的了解很差。
This is an example of my spreadsheet.
每个月,在每月 sheet 中,我从冻结行下方的所有行(仅 B、C 和 D 列)复制数据,并在脑海中记下复制的行数(单元格 E2 中显示的数字可能会有所不同)。然后我转到 Daily sheet,在解冻部分的顶部插入所需的行数,然后粘贴数据值 (CTRL Shift V)。
我一直在尝试使用脚本自动执行此操作,但没有成功。我曾尝试将其他解决方案中的代码片段拼凑在一起,但使用的方法不同以及我缺乏知识意味着我无法让它们工作。
希望能帮到你。
非常感谢。
您可以执行以下操作:
- 使用 Sheet.getRange. 从
- 通过Range.getNumRows(), insert the corresponding number of blank rows to
Daily
(starting at row 4, first unfrozen one) using Sheet.insertRowsBefore考虑源范围行数。 - 使用 Range.copyTo. 将检索到的范围复制到
Monthly
中检索所需的范围
Daily!B4
(第一个解冻行)
代码片段:
function copyRange() {
const ss = SpreadsheetApp.getActive();
const monthlySheet = ss.getSheetByName("Monthly");
const dailySheet = ss.getSheetByName("Daily");
const firstRow = 5;
const sourceRange = monthlySheet.getRange(firstRow,2,monthlySheet.getLastRow()-firstRow+1,3);
dailySheet.insertRowsBefore(4, sourceRange.getNumRows());
const destRange = dailySheet.getRange("B4");
sourceRange.copyTo(destRange,SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);
}
经过多次尝试但都失败了,我现在设法通过录制宏、找出生成的脚本中每一行或每一节的作用并对其进行编辑来制作一些看起来可行的东西,需要进行一些额外的在线研究。可能有点笨拙,但这是我努力的结果:
function CommitMonthly() {
// Script is only ever run from the Monthly sheet via the Commit button. Get the number of rows.
var spreadsheet = SpreadsheetApp.getActive();
var NumberOfRows = spreadsheet.getRange('E2').getValue();
// Select the Daily sheet, select top row, insert required number of rows above it.
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Daily'), true);
spreadsheet.getRange('B4').activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), NumberOfRows);
// Copy and paste the data from Monthly to new rows in Daily.
spreadsheet.getRange('Monthly!B5:D').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
非常感谢您的帮助。