【问题标题】:Find and Replace text in entire Google Drive folder, headers, footers, google docs using a script使用脚本在整个 Google Drive 文件夹、页眉、页脚、谷歌文档中查找和替换文本
【发布时间】:2020-12-08 15:47:14
【问题描述】:

我有许多带有页眉和页脚的 Google 文档。我们的 Intranet 上存在指向这些文档的多个链接,因此我不想制作新文档。有数百个文档需要更新。

我需要更新这些文档中的实际地址和页眉/页脚信头。我还需要复制页眉和页脚中的图像、格式、表格等。

我希望它们更像 CSS 或模板,可以同时在多个文档中进行更改。

为了做到这一点,已经用尽了多种考虑:

  1. 将带有新页眉和页脚的模板应用于现有文档 - 似乎不可能。每个都必须手动复制和粘贴。

  2. Dreamweaver 等应用程序允许您查找和替换文件夹中的所有文件。我无法在 Google Docs 中找到这样做的方法。

有没有办法自动化这个繁琐的过程?甚至是起点提示!

    function replaceHeaderAndFooter() {
  
 var headerToCopyandPaste = DocumentApp.openById("<SourceDocID>").getHeader().copy();  // ID contains source header
 var footerToCopyandPaste = DocumentApp.openById("<SourceDocID>").getHeader().copy();  // ID contains source footer
  
  
  var files = DriveApp.getFolderById("<FOLDER ID>").getFiles();
  while (files.hasNext()) {
    var file = files.next();
    var doc = DocumentApp.openById(file.getId());
    
  var headerSectionToBeReplaced = doc.getHeader()
  var footerSectionToBeReplaced = doc.getFooter()
    
    headerSectionToBeReplaced.clear()
    
    headerSectionToBeReplaced = headerToCopyandPaste

  }
}

例如,我还尝试将模板中的所有内容(图像、段落、格式)放入页眉的单个表格中。此代码也不起作用。以下代码导致以下错误:

参数(字符串)与 DocumentApp.HeaderSection.appendTable 的方法签名不匹配

    function replaceHeaderAndFooter() {
  
 const headerToCopyandPaste = DocumentApp.openById("<SourceDocID>").getHeader().getTables().toString();  // ID contains source header
 const footerToCopyandPaste = DocumentApp.openById("<SourceDocID>").getHeader().copy();  // ID contains source footer
  
  
  var files = DriveApp.getFolderById("<FolderID>").getFiles();  //ID contains folder that has Google Docs that will have Header and Footer Replaced
  while (files.hasNext()) {
    var file = files.next();
    var doc = DocumentApp.openById(file.getId());
    
  var headerSectionToBeReplaced = doc.getHeader()
  var footerSectionToBeReplaced = doc.getFooter()
    
  headerSectionToBeReplaced.clear();

 headerSectionToBeReplaced.appendTable(headerToCopyandPaste)
    
  }
}

【问题讨论】:

    标签: google-apps-script google-docs drive


    【解决方案1】:

    是的,有一种方法,那就是使用replaceText()。如果您的文件确实属于单个文件夹,那么很容易搜索和替换它们。

    function replaceTextSpecificFolder() {
      var files = DriveApp.getFolderById("<folder_id>").getFiles();
      while (files.hasNext()) {
        var file = files.next();
        var doc = DocumentApp.openById(file.getId());
       doc.replaceText("<replace>", "<new string>");
      }
    }
    

    是您访问 Google Drive 文件夹时 URL 中“folder/”之后的所有内容。

    例如,如果 URL 是 “https://drive.google.com/drive/folders/moqwiSADN921m03uhwdJ”,则文件夹ID为“moqwiSADN921m03uhwdJ”。

    编辑: 至于格式、表格、图片等其他项目,可以查看documentation。在左窗格的相应类下找到它。 (例如,您可以在 Table Class 下找到表函数)

    【讨论】:

    • 谢谢!有没有办法获取格式和图像?这会是 HTML 代码吗?或者一种复制标题的“代码”以查找和替换的方法?甚至可以删除所有文档的标题,并替换为包含图像、表格等的新标题
    • 嗨@BD,我更新了上面的答案。我已经为您提供了有关脚本使用哪些函数的文档。如果这确实以任何方式帮助您解决问题,请投票并选择它作为您问题的答案。如果您有更多说明,可以在此处添加评论,以便我进一步帮助您解决问题。
    • 谢谢!我将不得不删除标题并使用不同的字体、图像/徽标等、对齐方式等创建一个新的标题/表格。有没有办法从谷歌文档中以正确的格式提取信息块,参考文档中的字体、大小、间距、徽标图像、表格等,并在其他过时的文档中替换它?
    • 我认为没有,但可以免费查看文档。我可以确认的是,我们在查看文档的类(例如页脚、页眉等)中有一个名为 getAttributes 的函数。根据您的需要,您可以为每个需要获取、重新创建和删除的对象执行类的 getAttributes 函数。
    • 您好 - 我能够弄清楚复制源页眉和页脚(我认为),并在上面的代码中清除文件夹中的页眉和页脚......但无法弄清楚如何粘贴/插入复制的源页眉和页脚以及所有属性(表格、段落、图像)关于如何执行此操作的任何想法?
    猜你喜欢
    • 2019-05-20
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多