检查文件名是否存在并在Google脚本中更新文件名

亚当

我目前有一个脚本,可将Google表格中的数据合并到Google Doc模板中。对于工作表的每一行,使用该行中的标题数据创建一个新文档。该脚本工作正常,但不是我的工作。它已经传给我了,我对Google Script的掌握还不够熟练,无法弄清楚我想要实现的目标。

理想情况下,我想知道是否可以在运行脚本时检查文档文件是否已存在。这样做是因为创建的每个文档都使用工作表中的标题数据。如果文档确实存在,则可以在该工作表中更新数据,而不是创建它的新版本。

脚本如下

function mergeDocSheet() {
  const TEMPLATE_ID = '16YfyeDjGDp-88McAtLCQQyZ1xz4QX5z';// Google Doc template ID
  const SS_ID = '1C5gtJCSzHMuSz-oVWEItl2EUVRDwF5iH_'; // Google Sheet ID
  const SHEET_NAME = "data"; // Google Sheet Tab name
  const MAPPED = mappedDocToSheet; 
  const FILE_NAME = ["Titre de la formation"] // Header IDs from sheet.

  docMerge(TEMPLATE_ID,SS_ID,SHEET_NAME,MAPPED, FILE_NAME);

}

function docMerge(templateID,ssID, sheetName, mapped, fileNameData, rowLen = "auto"){
  //Get the Spreadsheet and sheet tab
  const ss = SpreadsheetApp.openById(ssID);
  const sheet = ss.getSheetByName(sheetName);

  //Get number of rows to process
  rowLen = (rowLen = "auto") ? getRowLen() - 1 : rowLen;

  //Gets the range of data in the sheet then grabs the values of the range
  const range = sheet.getRange(1,1,rowLen,sheet.getDataRange().getNumColumns());
  const matrix = range.getValues();

  // Searches the file mapped object and finds the corresponding number returns the column number in an array.
  const fileNameRows = getFileNameRows()


  //Loops through each row of the sheet grabbing the data from each row and putting it into a new doc.
  for(let i = 1; i < rowLen; i++){
    let row = matrix[i];
    //Get the title for the file.
    let fileName = buildFileName(row)

    let newDoc = DriveApp.getFileById(templateID).makeCopy(fileName);

    updateFileData(row, newDoc.getId());

  }; 

  function updateFileData(rowArray, doc){

    //Loops through the mapped object. 
    mapped.forEach(function(element){

      let textID = `\{\{${element.doc}\}\}`
 
      DocumentApp.openById(doc).getBody().replaceText(textID,
                                 rowArray[element.col]);
   });
  };

  function buildFileName(rowArry){

   let fileNameArray = fileNameRows.map(ele => rowArry[ele]);

   return fileNameArray.join("_");
  };


  function getFileNameRows(){
  //Map the column indexes from fileNameData
    let fileNameLocs = fileNameData
                      .flatMap(name => {
                        return mapped.filter(element => element.sheet === name)
                      .map(ele => ele.col);
  });

    return fileNameLocs;
  };

  function getRowLen(){
   return sheet.getDataRange().getNumRows();
  };

};

是否有可能在这些方面周围建立某种条件?

let newDoc = DriveApp.getFileById(templateID).makeCopy(fileName);

updateFileData(row, newDoc.getId());

我希望有人可以以此指向正确的方向。任何建议深表感谢。

罗恩·M

您可以考虑根据搜索查询字词指南,使用searchFiles(params)在驱动器中搜索Doc类型的特定文件名一旦找到所有具有相同文件名的文件,就可以在使用模板文档创建新文件之前,使用setTrashed(trashed)删除每个文件。

样例代码:

  //Loops through each row of the sheet grabbing the data from each row and putting it into a new doc.
  for(let i = 1; i < rowLen; i++){
    let row = matrix[i];
    //Get the title for the file.
    let fileName = buildFileName(row);

    //This query parameter will search for an exact match of the filename with Doc file type
    let params = "title='"+fileName+"' and mimeType = 'application/vnd.google-apps.document'"
    let files = DriveApp.searchFiles(params);
    while (files.hasNext()) {
      //Filename exist
      var file = files.next();
      ///Delete file
      file.setTrashed(true);
    }
    
    //Create a new file
    let newDoc = DriveApp.getFileById(templateID).makeCopy(fileName);
    
    updateFileData(row, newDoc.getId());

  };
  • 在此给定的示例代码中,我们将循环所有具有确切文件名的文件,并在创建新文件之前删除每个文件。

