Javascript 当我将代码从一个工作簿复制到另一个工作簿时,为什么代码会中断?

Javascript 当我将代码从一个工作簿复制到另一个工作簿时,为什么代码会中断?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,所以我刚请了五楼的人为我写了这篇文章,效果很好!我让他把它写在我工作需要的那本书的副本上。当我复制到工作中分配给我的文件中时,它在第40行中断。任何和所有的修复将是伟大的 我认为它没有选择正确的工作表,因此它正在回退一个空错误 TypeError:无法读取null的属性“getRange” 这是我在运行它之后得到的错误。同样,尽管这在工作簿上有效,我让他设计了它,但我需要知道如何修复它 // If you want to change any tab's name, also change

所以我刚请了五楼的人为我写了这篇文章,效果很好!我让他把它写在我工作需要的那本书的副本上。当我复制到工作中分配给我的文件中时,它在第40行中断。任何和所有的修复将是伟大的

我认为它没有选择正确的工作表,因此它正在回退一个空错误

TypeError:无法读取null的属性“getRange”

这是我在运行它之后得到的错误。同样,尽管这在工作簿上有效,我让他设计了它,但我需要知道如何修复它

  // If you want to change any tab's name, also change it from here.
  var ss = SpreadsheetApp.getActive();
  var tem = ss.getSheetByName("Template");
  var frm = ss.getSheetByName("Form Responses 1");
  var cde = ss.getSheetByName("Code");
//---------------------------------------------------------------------------------------------------------------------------------------
  lr = frm.getLastRow();
 // Logger.log(lr)

  for(i=4; i<=lr; i++){
    //----------These are values from the Form Responses tab, 2,1, 3, 4, 5 ... represent the column numbers. 
    // For example, date is in column 1, so  var date = frm.getRange(i,1).getValue();
    // store name is in column 3, so var store = frm.getRange(i,3).getValue();

    var tabName = frm.getRange(i,2).getValue();
    var date = frm.getRange(i,1).getValue();
    var store = frm.getRange(i,3).getValue();
    var add1 = frm.getRange(i,4).getValue();
    var add2 = frm.getRange(i,5).getValue();
    var add3 = frm.getRange(i,6).getValue();
    var zip = frm.getRange(i,7).getValue();
    var city = frm.getRange(i,8).getValue();
    var state = frm.getRange(i,9).getValue();
    var phone = frm.getRange(i,10).getValue();
    var email = frm.getRange(i,11).getValue();
    var po = frm.getRange (i,16).getValue();
    var glowHeart = frm.getRange(i,17).getValue();
    var glowSquare = frm.getRange(i,18).getValue();
    var rainHeart = frm.getRange(i,19).getValue();
    var rainSquare = frm.getRange(i,20).getValue();
    ///-----The following line of code checks if there is already a tab for a store name, if not create new.
    if(ss.getSheetByName(tabName)==null && tabName!==""){
      var create = ss.insertSheet(tabName);
    }
  if ( tabName==""){
    break;
  }
  ///- - - - - - Now write the row values to the template tab.
    tem.getRange("B2").setValue(tabName); // cell B2 is set to name
    tem.getRange("B3").setValue(store);// cell B3 is set to store name and so on
    tem.getRange("F3").setValue(date);
    tem.getRange("B5").setValue(add1);
    tem.getRange("B6").setValue(add2);
    tem.getRange("B7").setValue(add3);
    tem.getRange("B8").setValue(zip);
    tem.getRange("B9").setValue(city);
    tem.getRange("B10").setValue(state);
    tem.getRange("B12").setValue(phone);
    tem.getRange("B13").setValue(email);
    tem.getRange("C17").setValue(glowHeart);
    tem.getRange("C18").setValue(glowSquare);
    tem.getRange("D17").setValue(rainHeart);
    tem.getRange("D18").setValue(rainSquare);
    tem.getRange("F4").setValue(po);

    /// Once the template is filled, it is moved to the newly created tab
    moveVal(tabName)
    // After that, new file is created for that 
    createNewFile(tabName)

/// These lines clear the template once done.
        tem.getRange("B2").setValue("");
    tem.getRange("B3").setValue("");
    tem.getRange("F3").setValue("");
    tem.getRange("B5").setValue("");
    tem.getRange("B6").setValue("");
    tem.getRange("B7").setValue("");
    tem.getRange("B8").setValue("");
    tem.getRange("B9").setValue("");
    tem.getRange("B10").setValue("");
    tem.getRange("B12").setValue("");
    tem.getRange("B13").setValue("");
    tem.getRange("C17").setValue("");
    tem.getRange("C18").setValue("");
    tem.getRange("D17").setValue("");
    tem.getRange("D18").setValue("");
    tem.getRange("F4").setValue("");
    
  }
}


