Google apps script 通过追加修改文件:更改不会显示在我电脑上的google drive文件夹中

Google apps script 通过追加修改文件:更改不会显示在我电脑上的google drive文件夹中,google-apps-script,google-drive-api,Google Apps Script,Google Drive Api,使用以下脚本在文件中创建/追加行。在GoogleOnline环境中运行良好,我可以查看文件并查看如何添加行。但是,通过我电脑上的谷歌硬盘文件夹查看文件时,我只看到了第一行(在创建过程中写入的那一行)。其他人只有在我的电脑上关闭并重新启动google drive后才会出现(等待2小时)。那么,我可以在脚本中做什么来“刷新”以查看电脑上的更改呢 function appendFile (textArea) { // run by timer var d=new Date(); var id;

使用以下脚本在文件中创建/追加行。在GoogleOnline环境中运行良好,我可以查看文件并查看如何添加行。但是,通过我电脑上的谷歌硬盘文件夹查看文件时,我只看到了第一行(在创建过程中写入的那一行)。其他人只有在我的电脑上关闭并重新启动google drive后才会出现(等待2小时)。那么,我可以在脚本中做什么来“刷新”以查看电脑上的更改呢

function appendFile (textArea) { // run by timer
  var d=new Date();
  var id;
  if ((id=ScriptProperties.getProperty ("fileId"))==null) {
    var f=DocsList.createFile("List", "Started at "+d+"\n");
    ScriptProperties.setProperty ("fileId", f.getId());
  }
  else {
    var f=DocsList.getFileById(id);
    f.append("Appended "+d+"\n");
    if (textArea!=undefined) {
      textArea.setText ("id="+id+"\n"+"name="+f.getName()+"\n"+"date="+d+"\nContents="+f.getContentAsString());
    }
  }
}

我也有过类似的问题,但方向相反。(我正在更新电脑上的一个文件,将其复制到驱动器,并希望它与云同步,以便应用程序脚本可以在其上工作。)我发现我必须删除并重新创建该文件才能使其同步。同样的方法在这里似乎也适用

我已经注释掉了代码的Ui部分,用日志记录来观察操作,并将其修改为垃圾文件,然后在每次更新时重新创建文本文件。丑陋,但有效-电脑的GDrive上的文件会立即更新

function appendFile (/*textArea*/) { // run by timer
  var d=new Date();
  var id;
  if ((id=ScriptProperties.getProperty ("fileId"))==null) {
    var f=DocsList.createFile("List", "Started at "+d+"\n");
    ScriptProperties.setProperty ("fileId", f.getId());
  }
  else {
    var f=DocsList.getFileById(id);
    var text = String.concat(f.getContentAsString(),
               "Appended "+d+"\n");
    f.setTrashed(true);
    f=DocsList.createFile("List",text);
    ScriptProperties.setProperty ("fileId", f.getId());
//    if (textArea!=undefined) {
//      textArea.setText ("id="+id+"\n"+"name="+f.getName()+"\n"+"date="+d+"\nContents="+f.getContentAsString());
//    }
    Logger.log("id="+id+"\n"+"name="+f.getName()+"\n"+"date="+d+"\nContents="+f.getContentAsString());
  }
}
遗留问题:

  • 记住文件的id是浪费时间,因为每次运行都会更改它
  • 出于同样的原因,您不能依赖于监视文本文件

    • 我也遇到过类似的问题,但方向相反。(我正在更新电脑上的一个文件,将其复制到驱动器,并希望它与云同步,以便应用程序脚本可以在其上工作。)我发现我必须删除并重新创建该文件才能使其同步。同样的方法在这里似乎也适用

      我已经注释掉了代码的Ui部分,用日志记录来观察操作,并将其修改为垃圾文件,然后在每次更新时重新创建文本文件。丑陋,但有效-电脑的GDrive上的文件会立即更新

      function appendFile (/*textArea*/) { // run by timer
        var d=new Date();
        var id;
        if ((id=ScriptProperties.getProperty ("fileId"))==null) {
          var f=DocsList.createFile("List", "Started at "+d+"\n");
          ScriptProperties.setProperty ("fileId", f.getId());
        }
        else {
          var f=DocsList.getFileById(id);
          var text = String.concat(f.getContentAsString(),
                     "Appended "+d+"\n");
          f.setTrashed(true);
          f=DocsList.createFile("List",text);
          ScriptProperties.setProperty ("fileId", f.getId());
      //    if (textArea!=undefined) {
      //      textArea.setText ("id="+id+"\n"+"name="+f.getName()+"\n"+"date="+d+"\nContents="+f.getContentAsString());
      //    }
          Logger.log("id="+id+"\n"+"name="+f.getName()+"\n"+"date="+d+"\nContents="+f.getContentAsString());
        }
      }
      
      遗留问题:

      • 记住文件的id是浪费时间,因为每次运行都会更改它
      • 出于同样的原因,您不能依赖于监视文本文件

      既然您在网上看到了这些变化,那么脚本在所有方面都可以正常工作。您应该检查您电脑上的Google Drive应用程序是否进行同步。它在运行吗?你能在任务栏上看到它吗?它被防火墙阻止了吗?是否设置为使用您的帐户?我的电脑上的“同步>谷歌驱动器”列表中是否排除了该文件夹。此外,该脚本创建的文件显示速度非常快,但内容不会改变。我认为append函数不会在内部触发一些更改标志,这将导致pc上的google drive更新。。。我正在尝试您的脚本,我注意到在线文档没有实时显示来自
      append()
      的编辑。我需要重新加载文件。这支持您的理论,即
      append()
      中缺少某些触发器。
      append()
      方法的文档说明:“此方法仅适用于谷歌应用程序帐户。”我没有使用谷歌应用程序帐户,但我可以使用
      append()
      。。。也许在一个“正常”的谷歌账户中,它就不能正常工作?这可能是你的问题吗,pbhd?不,我有一个谷歌应用程序帐户。但是,我放弃了使用append,因为它真的很慢。我每秒得到不到10个附件,所以对于我来说,电子表格是一个更好的方法。因为你在网上看到了这些变化,所以脚本很可能工作得很好。您应该检查您电脑上的Google Drive应用程序是否进行同步。它在运行吗?你能在任务栏上看到它吗?它被防火墙阻止了吗?是否设置为使用您的帐户?我的电脑上的“同步>谷歌驱动器”列表中是否排除了该文件夹。此外,该脚本创建的文件显示速度非常快,但内容不会改变。我认为append函数不会在内部触发一些更改标志,这将导致pc上的google drive更新。。。我正在尝试您的脚本,我注意到在线文档没有实时显示来自
      append()
      的编辑。我需要重新加载文件。这支持您的理论,即
      append()
      中缺少某些触发器。
      append()
      方法的文档说明:“此方法仅适用于谷歌应用程序帐户。”我没有使用谷歌应用程序帐户,但我可以使用
      append()
      。。。也许在一个“正常”的谷歌账户中,它就不能正常工作?这可能是你的问题吗,pbhd?不,我有一个谷歌应用程序帐户。但是,我放弃了使用append,因为它真的很慢。我每秒得到的附件不到10个,因此电子表格是一种更好的方法。是的,我也尝试过类似的方法,创建过程中的文件内容会立即同步到pc。但是每次更改时都要重写文件吗?我想将其用于日志记录目的,但在用于大型文件时,这是不可行的。我同意,我不认为这种方法可以长期用于日志记录目的。为什么不使用记录器?尽管有文档表明,它“在从UiApp事件执行或脚本作为服务发布时不起作用”,但该功能已被禁用。也可以考虑MyByTy1024,虽然它不会以一种可以读取离线的方式同步到PC。是的,我也尝试过类似的东西,并且在创建过程中的文件内容立即与PC同步。但是每次发生变化,都会重写文件。我想将其用于日志记录目的,但在用于大型文件时,这是不可行的。我同意,我不认为这种方法可以长期用于日志记录目的。为什么不使用记录器?尽管有文档表明,它“在从UiApp事件执行或脚本作为服务发布时不起作用”,但该功能已被禁用。也可以考虑MeByTy1024,但它不会同步到PC上的方式,你可以离线阅读。