Chrome Google脚本:仅将值粘贴到列A的最后一行

8ljdwjyq  于 2023-06-27  发布在  Go
关注(0)|答案(1)|浏览(120)

这个脚本的目的是复制我高亮显示/选择的多行的列值,并粘贴到另一个GoogleSheet。然而,目标电子表格的B列和c列已经包含公式,我希望代码忽略它并获取A列的最后一行,有没有办法做到这一点,它不会改变b列和c列的值/公式?先谢谢你了

function copySelectedRows() {
  var sourceSpreadsheetId = "SOURCE_SPREADSHEET_ID";
  var targetSpreadsheetId = "TARGET_SPREADSHEET_ID";
  
  var sourceSheetName = "SourceSheetName";
  var targetSheetName = "TargetSheetName"
  
  var sourceSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetId);
  var sourceSheet = sourceSpreadsheet.getSheetByName(sourceSheetName);
  
  var targetSpreadsheet = SpreadsheetApp.openById(targetSpreadsheetId);
  var targetSheet = targetSpreadsheet.getSheetByName(targetSheetName);
  
  var selection = sourceSheet.getSelection();
  var selectedRanges = selection.getActiveRangeList().getRanges();
  
  var targetData = [];
  
  selectedRanges.forEach(function (range) {
    var startRow = range.getRow();
    var numRows = range.getNumRows();
    var sourceRange = sourceSheet.getRange(startRow, 2, numRows, 4); // Assuming column B is index 2, column C is index 3, and column D is index 4
    var sourceValues = sourceRange.getValues();
    
    sourceValues.forEach(function (row) {
      targetData.push([row[0], "", "", row[1], row[2], row[3]]); // Copying values from column B, C, D to E, A, and F respectively
    });
  });
  
  var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1, targetData.length, targetData[0].length); // Starting from column A (1)
  targetRange.setValues(targetData);
}
83qze16e

83qze16e1#

在你的脚本中,下面的修改怎么样?在这种情况下,我猜测当使用Sheets API时,脚本可能很简单。因此,在此修改中,使用Sheets API。
在测试此脚本之前,请在高级Google服务中启用Sheets API。
请按如下方式修改您的脚本。

发件人:

var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1, targetData.length, targetData[0].length); // Starting from column A (1)
targetRange.setValues(targetData);

收件人:

var targetLastRow = targetSheet.getRange("A1:A" + (targetSheet.getLastRow() || 1)).getDisplayValues().findIndex(([a]) => !a);
Sheets.Spreadsheets.Values.update({ values: targetData.map(r => r.map(c => c.toString() ? c : null)) }, targetSpreadsheetId, `'${targetSheetName}'!A${targetLastRow + 1}`, { valueInputOption: "USER_ENTERED" });

注意:

  • 从你的问题和你的演示脚本来看,我认为var sourceSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetId);可能是var sourceSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();

参考资料:

相关问题