Измените скрипт для вставки только значений и назовите конечный файл копии в значение ячейки - PullRequest
0 голосов
/ 04 февраля 2020

Я ищу скрипт, который при запуске сохранит запись отчетов, которые я отправлю своему боссу. Я нашел сценарий, который почти делает то, что мне нужно. Я хочу скопировать один лист в электронной таблице в новую электронную таблицу (без копирования сценариев, связанных с контейнером) только в качестве значений, и переименовать новый файл электронной таблицы в значение ячейки из исходного листа.

Вот что Я работаю с:

//******************************************************************************
//- This function takes a tab and makes it its own file
function tabToSheet(gDrive,tabName,fileName,destination){
  var sh = SpreadsheetApp.openById(gDrive);
  var ss = sh.getSheetByName(tabName);

  //create a new document in the location given
  var newSheet = SpreadsheetApp.create("TEMPDELETEME");

  //copy the tab from current document to new document 
  ss.copyTo(newSheet);
  var id = newSheet.getId();

  newSheet.deleteSheet(newSheet.getSheetByName("Sheet1"));
  os = newSheet.getSheets()[0];
  os.setName(tabName);

  var file = DriveApp.getFileById(id);
  var folder = DriveApp.getFolderById(destination);


  var finalId = file.makeCopy(fileName, folder).getId();
  file.setTrashed(true);

  return finalId;

}//*****************************************************************************

У меня есть два вопроса:

1.) Этот скрипт копирует значения и формулы. Как я могу изменить скрипт для вставки только значений? Когда я смотрю на справочную документацию, я думаю, что могу добавить "{contentsOnly: true});" тег для оператора copyTo. (Но я не эксперт, я не считаю себя разработчиком и, вопреки внешнему виду, не очень хорошо понимаю, что я делаю ...) Итак, я спрашиваю: заявление? где? или есть другой способ сделать это?

2.) Мне нужно переименовать окончательную электронную таблицу в строковое значение в ячейке исходного листа. Как я могу это сделать?

Спасибо всем.

1 Ответ

0 голосов
/ 04 февраля 2020

1. Чтобы скопировать только значения, вы можете изменить

ss.copyTo(newSheet);

на

ss.copyTo(newSheet, SpreadsheetApp.CopyPasteType.PASTE_VALUES)

Документация здесь

Чтобы переименовать окончательную электронную таблицу в строковое значение в ячейке исходного листа, вам необходимо:

I. Получите название из оригинального листа, используя следующую строку:

var newFileName = ss.getRange("B7").getValue(); // if the name is in B7

II. Установите для имени нового файла это значение, изменив

os.setName(tabName);

на

os.setName(newFileName);


Редактировать

Танаике-сан прав. Попробуйте вместо этого скопировать только отображаемые значения и вставить их в новую вкладку:

function tabToSheet(gDrive, tabName, fileName, destination){
  var sh = SpreadsheetApp.openById(gDrive);
  var ss = sh.getSheetByName(tabName);

  // Get values to be copied and the name of the new tab to be created.
  var valuesOnly = ss.getDataRange().getDisplayValues();
  var newFileName = ss.getRange("B7").getValue(); // if the name is in B7

  // Create a new document in the location given
  var newSheet = SpreadsheetApp.create("TEMPDELETEME");
  var newTab = newSheet.getSheets()[0];

  // Post values and rename tab
  newTab.getRange(1, 1, valuesOnly.length, valuesOnly[0].length).setValues(valuesOnly);
  newTab.setName(newFileName);

  var id = newSheet.getId();
  var file = DriveApp.getFileById(id);
  var folder = DriveApp.getFolderById(destination);  
  var finalId = file.makeCopy(fileName, folder).getId();
  file.setTrashed(true);
  return finalId;
}

Создание временной копии и ее удаление не являются строго необходимыми. Это может быть более эффективным, чтобы сделать это:

function tabToSheet(gDrive, tabName, fileName, destination){
  var sh = SpreadsheetApp.openById(gDrive);
  var ss = sh.getSheetByName(tabName);

  // Get values to be copied and the name of the new tab to be created.
  var valuesOnly = ss.getDataRange().getDisplayValues();
  var newFileName = ss.getRange("B7").getValue(); // if the name is in B7

  //create a new document in the location given
  var newSheet = SpreadsheetApp.create(fileName);
  var newTab = newSheet.getSheets()[0];

  // Post values and tab name
  newTab.getRange(1, 1, valuesOnly.length, valuesOnly[0].length).setValues(valuesOnly);
  newTab.setName(newFileName);

  var id = newSheet.getId();
  var file = DriveApp.getFileById(id);
  var folder = DriveApp.getFolderById(destination).addFile(file);
  DriveApp.removeFile(file); // to remove it from the root folder
  return id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...