Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script DriveApp.makeCopy未生成isGoogleType()的true语句_Google Apps Script - Fatal编程技术网

Google apps script DriveApp.makeCopy未生成isGoogleType()的true语句

Google apps script DriveApp.makeCopy未生成isGoogleType()的true语句,google-apps-script,Google Apps Script,我正试图编写一个脚本,制作一份谷歌文档的副本,然后用电子表格中的信息填充它。但是,.makeCopy无法为.isGoogleType()生成真实值,这是我遇到的问题。至少,这似乎是我无法访问文档的.getBody的原因 我试着在一个不是用这个脚本创建的Google文档上进行测试,它看起来不错 var templateID = [google doc template ID]; var folderID = [google drive folder ID]; var userDocTitle =

我正试图编写一个脚本,制作一份谷歌文档的副本,然后用电子表格中的信息填充它。但是,.makeCopy无法为.isGoogleType()生成真实值,这是我遇到的问题。至少,这似乎是我无法访问文档的.getBody的原因

我试着在一个不是用这个脚本创建的Google文档上进行测试,它看起来不错

var templateID = [google doc template ID];
var folderID = [google drive folder ID];

var userDocTitle = "test" + data[i][0];

var copy = DriveApp.getFileById(templateID).makeCopy(userDocTitle,DriveApp.getFolderById(folderID));

var blob = copy.getBlob().isGoogleType();
var docid = copy.getId();
var doc = DocumentApp.openById(docid);
var body = doc.getBody();
我期待一个.makeCopy的谷歌文档,使谷歌文档文件,我可以访问身体


2019年2月15日:
通过从驱动器映像中删除插入图形或取消链接来解决此问题。

我做了一些测试,并在
isGoogleType()
中遇到类似问题。即使blob确实是一个文档(不管是否只是复制的),它似乎也不会返回true

但是,脚本的其余部分应该可以正常运行stll并返回正文。请参见下面的示例

  var doc = DocumentApp.getActiveDocument();
  var docBlob = doc.getBlob();
  Logger.log(docBlob.isGoogleType()); //false

  var fileCopy = DriveApp.getFileById(doc.getId()).makeCopy("TMP: Delete Me");
  var fileBlob = fileCopy.getBlob();
  Logger.log(fileBlob.isGoogleType()); //false

  var docCopy = DocumentApp.openById(fileCopy.getId());
  Logger.log(docCopy.getBody().getText()); //still a valid Document with a body that return a value.
如果这不能完全回答您的问题,我们需要查看您在尝试获取
doc
对象变量体时遇到的错误。

1。关于OP的脚本: 我认为可以使用使用OP脚本通过
makeCopy()
复制的Google文档,并且可以从复制的文档中检索值。如果错误仍然发生,您能否使用以下脚本确认
templateID
的mimeType?我认为这将帮助用户思考您的问题

var mimeType = DriveApp.getFileById(templateID).getMimeType();
Logger.log(mimeType)
2.关于
isGoogleType()
: 虽然我不确定添加
isGoogleType()
的日期,但当通过
getBlob()
检索Google文档时,mimeType自动成为
application/pdf
。这可以通过
blob.getContentType()
确认。我认为这就是为什么
blob.isGoogleType()
总是
false
的原因。但是这个方法在类Blob中

从这些情况来看,我认为
isGoogleType()
可能无法直接用于确认文件是否为Google文档。因此,我使用了一种从文件ID检索mimeType的变通方法(我认为有几种变通方法可以确认文件是否为Google Docs)

var res = ~DriveApp.getFileById(fileId).getMimeType().indexOf("application/vnd.google-apps") ? true : false
我使用这个脚本而不是
isGoogleType()
。当文件ID的文件为时,将返回
true
。如果仅当文件为电子表格、文档和幻灯片时才希望返回
true
,则可以使用以下脚本

String.prototype.isGoogleType2 = function() {
  switch(this.toString()) {
    case "application/vnd.google-apps.spreadsheet":
      return true;
    case "application/vnd.google-apps.document":
      return true;
    case "application/vnd.google-apps.presentation":
      return true;
    default:
      return false;
  }
}

var doc = DocumentApp.getActiveDocument();
var res = DriveApp.getFileById(doc.getId()).getMimeType().isGoogleType2();
参考资料:

如果我误解了你的问题,我道歉。

isGoogleType()是假的,这很有趣。然后,我的错误是“很抱歉,发生了服务器错误。请稍等,然后重试。(第23行,文件“Code”)”,位于var doc=DocumentApp.openById(docid)上;行。@TedTurner看起来您的主要问题不是类型验证,而是获取副本的正文?你能在同一个脚本中,尝试复制不同的Google文档,并执行与测试相同的功能吗?是的,如果我使用我手动创建的Google文档的ID,我可以获取正文。如果我使用从“DriveApp.getFileById(templateID).makeCopy(userDocTitle,DriveApp.getFolderById(folderID))”生成的ID,即使手动输入ID,我也无法获取文档正文。我刚才试过别的东西,不知道发生了什么。如果我手动打开我的“模板”Google文档,进行复制,然后使用该ID,我也无法获取文档正文。这么多我都不明白getBody到底在做什么?我的目标是搜索和替换混合了文本和表的文档中的文本。我找到了问题的根源,但不确定如何解决它。在这个Google文档中,我使用了一个更新的功能从驱动器插入图形。如果删除此图形,则可以打开文档的正文。如果我添加回绘图,则无法打开文档的正文。因此,这似乎是一个限制,从驱动器插入绘图。这真的很有趣。考虑向应用程序脚本团队提交bug报告!我为我糟糕的英语水平道歉。我没有注意到文档中包含了绘图图像。我很抱歉。在我的环境中,我通过删除图形图像的链接来避免与打开的文件相关的问题。同样在您的情况下,删除绘图图像的链接并重试如何?不幸的是,在当前阶段,还没有删除DocumentApp和DocsAPI类中链接的方法。因此需要手动删除链接。如果这对你的情况没有帮助,我道歉。