代码之家  ›  专栏  ›  技术社区  ›  PSAB Plalangan

如何用谷歌应用程序脚本替换多个文档中的文本

  •  1
  • PSAB Plalangan  · 技术社区  · 3 年前

    我有多个文档作为主文档。如果我想重复使用这多个文件,我必须逐一编辑,每个文档都有一些文本要替换。 我尝试用谷歌应用程序脚本替换单个文档中的多个文本,然后工作。 如何用谷歌电子表格列表中的文档ID替换多个文档中的多个文本? 这是我试图构建的脚本。

     function replaceText() {
     const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
     const sheetIDList = spreadsheet.getSheetByName('RENAME');
     const colId = 4;
     const firstRowID = 2;
     const lastRowId = 17;
     const n = lastRowId - firstRowID;
     let startRow = firstRowID     // Baris awal data DOC ID
    
     var values = sheetIDList.getRange(startRow, colId, n).getDisplayValues();
    
     values.forEach(([docId]) => {
        if (!docId) return;
        var doc = DocumentApp.openById(docId);
        var body = doc.getBody();
    
     body.replaceText("Kepala SMK Negeri 7 Semarang", "Kepala SMK Negeri 3 Jepara");
     body.replaceText("SMK Negeri 7 Semarang", "SMK Negeri 3 Jepara");
     body.replaceText("Haris Wahyudi, S.Pd., M.Pd.", "SUSWANTO DJONY PURNAWAN, S.Pd., M.Pd");
     body.replaceText("19751222 200003 1 002", "19700531 200401 1 001");
     body.replaceText("Pembina Tk. I", "Pembina");
     body.replaceText("SEKOLAH MENENGAH KEJURUAN NEGERI 7 SEMARANG", "SEKOLAH MENENGAH KEJURUAN NEGERI 3 JEPARA");
              
      });
     }
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   Tanaike    3 年前

    修改要点:

    • 在您的脚本中, for (let i = 0 ; i < n; i++) 就在的线下使用 for(设i=0;i<n;i++) 。这样,循环就不能正常工作。请小心。
    • getValue 在循环中使用。在这种情况下,处理成本将变得很高。

    当这些点反映在你的脚本中时,下面的修改如何?

    修改的脚本:

    function replaceText() {
      const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      const sheetIDList = spreadsheet.getSheetByName('DOC ID');
      const colId = 3;
      const firstRowID = 2;
      const lastRowId = 17;
      const n = lastRowId - firstRowID;
      let startRow = firstRowID     // Baris awal data DOC ID
    
      // I modified the below script.
      var values = sheetIDList.getRange(startRow, colId, n).getDisplayValues();
      values.forEach(([docId]) => {
        if (!docId) return;
        var doc = DocumentApp.openById(docId);
        var body = doc.getBody();
        body.replaceText("Kepala SMK Negeri 7 Semarang", "Kepala SMA Negeri 13 Semarang");
        body.replaceText("SMK Negeri 7 Semarang", "SMA Negeri 13 Semarang");
        body.replaceText("Haris Wahyudi, S.Pd. M.Pd", "Rusmiyanto, S.Pd., M.Pd.");
        body.replaceText("19751222 200003 1 002", "19690812 199803 1 013");
        body.replaceText("Pembina Tk. I", "Pembina");
      });
    }
    
    • 运行此脚本时,将从“C2:C16”中检索文档ID。而且,你的 replaceText 运行到每个文档。

    注:

    • 在这种情况下,当文档ID是无效ID时,会发生错误。请小心。

    参考文献: