【问题标题】:How to apply a macro folder-wide with google sheets?如何使用谷歌表格应用宏文件夹范围?
【发布时间】:2020-08-28 21:06:01
【问题描述】:

这是我第一次提出问题,如果我违反任何规则,请原谅我。

我正在使用 Google 表格,我想将格式化宏应用到 google 驱动器文件夹中的每个电子表格。在查看了之前的问题之后,谷歌似乎并没有让这变得容易,并且要求用户将脚本复制粘贴到每个文件中以运行宏。我希望使用 Google Apps Script Drive Service 运行脚本来遍历文件夹中的文件列表,然后运行宏的函数。我上周刚刚发现了谷歌应用程序脚本,并且可以在这项任务中使用一些帮助。

示例代码以一些应该执行迭代的驱动器服务代码开头。以下是我从宏复制并命名为 blueHeadings 的自定义函数,它将特定单元格更改为蓝色。我真的可以从代码大师那里得到一些指导。

此外,这是我从以下问题中提取部分代码的问题: Google Sheet – using scripts across multiple files without creating a new script in every file

var myFolder = DriveApp.getFoldersByName('Script Testing Folder').next(); //Add Folder name
var spreadSheets = myFolder.getFilesByType("application/vnd.google-apps.spreadsheet"); 
while (spreadSheets.hasNext()) // Loops through all Spread Sheets inside the folder.
  {
    var sheet = spreadSheets.next();
    var name = sheet.getName();
    var spreadSheet = SpreadsheetApp.openById(sheet.getId());
    
    function blueHeadings() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A1:C1').activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet2'), true);
  spreadsheet.getRange('A1:C1').activate();
  spreadsheet.getActiveRangeList().setBackground('#cfe2f3');
  spreadsheet.getRange('A17:C17').activate();
  spreadsheet.getActiveRangeList().setBackground('#cfe2f3');
  spreadsheet.getRange('A20').activate();
  spreadsheet.getActiveRangeList().setBackground('#cfe2f3');
  spreadsheet.getRange('A12').activate();
  spreadsheet.getActiveRangeList().setBorder(false, false, false, false, false, false)
  .setBorder(false, false, false, false, false, false)
  .setBorder(true, null, null, null, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
  spreadsheet.getRange('B12').activate();
  spreadsheet.getActiveRangeList().setBorder(false, false, false, false, false, false)
  .setBorder(true, null, null, null, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
  spreadsheet.getRange('C12').activate();
  spreadsheet.getActiveRangeList().setBorder(false, false, false, false, false, false)
  .setBorder(true, null, null, null, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
  spreadsheet.getRange('B14').activate();
    }
      
  };

【问题讨论】:

  • 你在哪里打电话blueHeadings()

标签: javascript google-apps-script google-sheets google-drive-api


【解决方案1】:

您没有提及您是否将此脚本作为独立脚本或附加到特定电子表格。如果您的脚本附加到特定的电子表格,那么这很可能是问题所在。您提供的任何细节都不需要将此脚本附加到电子表格中。

因此,我的示例使用一个独立的脚本来格式化一个文件夹中的所有电子表格。您可以按照these instructions 创建一个独立的脚本。将以下内容粘贴到独立脚本文件中并从那里运行。

function blueHeadings() {
var myFolder = DriveApp.getFoldersByName('Script Testing Folder').next(); //Add Folder name
var spreadSheets = myFolder.getFilesByType("application/vnd.google-apps.spreadsheet"); 

while (spreadSheets.hasNext()) // Loops through all Spread Sheets inside the folder.
  {
    var sheet = spreadSheets.next();
    var spreadSheet = SpreadsheetApp.openById(sheet.getId());
    
  spreadSheet.getRange('A1:C1').setBackground('#cfe2f3');
  spreadSheet.getRange('A17:C17').setBackground('#cfe2f3');
  spreadSheet.getRange('A20').setBackground('#cfe2f3');
  spreadSheet.getRange('A12').setBorder(true, null, null, null, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
  spreadSheet.getRange('B12').setBorder(true, null, null, null, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID_MEDIUM);  
  spreadSheet.getRange('C12').setBorder(true, null, null, null, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID_MEDIUM);    

 
    }      

}

【讨论】:

  • 好的,谢谢!我不知道独立脚本,所以你让我大吃一惊!马上去看看。
  • 成功了!谢谢MerryLegs!如果stackoverflow有类似reddit gold之类的东西,我想知道,但你应得的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多