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

多工作表共用变量,仅触发按钮所在表导出的问题排查

问题修复方案

一、解决"TypeError: Cannot read property 'copyTo' of null"错误

该错误由3处代码问题导致,逐一修复即可:

  1. 数组索引越界
    原循环从k=1开始到sheetListArray.length,但数组索引从0起始,当k=sheetListArray.length时,sheetListArray[k]为undefined,传入getSheetByName后返回null。
    修复:调整循环逻辑:
for(var k = 0; k < sheetListArray.length; k++){
  ExportData1g(sheetListArray[k]);
}
  1. PB1g函数调用未传参
    在ExportData1g中调用PB1g()时未传入sheetname参数,导致PB1g里ss.getSheetByName(sheetname)返回null。
    修复:调用时传入参数:
if (cell === "1" || cell === "0") { 
  PB1g(sheetname); 
}
  1. 条件判断逻辑错误
    原代码if (cell == "1" || "0")中,"0"属于布尔真值,条件永远成立,会触发不符合预期的逻辑执行。
    修复:修正判断逻辑:
if (cell === "1" || cell === "0") { 

二、确保仅导出触发按钮所在工作表的数据

无需遍历工作表数组,直接获取当前激活的工作表(即按钮所在工作表)即可:

  1. 删除原有数组遍历循环,替换为获取当前工作表的逻辑:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
ExportData1g(activeSheet.getName());
  1. 此修改后,点击按钮时只会处理当前按钮所在的工作表,无需手动维护工作表数组,适配性更强。

完整修复后的代码

var ss = SpreadsheetApp.getActiveSpreadsheet();
// 获取当前按钮所在的工作表
var activeSheet = ss.getActiveSheet();
ExportData1g(activeSheet.getName());

function ExportData1g(sheetname) {
  var result = SpreadsheetApp.getUi().alert("Fertig-Hacken gesetzt?", SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
  if (result === SpreadsheetApp.getUi().Button.OK) {
    const ssh = ss.getSheetByName(sheetname);
    const cell = ssh.getRange("CheckButton1").getValue();
    // 修正条件判断逻辑
    if (cell === "1" || cell === "0") { 
      // 传入sheetname参数
      PB1g(sheetname); 
    } else {
      return;
    }
  } else {
    return;
  }

  const ssh = ss.getSheetByName(sheetname);
  var dataRange = ssh.getRange('CheckBox1');
  var values = dataRange.getValues();
  for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {
      if (values[i][j] == true) {
        values[i][j] = false; 
      }
    }
  }
  dataRange.setValues(values);

  var commentRange = ssh.getRange('ResetComment1');
  var dataRange = ssh.getRange('EmptyBoxes1');
  var values = dataRange.getValues();
  for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {
      if (values[i][j] == 1) {
        values[i][j] = 0; 
      }
    }
  }
  commentRange.clearContent();
  dataRange.setValues(values); 
}
  
function PB1g(sheetname)  { 
  const ssh = ss.getSheetByName(sheetname);
  const tss = SpreadsheetApp.openById("1wMw5H48Fmc1R8WGy34d80x9-W996c9GNVuAD3-mFtVQ");
  const tsh = tss.getSheetByName("PB");
  const nsh = ssh.copyTo(tss);

  var firstEmptyRow = tsh.getLastRow() + 1;
  var timestamp = new Date();

  tsh.appendRow([timestamp]);

  nsh.getRange("CopytoMasterdata1").copyTo(tsh.getRange("B" + firstEmptyRow), {contentsOnly:true});
  tss.deleteSheet(nsh); 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:35:26