Google工作表的宏

时间:2019-10-29 15:37:02

标签: google-apps-script google-sheets google-sheets-macros

我有一个问题,我创建了一个名为“测试”的google工作表。在此文件中,有一个Google幻灯片链接,我想在复制“测试”文件时让Google幻灯片文件也复制并更新Google幻灯片链接。

能帮我吗?

先谢谢了。 毒素

2 个答案:

答案 0 :(得分:0)

从这么短的问题来看,我认为这个问题很难理解,因此我将详细说明。

需要发生什么:

  1. 复制电子表格文件
  2. 找到电子表格中引用的幻灯片
  3. 将幻灯片复制到新文件中
  4. 在电子表格的副本上,更新链接以反映新文件

为此,您将使用附加到工作表的Apps脚本文件。该脚本将创建一个自定义菜单,以将功能添加到表格中。

还有其他方法可以执行此操作,但这也可以使副本保持此功能。 (因此,副本可以自己复制)。

以下是代码(带有注释):

function onOpen(e) {
  SpreadsheetApp.getUi()
  .createMenu("Custom Actions") //Creates a custom menu item called "Custom Actions"
  .addItem("Clone Files", "cloneFiles") //Adds a clickable button to call the cloneFiles() function.
  .addToUi(); //Displays the new menu.
}

function cloneFiles() {
  var originalSheet = DriveApp.getFileById(
    SpreadsheetApp.getActive().getId()); //Get the file Id of the current Spreadsheet.
  var originalSlide = DriveApp.getFileById(
    SlidesApp.openByUrl( //Opens the spreadsheet with the URL
      SpreadsheetApp.getActive()
      .getSheetByName("Sheet1") //Gets the url on Sheet1
      .getRange("A1")           //On cell A1
      .getValue()).getId()); //Get the file Id 

  var newSheet = originalSheet.makeCopy("New Sheet"); //Create a copy and name it "New Sheet"
  var newSlide = originalSlide.makeCopy("New Slide"); //Create a copy and name it "New Slide"

  SpreadsheetApp.flush(); //Forces the spreadsheets to be updated to their final value.

  SpreadsheetApp.open(newSheet).getSheetByName("Sheet1").getRange("A1").setValue(newSlide.getUrl()); //Then alters the url to the copied file.

  SpreadsheetApp.getUi().showModalDialog(
    HtmlService.createHtmlOutput("<p>New Files Created!<p><ul><li><a href='"+newSheet.getUrl()+"'>New Sheet</a></li><li><a href='"+newSlide.getUrl()+"'>New Slide</a></ul>")
  .setHeight(150)
  .setWidth(150), "Copied files");
}

将其添加到工作表后,只要用户打开它,就会看到一个额外的按钮:

Custom action Menu

点击我们的自定义操作后,他们将看到带有新链接的漂亮弹出窗口:

Result Box

希望这会有所帮助!

答案 1 :(得分:0)

我的代码:

function onOpen(e) {
  SpreadsheetApp.getUi()
  .createMenu("Custom Actions") //Creates a custom menu item called "Custom Actions"
  .addItem("Clone Files", "cloneFiles") //Adds a clickable button to call the cloneFiles() function.
  .addToUi(); //Displays the new menu.
}


function cloneFiles() {
  var originalSheet = DriveApp.getFileById('E4y2jP1o9sbJvvFLYwzlN0UtlfBfzxX8Y');
    SpreadsheetApp.getActive().getId(); //Get the file Id of the current Spreadsheet.
  var originalSlide = DriveApp.getFileById('r8R3HepThon1dXRK6iPLjwRhSU');
   var sss = SlidesApp.openByUrl('https://docs.google.com/presentation/d/r8R3HepThon1dXRK6iPLjwRhSU') //Opens the spreadsheet with the URL
   var ss = sss.getSheetByName('justificationfile'); 
   var sheet = ss.getSheets()[18];  
   var value = sheet.getRange('B12').getValue().getId();

  var newSheet = originalSheet.makeCopy("New Sheet"); //Create a copy and name it "New Sheet"
  var newSlide = originalSlide.makeCopy("New Slide"); //Create a copy and name it "New Slide"

  SpreadsheetApp.flush(); //Forces the spreadsheets to be updated to their final value.

  SpreadsheetApp.open(newSheet).getSheetByName("justificationfile").getRange("B12").setValue(newSlide.getUrl()); //Then alters the url to the copied file.

  SpreadsheetApp.getUi().showModalDialog(
    HtmlService.createHtmlOutput("<p>New Files Created!<p><ul><li><a href='"+newSheet.getUrl()+"'>New Sheet</a></li><li><a href='"+newSlide.getUrl()+"'>New Slide</a></ul>")
  .setHeight(150)
  .setWidth(150), "Copied files");
}

我有一个工作表,其ID为“ E4y2jP1o9sbJvvFLYwzlN0UtlfBfzxX8Y”,幻灯片为“ r8R3HepThon1dXRK6iPLjwRhSU”。我要克隆此工作表文件。有一个名为“ justificationfile”的窗口,在该窗口的B12单元中有一个链接。现在,当我克隆图纸文件时,我想克隆幻灯片文件(由B12单元中的链接定义)并自动更新链接。

上面的代码共享存在错误。当我尝试您给我的代码时:

SpreadsheetApp.getActive()
      .getSheetByName("Sheet1") //Gets the url on Sheet1
      .getRange("A1")           //On cell A1
      .getValue()).getId()); //Get the file Id 

我收到一条错误消息:“无法读取null的属性'getRange'”

如果您有任何帮助的想法。

谢谢。