【发布时间】:2019-10-31 20:36:49
【问题描述】:
在下面查看我的功能。我已多次成功运行此代码。我设置了一个触发器,它也运行了几次。我开始对此感觉很好,所以我想开始在其他报告中使用此功能。我在至少 2 个其他文件上设置了它,它们手动成功运行,并在失败前使用了两次触发器。我的原始文件使用触发器运行此代码一个多月,并且在其他文件遇到它之前没有失败一次。具有讽刺意味的是,这一切都发生在 2019 年 10 月 29 日,所以我不知道谷歌是否做了一些改变。我不知道它的应用程序脚本是否相关,或者我可以改进我的代码以使其工作。
我不断收到此错误:文档 1eQ0uewvBDHVu66fydr76BHqtRJiGUkxtVAVFrkvRQR8 丢失(可能它已被删除,或者您没有读取权限?)。 当然对于每个文件以及每次我运行该函数,因为我每天都从我的电子邮件中获取一份新报告,所以文件 ID 会发生变化。所以我假设我可以对下面的粗体代码部分进行一些更改......
function getCSV() {
var threads = GmailApp.search('in:inbox from:"jreport_noreply@datapipe.mediaspectrum.net" subject:"Open SRs"');
var messages = threads[0].getMessages();
var len = messages.length;
var message=messages[len-1] //get last message
var attachments = message.getAttachments(); // Get attachment of first message
var xlsxBlob = attachments[0]; // Is supposes that attachments[0] is the blob of xlsx file.
var convertedSpreadsheetId = Drive.Files.insert({mimeType: MimeType.GOOGLE_SHEETS}, xlsxBlob).id;
var sheet = SpreadsheetApp.openById(convertedSpreadsheetId).getSheets()[0]; // There is the data in 1st tab.
var data = sheet.getDataRange().getValues();
Drive.Files.remove(convertedSpreadsheetId); // Remove the converted file.
var sheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/18vpXXAuuIfJqww8EoL07dqHSGGHaV3IGRMUCcJz1t40/").getSheetByName("rawdata");
sheet.clearContents();
var range = sheet.getRange(1, 1, data.length, data[0].length);
range.setValues(data);
}
更新 11.4.19 - 我已恢复 10.29 之前的项目版本,但仍然遇到相同的错误。
更新 11.11.19- 我删除了 Drive.Files.remove(convertedSpreadsheetId); // 删除转换后的文件 .这将允许代码运行;但是,我不能对每个文件都这样做。因此,我确定了以下问题。转换后的文件将被删除。如果我们不删除,那么我将无法在多个文件上运行代码,因为与转换后的 id 存在冲突。无论我们是否尝试删除文件,我确定这是根本问题。 希望有人可以帮我解决这个问题。我不知道重命名每个文件然后尝试删除它是否有意义。
【问题讨论】:
-
我猜这是个愚蠢的问题,但您是否为此使用 Drive API?
-
您能说出您使用的是哪个版本的应用脚本吗?
-
你好@DavidColardeau,你能确认脚本是否真的被完全执行了,尽管你得到了错误? (您的
rawdata工作表是否正在更新?) -
@kevkeev13 是的,我为此启用了 Drive Api v2。如果我没有打开它,它会给出不同的错误。
-
@J.G.我该如何确定?您指的是应用程序脚本的版本还是我的项目的版本(例如库?)我没有使用库。我刚刚复制并重用了不同文件的代码。
标签: excel google-apps-script google-sheets triggers gmail