我每天都会收到一封包含XLSX文件的电子邮件,然后将其导出到特定的Google表格。
该代码只是在GMAIL中搜索特定查询,然后在其中获取正文(包含URL),然后使用Url.FetchApp.fetch(url).getBlob()
然后,使用变量fileInfo定义文件的标题,mimeType和“父项”,这是我需要在其中存储转换后的文件的文件夹的ID。
然后,我插入带有Drive.Files.insert(fileInfo, file, {convert: true})
的文件,它将转换我的Excel文件并将其存放在我的文件夹中。
导出有效(导出文件)。如果我手动附加.xlsx扩展名并尝试在Excel中打开,则它会完美打开并包含所有必需的信息。
但是,问题是我不需要在Excel文件中打开,因此我试图将其导出到Google表格,甚至将其解析为CSV格式,但无法正常工作。
当尝试通过ID打开此导出文件时,它说它丢失或没有权限,但是它在那里并且我确实具有权限。 检查文件的MIME类型时,它显示为“ application / x-zip”。
反正我是否可以将文件数据上传到ID为“ 1HMXgJuuRFaGK11sfR38mKh6rk4ta_Qgtlljk6HBjLkE”的Google表格中?
function CostDSP() {
var sheetId="1HMXgJuuRFaGK11sfR38mKh6rk4ta_Qgtlljk6HBjLkE";
var threads = GmailApp.search("from:no-reply@amazon.com subject:Cost - DSP in:inbox newer_than:1d");
var message = threads[0].getMessages()[0];
var attachment = message.getPlainBody();
var regex= new RegExp("\<(.*)\>");
var url=regex.exec(attachment)[1];
Logger.log(url);
var file=doGet(url);
var fileInfo = {
title: "Cost - DSP",
mimeType: "MICROSOFT_EXCEL",
"parents": [{'id': "19jrt0DyfvsDz5WAdKhkekHkJ_wP7qP7f"}],
};
Drive.Files.insert(fileInfo, file, {convert: true});
var sourceFile = DriveApp.getFilesByName("Cost - DSP").next();
Logger.log(sourceFile.getMimeType());
Logger.log(sourceFile);
var source=SpreadsheetApp.openById("1lIVb9YM9IK7f8dKuC1RpXjP7nLnMNXm1");
var sheet = sourceFile.getSheets()[0];
var destination = SpreadsheetApp.openById("1HMXgJuuRFaGK11sfR38mKh6rk4ta_Qgtlljk6HBjLkE").getSheetByName('Data Intake');
sheet.copyTo(destination);
}
function doGet(e) {
// e.parameter["file"] //returns ?file=filelink.com/file.xlsx
var file = UrlFetchApp.fetch(e).getBlob();
return file;
}
答案 0 :(得分:1)
似乎您需要使用正确的mime类型进行导入
mimeType:
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
下一个代码对我来说很好
var file = UrlFetchApp.fetch(
'https://ec.europa.eu/eurostat/statistics-explained/images/9/9f/Country_Codes_and_Names.xlsx'
);
var fileInfo = {
title: 'Cost - DSP',
mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
parents: [{
id: 'root'
}],
};
Drive.Files.insert(fileInfo, file, {
convert: true
})
就像@Raserhin所说的那样,它无需使用mimeType
参数。
var fileInfo = {
title: 'Cost - DSP',
// mimeType:
// 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
parents: [{ id: 'root' }],
}
;
此外,您不能像现在使用的那样使用doGet
。 doGet
是保留功能。
答案 1 :(得分:0)
结果,我还必须将doGet函数中的mimetype设置为xlsx mimetype才能起作用。
作为优化,我还删除了文件info变量中的mimetype规范。
尽管保留了它,但我仍设法使用此doGet函数,所以我想我现在会坚持吗?
至于直接调用驱动器api,我需要使用高级服务才能转换xlsx文件。