// This fucntion creates new tabs
function moveVal(tabName) {
    var ss = SpreadsheetApp.getActive();
  var spreadsheet = ss.getSheetByName("Template");
  //var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A1:G29').activate();
  ss.setActiveSheet(ss.getSheetByName(tabName), true);
  ss.getRange('Template!A1:G29').copyTo(ss.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  ss.setActiveSheet(ss.getSheetByName('Template'), true);
  spreadsheet.getRange('F9').activate();
};

// This fucntion creates new files.
function createNewFile(tabName){
 
    var ss = SpreadsheetApp.getActive();
  var cde = ss.getSheetByName("Code");
  var newF = SpreadsheetApp.create(tabName);
  var dd = newF.getId();
  Logger.log(dd)

var source = SpreadsheetApp.getActiveSpreadsheet();

  var sheet = source.getSheetByName("Price");

 var destination = SpreadsheetApp.openById(dd);

 sheet.copyTo(destination);
 destination.getSheetByName("Copy of Price").setName("Price");

 var sheet = source.getSheetByName("Template");

 var destination = SpreadsheetApp.openById(dd);

 sheet.copyTo(destination);
  destination.getSheetByName("Copy of Template").setName(tabName);


  destination.getSheetByName("Sheet1").getRange('D26').activate();
  destination.deleteActiveSheet();
  destination.getSheetByName(tabName).activate()
  destination.setActiveSheet(destination.getSheetByName('Price'), true);
  destination.getActiveSheet().hideSheet();

    sourceFileId =dd;
  //targetFolderId = "xxxxxxxxxxxxxx";
  ////////////////////////////// You can change the cell from here. ////////////
  targetFolderId = cde.getRange("G3").getValue(); // This gets the folder's id from cell G3 in Code tab

  ///..........................................................................................
  //Logger.log(targetFolderId)
  moveFiles(sourceFileId,targetFolderId)
}

// THis fucntion moves the file to the specified folder.
function moveFiles(sourceFileId,targetFolderId) {

  var file = DriveApp.getFileById(sourceFileId);
  var folder = DriveApp.getFolderById(targetFolderId);
  file.moveTo(folder);
}

从您的
TypeError:cannotread属性'getRange'为null
的错误消息中,再次确认活动电子表格中是否有“Template”工作表名称的工作表?您能否澄清
第40行是哪一行?
 tem.getRange("B2").setValue(tabName); // cell B2 is set to name
    tem.getRange("B3").setValue(store);// cell B3 is set to store name and so on
    tem.getRange("F3").setValue(date);
    tem.getRange("B5").setValue(add1);
    tem.getRange("B6").setValue(add2);
    tem.getRange("B7").setValue(add3);
    tem.getRange("B8").setValue(zip);
    tem.getRange("B9").setValue(city);
    tem.getRange("B10").setValue(state);
    tem.getRange("B12").setValue(phone);
    tem.getRange("B13").setValue(email);
    tem.getRange("C17").setValue(glowHeart);
    tem.getRange("C18").setValue(glowSquare);
    tem.getRange("D17").setValue(rainHeart);
    tem.getRange("D18").setValue(rainSquare);
    tem.getRange("F4").setValue(po);