如何使用 Appscript 将命名文件从 Gmail 的 zip 文件夹导入表格



我最近一直在尝试将文件夹从zip文件导入到工作表中。我尝试了下面的代码,但它只返回第一个文件。我已经尝试了多种方法让它按名称返回文件,但无济于事。

请有人告诉我如何让脚本在提取的文件夹中搜索某个文件并导入该文件。

function getCSV() {
var myLabel = GmailApp.getUserLabelByName("Auction_HVT");
var threads = myLabel.getThreads(0,1);
var msgs = GmailApp.getMessagesForThreads(threads);
var attachments = msgs[0][0].getAttachments();

var csv =  attachments[0];
var extracted = Utilities.unzip(csv);
var attachmentName = extracted.getName()
var data = Utilities.parseCsv(string);


var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("HVT");
sheet.clearContents();
var range = sheet.getRange(1,1, data.length,data[0].length);
range.setValues(data);

}

我相信你的目标如下。

  • 您希望通过搜索文件名从 zip 文件中检索文件(CSV 文件)。
  • 您希望从检索到的文件中放置 CSV 数据。

在这种情况下,以下修改怎么样?Utilities.unzip()返回Blob[].因此,您可以从Blob[]中搜索特定文件。

修改后的脚本:

从:

var csv =  attachments[0];
var extracted = Utilities.unzip(csv);
var attachmentName = extracted.getName()
var data = Utilities.parseCsv(string);

自:

var searchFilename = "sample.csv"; // Please set the filename of the CSV file you want to retrieve.
var csv =  attachments[0].setContentTypeFromExtension();
var extracted = Utilities.unzip(csv);
var csv = extracted.find(e => e.getName().slice(-searchFilename.length) == searchFilename);
if (!csv) {
throw new Error(searchFilename + " was not found.");
}
var string = csv.getDataAsString();
var data = Utilities.parseCsv(string);

引用:

  • 解压缩(blob)
  • 查找()

最新更新