Дублируйте электронную таблицу «Модель» и откройте копию с помощью скрипта Google - PullRequest
0 голосов
/ 27 марта 2020

С помощью скрипта я дублирую активный файл и сохраняю его в определенной папке на Google Drive. Затем я пытаюсь открыть новый файл. С помощью следующего кода новый файл хорошо создан, но после этого ничего не происходит ...

function copy(){

  nom=Browser.inputBox("Nom du magasin ?")
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var destFolder = DriveApp.getFoldersByName("Tests").next();
  DriveApp.getFileById(sheet.getId()).makeCopy(nom, destFolder);
  SpreadsheetApp.open(destFolder.getFilesByName(nom).next());
}

У вас есть идея открыть мой новый файл вместо первого? Большое спасибо!

Ответы [ 4 ]

0 голосов
/ 27 марта 2020

Большое спасибо, Джеймс Д! Я нашел также «полный вариант» код здесь :

Мой полный код ниже:

function openUrl( url ){
  var html = HtmlService.createHtmlOutput('<html><script>'
  +'window.close = function(){window.setTimeout(function(){google.script.host.close()},9)};'
  +'var a = document.createElement("a"); a.href="'+url+'"; a.target="_blank";'
  +'if(document.createEvent){'
  +'  var event=document.createEvent("MouseEvents");'
  +'  if(navigator.userAgent.toLowerCase().indexOf("firefox")>-1){window.document.body.append(a)}'                          
  +'  event.initEvent("click",true,true); a.dispatchEvent(event);'
  +'}else{ a.click() }'
  +'close();'
  +'</script>'
  // Offer URL as clickable link in case above code fails.
  +'<body style="word-break:break-word;font-family:sans-serif;">Failed to open automatically. <a href="'+url+'" target="_blank" onclick="window.close()">Click here to proceed</a>.</body>'
  +'<script>google.script.host.setHeight(40);google.script.host.setWidth(410)</script>'
  +'</html>')
  .setWidth( 90 ).setHeight( 1 );
  SpreadsheetApp.getUi().showModalDialog( html, "Opening ..." );
}

function creationMatriceMag(){

  nom=Browser.inputBox("Nom du magasin ?")
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var destFolder = DriveApp.getFoldersByName("Tests").next();
  DriveApp.getFileById(sheet.getId()).makeCopy(nom, destFolder);
  var newFile=SpreadsheetApp.open(destFolder.getFilesByName(nom).next());
  idNewFile=newFile.getId();
  openUrl('https://docs.google.com/spreadsheets/d/'+idNewFile+'/');


}
0 голосов
/ 27 марта 2020

Если исходный лист открыт в браузере, вы можете получить URL новой электронной таблицы, создать ссылку html, поместить ее в диалоговое окно, открыть диалоговое окно, запустить код при его открытии открывается, который нажимает на ссылку, а затем закрывает диалоговое окно. Так что это не простой процесс, но он возможен.

0 голосов
/ 27 марта 2020

Невозможно, чтобы Google Script открывал лист в вашем браузере, так как javascript не может открыть вкладку без какого-либо взаимодействия с пользователем.

Вы можете получить идентификатор нового листа и используйте HTML Service для отображения ссылки, которая откроет лист в новой вкладке.

function makeAcopy() {

    var nom = 'New sheet test'
        var sheet = SpreadsheetApp.openById('--- --- --- ')
        var destFolder = DriveApp.getFoldersByName("--- --- ---").next();
    var fileID = DriveApp.getFileById(sheet.getId()).makeCopy(nom, destFolder).getId();

    var htmlOutput = HtmlService
        .createHtmlOutput('<a href="https://docs.google.com/spreadsheets/d/' + fileID + '/" target="_blank">' + nom + '</a>')
        .setWidth(350) //optional
        .setHeight(50); //optional
    SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Click to open sheet');

}
0 голосов
/ 27 марта 2020

Ответ:

Ваш код верен, кроме необходимости назначить открытый файл для переменной. SpreadsheetApp.open() на самом деле не открывает файл в браузере , он открывает его как объект File для обработки в скрипте приложений.

Дополнительная информация:

Документация для SpreadsheetApp.open() метода объясняет это типом возврата метода:

Return Электронная таблица - электронная таблица

Это объект электронной таблицы, который может использоваться и считываться SpreadsheetApp для обработки в сценарии.

Вам необходимо присвоить файл переменной, например:

var file = SpreadsheetApp.open(destFolder.getFilesByName(nom).next());

Здесь вы можете редактировать лист так, как вам нужно, с помощью таких методов, как file.getSheets() или file.setCurrentCell().

Я надеюсь, что это полезно для вас!

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...