不知道你能不能帮我解决这个问题。尽管尝试学习,但我对脚本的了解很差。
This is an example of my spreadsheet。
每个月,在每月工作表中,我从冻结行下方的所有行(仅列 B、C 和 D)复制数据,并在我的头脑中记下复制的行数(单元格中显示的数字) E2,可能会有所不同)。然后我转到每日工作表,在未冻结部分的顶部插入所需的行数,并粘贴数据值(CTRL Shift V)。
我一直在尝试使用脚本自动执行此操作,但未成功。我曾尝试将其他解决方案的代码拼凑在一起,但使用的不同方法和我缺乏知识意味着我无法让它们工作。
希望能帮到你。
非常感谢。
答案 0 :(得分:0)
您可以执行以下操作:
Monthly
检索所需范围。Daily
(从第 4 行开始,第一个解冻的行)。< /li>
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);
}
答案 1 :(得分:0)
多次尝试但都失败了,我现在设法通过录制宏,计算出结果脚本中的每一行或每一节的作用,并对其进行编辑,从而制作出一些似乎有效的东西需要一些额外的在线研究。它可能有点笨重,但这是我努力的结果:
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);
};
非常感谢您的帮助。