其他参考:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Vim更新文件名

来自分类Dev

如何在FileWatcher中更新文件名

来自分类Dev

Notepad ++新文件名

来自分类Dev

更新文件时如何在载波中保留相同的文件名(在Rails中)

来自分类Dev

如何检查目录中是否存在文件名?

来自分类Dev

如何检查目录中是否存在文件名?

来自分类Dev

命令行:如果文件名已经存在,则使用新文件名创建文件

来自分类Dev

命令行:如果文件名已经存在,则使用新文件名创建文件

来自分类Dev

脚本仅将多个文件的一个文件名输出到新文件

来自分类Dev

获取基于文件名python的最新文件

来自分类Dev

将文件名复制到新文件

来自分类Dev

当文件名包含从Excel表引用的特定字符串时更新文件名

来自分类Dev

在通配符输入上写入新文件名的方法?

来自分类Dev

获取上载器的新文件名

来自分类Dev

用新文件名继承StreamWriter

来自分类Dev

节点multer返回新文件名

来自分类Dev

通过FSEventsFramework检测旧文件名和新文件名

来自分类Dev

如何编码我的程序来为目录中的每个新文件创建新文件名?

来自分类Dev

在Android中使用“文件文件=新文件(文件名)”将文件保存在哪里

来自分类Dev

使用文件名读取最新文件包含python中的字符串

来自分类Dev

文件名中的空格“破坏”文件名脚本

来自分类Dev

在Swift中检查文件是否存在于文件名前缀的目录中

来自分类Dev

使用google drive.files.copy时设置新文件名

来自分类Dev

如何检查awk中是否存在文件?[-d'文件名']失败

来自分类Dev

如何使用文件名检查(内部/外部存储)中是否存在文件?

来自分类Dev

当程序在cshell中循环运行时,如何给新文件名?

来自分类Dev

批处理文件重命名,从txt文件读取旧文件名和新文件名

来自分类Dev

在Android中使用“文件文件=新文件(文件名)”将文件保存到何处

来自分类Dev

如何检查文件名是否与Shell脚本中的正则表达式匹配

Related 相关文章

  1. 1

    Vim更新文件名

  2. 2

    如何在FileWatcher中更新文件名

  3. 3

    Notepad ++新文件名

  4. 4

    更新文件时如何在载波中保留相同的文件名(在Rails中)

  5. 5

    如何检查目录中是否存在文件名?

  6. 6

    如何检查目录中是否存在文件名?

  7. 7

    命令行:如果文件名已经存在,则使用新文件名创建文件

  8. 8

    命令行:如果文件名已经存在,则使用新文件名创建文件

  9. 9

    脚本仅将多个文件的一个文件名输出到新文件

  10. 10

    获取基于文件名python的最新文件

  11. 11

    将文件名复制到新文件

  12. 12

    当文件名包含从Excel表引用的特定字符串时更新文件名

  13. 13

    在通配符输入上写入新文件名的方法?

  14. 14

    获取上载器的新文件名

  15. 15

    用新文件名继承StreamWriter

  16. 16

    节点multer返回新文件名

  17. 17

    通过FSEventsFramework检测旧文件名和新文件名

  18. 18

    如何编码我的程序来为目录中的每个新文件创建新文件名?

  19. 19

    在Android中使用“文件文件=新文件(文件名)”将文件保存在哪里

  20. 20

    使用文件名读取最新文件包含python中的字符串

  21. 21

    文件名中的空格“破坏”文件名脚本

  22. 22

    在Swift中检查文件是否存在于文件名前缀的目录中

  23. 23

    使用google drive.files.copy时设置新文件名

  24. 24

    如何检查awk中是否存在文件?[-d'文件名']失败

  25. 25

    如何使用文件名检查(内部/外部存储)中是否存在文件?

  26. 26

    当程序在cshell中循环运行时,如何给新文件名?

  27. 27

    批处理文件重命名,从txt文件读取旧文件名和新文件名

  28. 28

    在Android中使用“文件文件=新文件(文件名)”将文件保存到何处

  29. 29

    如何检查文件名是否与Shell脚本中的正则表达式匹配

热门标签

归档