copyTo(destination, copyPasteType, transposed) stops rest of function from executing

社会主义新天地 提交于 2021-01-29 10:35:16

问题


I'm trying to use the function copyTo(destination, copyPasteType, transposed) to copy a sheet in one file to another sheet in a different file while keeping everything, including column width, the same. Using just the function copyTo(destination), my code works and I get everything I want in a different file, EXCEPT the column width. However, when I try and use copyTo with the copyPasteType argument, the sheet is copied perfectly (with the correct column widths), BUT any subsequent code isn't run. Why is this happening, and how can I fix it?

function createSpreadsheet(foldername) {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('Sheet1');

  var folder = DriveApp.getFolderById(foldername);

  RESPONSE = FileName(); //a function that prompts the user for a filename

  //creates a new spreadsheet which has two sheets, and deletes the "Copy of Sheet1" sheet
  var newSpreadsheet = SpreadsheetApp.create(RESPONSE);
  var newsheet = newSpreadsheet.getSheetByName('Sheet1');
  var copysheet = sheet.copyTo(newSpreadsheet);
  sheet.copyTo(newSpreadsheet, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);

  //when using CopyPasteType argument, everything from here down isn't run
  copysheet.getDataRange().copyTo(newsheet.getDataRange());
  copysheet.getDataRange().copyTo(newsheet.getDataRange(), 
  SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  newSpreadsheet.deleteSheet(copysheet);

  var newSpreadsheetID = newSpreadsheet.getId();
  var file = DriveApp.getFileById(newSpreadsheetID);
  folder.addFile(file); 
  DriveApp.removeFile(file);
  clearYellow(); //clears contents of yellow cells
  clearGray(); //clears contents of gray cells
}

I've also asked this question in Google+


回答1:


I didn't find an answer as to why the copyTo with three arguments stopped the rest of my function from executing, but I found another way to copy the column widths over to the new spreadsheet that works.

function createSpreadsheet(foldername) {
  var oldspreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var oldsheet = oldspreadsheet.getSheetByName('Sheet1');

  var folder = DriveApp.getFolderById(foldername);

  RESPONSE = FileName();

  //creates a new spreadsheet which has two sheets, and deletes the "Copy of Sheet1" sheet
  var newSpreadsheet = SpreadsheetApp.create(RESPONSE);
  var newsheet = newSpreadsheet.getSheetByName('Sheet1');
  var copysheet = oldsheet.copyTo(newSpreadsheet);
  copysheet.getDataRange().copyTo(newsheet.getDataRange());

  var numberOfColumns = oldsheet.getLastColumn();
  for (columnNumber = 1; columnNumber <= numberOfColumns; columnNumber++){
    var Width = oldsheet.getColumnWidth(columnNumber);
    newsheet.setColumnWidth(columnNumber, Width);
  };

  newSpreadsheet.deleteSheet(copysheet);

  var newSpreadsheetID = newSpreadsheet.getId();
  var file = DriveApp.getFileById(newSpreadsheetID);
  folder.addFile(file); 
  DriveApp.removeFile(file);
  clearYellow(); //clears contents of yellow cells
  clearGray(); //clears contents of gray cells
}


来源:https://stackoverflow.com/questions/51052408/copytodestination-copypastetype-transposed-stops-rest-of-function-from-execu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!