Google 工作表脚本 - 将不同的数据从一张工作表复制到同一电子表格中的另一张工作表

时间:2021-01-21 13:39:01

标签: google-apps-script google-sheets copy-paste dynamic-data

不知道你能不能帮我解决这个问题。尽管尝试学习,但我对脚本的了解很差。

This is an example of my spreadsheet

每个月,在每月工作表中,我从冻结行下方的所有行(仅列 B、C 和 D)复制数据,并在我的头脑中记下复制的行数(单元格中显示的数字) E2,可能会有所不同)。然后我转到每日工作表,在未冻结部分的顶部插入所需的行数,并粘贴数据值(CTRL Shift V)。

我一直在尝试使用脚本自动执行此操作,但未成功。我曾尝试将其他解决方案的代码拼凑在一起,但使用的不同方法和我缺乏知识意味着我无法让它们工作。

希望能帮到你。

非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

  • 使用 Sheet.getRangeMonthly 检索所需范围。
  • 考虑到通过 Range.getNumRows() 的源范围行数,使用 Sheet.insertRowsBefore 将相应数量的空白行插入到 Daily(从第 4 行开始,第一个解冻的行)。< /li>
  • 使用 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);
}

答案 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);
};

非常感谢您的帮助。

相关问题