Google apps script 如何优化代码以将一个图纸范围复制到另一个图纸范围

Google apps script 如何优化代码以将一个图纸范围复制到另一个图纸范围,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我下面的代码可以工作,但我认为有一种更优雅的方式来完成它。我想将客户工作表(源)上所选行(D:R)的一部分复制到测试工作表(目标)中该工作表(C:Q)中的第一个空白行 代码可以工作,但看起来没有性能/不优雅 function rowSelected() { var customer_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Customer_Info"); var invoice_sheet = Sp

我下面的代码可以工作,但我认为有一种更优雅的方式来完成它。我想将客户工作表(源)上所选行(D:R)的一部分复制到测试工作表(目标)中该工作表(C:Q)中的第一个空白行

代码可以工作,但看起来没有性能/不优雅

function rowSelected() {  
  var customer_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Customer_Info");
  var invoice_sheet =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test");
  var customer_selection_row = customer_sheet.getActiveRange().getRow();
  //Browser.msgBox(customer_selection_row);

  var customer_selection_start = 'D' + customer_selection_row;
  var customer_selection_end = 'R' + customer_selection_row;
  var customer_selection_range = customer_selection_start + ':' + customer_selection_end;
  var source_range = customer_sheet.getRange(customer_selection_range);
  customer_sheet.setActiveRange(source_range);
  //Browser.msgBox(source_range.getA1Notation());

  var invoice_selection_row = getFirstEmptyRowWholeRow();
  var invoice_selection_start = 'C' + invoice_selection_row;
  var invoice_selection_end = 'Q' + invoice_selection_row;
  var invoice_selection_range = invoice_selection_start + ':' + invoice_selection_end;
  var destination_range = invoice_sheet.getRange(invoice_selection_range);
  invoice_sheet.setActiveRange(destination_range);
  //Browser.msgBox(destination_range.getA1Notation());

  customer_sheet.setActiveRange(source_range).copyTo((destination_range), {contentsOnly:true});
}
我认为有一种方法可以用更少的代码来实现这一点。

  • 您希望将工作表
    客户信息
    的活动范围行中的列“D”复制到“R”中,并将其复制到工作表
    测试
    GetFirstEmptyRowHolerow()
    检索到的行中的列“C”到“Q”
  • 您要激活源范围
如果我的理解是正确的,这次修改怎么样

修改点:
  • SpreadsheetApp.getActiveSpreadsheet()
    一次声明为“ss”
  • 使用
    getRange(行、列、numRows、numColumns)
    代替
    getRange(a1表示法)
  • 关于
    目的地范围
    ,设置起始单元格时,可以从中复制源范围
  • 当活动工作表为
    Customer\u Info
    时,将运行脚本
修改脚本:
  • 脚本的
    getFirstEmptyRowHolerow()
    也用于上述修改的脚本
  • 在此修改后的脚本中,如果要在工作表
    Customer\u Info
    上选择“A1:A3”的范围并运行脚本,则单元格“D1:R3”的值将从列“C”的单元格和
    GetFirstEmptyRowHolerow()的行中复制
参考资料:

如果我误解了你的问题,而这不是你想要的,我道歉。

谢谢你的输入,我会测试它。@Alan W。谢谢你的回答。我很高兴你的问题解决了。
function rowSelected() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var customer_sheet = ss.getActiveSheet();
  if (customer_sheet.getSheetName() == "Customer_Info") {
    var invoice_sheet = ss.getSheetByName("Test");
    var activeRange = ss.getActiveRange();
    var source_range = customer_sheet.getRange(activeRange.getRow(), 4, activeRange.getNumRows(), 15).activate();
    var destination_range = invoice_sheet.getRange(getFirstEmptyRowWholeRow(), 3); // or invoice_sheet.getRange("C" + getFirstEmptyRowWholeRow())
    source_range.copyTo(destination_range, {contentsOnly: true});
  }
}