You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Sheets使用setValues复制数据时跳过指定列?

解决方案

要跳过C列并保留其中的数组公式,你不能直接从B列开始连续写入9列(这样会覆盖C列),而是需要拆分数据写入操作,单独写入B列和D-K列。

关键代码修改

找到Call Tracker分支中的这段代码:

datasheet_Call_Tracker.getRange(getLastRowByDirectionUp(datasheet_Call_Tracker, "B")+1,2,1,9).setValues(values);

替换为以下代码:

// 获取目标工作表的下一个空行
var targetRow = getLastRowByDirectionUp(datasheet_Call_Tracker, "B") + 1;
// 写入B列(第2列),对应values的第一个元素
datasheet_Call_Tracker.getRange(targetRow, 2).setValue(values[0][0]);
// 写入D到K列(第4至第11列),对应values中第2到第9个元素
datasheet_Call_Tracker.getRange(targetRow, 4, 1, 8).setValues([values[0].slice(1)]);

额外优化:移除重复函数定义

你的代码中getLastRowByDirectionUp函数被重复定义了两次(分别在两个分支里),这会导致语法错误。请将该函数移到submitData函数外部,作为全局函数:

function getLastRowByDirectionUp(sheet, col) {
  if(sheet.getRange(col + sheet.getLastRow()).getValue() == "") {
    return sheet.getRange(col + sheet.getLastRow()).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  } else {
    return sheet.getLastRow();
  }
}

function submitData(){
  // 原函数内容...
}

完整修正后代码

function getLastRowByDirectionUp(sheet, col) {
  if(sheet.getRange(col + sheet.getLastRow()).getValue() == "") {
    return sheet.getRange(col + sheet.getLastRow()).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  } else {
    return sheet.getLastRow();
  }
}

function submitData(){
  var myGoogleSheet = SpreadsheetApp.getActiveSpreadsheet();
  var shUserForm = myGoogleSheet.getSheetByName("Form");
  var datasheet_KPI = myGoogleSheet.getSheetByName("Monthly KPI Records");
  var datasheet_Call_Tracker = myGoogleSheet.getSheetByName("Call Tracker Records");
  var formType = SpreadsheetApp.getActiveSheet().getRange('B4').getValue();

  if (formType === 'Monthly Agent KPI') {
    var user = Session.getActiveUser().getUserLoginId();
    var ui = SpreadsheetApp.getUi();
    var response=ui.alert("Submit", "Do you want to Submit this Monthly Agent KPI record?", ui.ButtonSet.YES_NO);

    if(response==ui.Button.NO) {
      return;
    }

    var values = [[
      shUserForm.getRange("E11").getDisplayValue() ,
      shUserForm.getRange("F11").getValue(),
      shUserForm.getRange("G11").getValue(),
      shUserForm.getRange("H11").getValue(),
      shUserForm.getRange("I11").getValue(),
      shUserForm.getRange("J11").getValue(),
      shUserForm.getRange("K11").getValue(),
      shUserForm.getRange("L11").getValue(),
      shUserForm.getRange("M11").getValue(),
      shUserForm.getRange("N11").getValue(),
      shUserForm.getRange("O11").getValue(),
    ]];

    datasheet_KPI.getRange(getLastRowByDirectionUp(datasheet_KPI, "A")+1,1,1,11).setValues(values);

    // 清空表单字段
    shUserForm.getRange('E11:J11').clearContent();
    shUserForm.getRange('K11').clearContent();
    shUserForm.getRange('M11:O11').clearContent();

    myGoogleSheet.toast("Monthly Agent KPI record added successfully!");

  } else if (formType === 'Call Tracker') {
    var ui = SpreadsheetApp.getUi();
    var response=ui.alert("Submit", "Do you want to Submit this Call Tracker record?", ui.ButtonSet.YES_NO);

    if(response==ui.Button.NO) {
      return;
    }

    var values = [[
      shUserForm.getRange("E13").getDisplayValue() ,
      shUserForm.getRange("F13").getValue(),
      shUserForm.getRange("G13").getValue(),
      shUserForm.getRange("H13").getValue(),
      shUserForm.getRange("I13").getValue(),
      shUserForm.getRange("J13").getValue(),
      shUserForm.getRange("K13").getValue(),
      shUserForm.getRange("L13").getValue(),
      shUserForm.getRange("M13").getValue(),
    ]];

    // 修改后的写入逻辑:跳过C列
    var targetRow = getLastRowByDirectionUp(datasheet_Call_Tracker, "B") + 1;
    datasheet_Call_Tracker.getRange(targetRow, 2).setValue(values[0][0]);
    datasheet_Call_Tracker.getRange(targetRow, 4, 1, 8).setValues([values[0].slice(1)]);

    // 清空表单字段
    shUserForm.getRange('E13:M13').clearContent();

    myGoogleSheet.toast("Call Tracker record added successfully!");
  }
}

说明

  • 拆分写入操作后,代码只会修改B列和D-K列的单元格,完全不会触碰C列,因此不会覆盖其中的数组公式。
  • 额外优化了表单清空逻辑,用clearContent()替代多次setValue(''),代码更简洁高效。
  • 移除了重复的函数定义,避免运行时错误。

内容的提问来源于stack exchange,提问作者Jarvis Davis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:07:03