Google Apps 脚本 - XLSX 从 E-mail 到特定的 Google Sheet
Google Apps Script - XLSX from E-mail to specific Google Sheet
我每天收到一个 e-mail 的 XLSX 文件,我需要将其导出到特定的 Google Sheet。
该代码只是在 GMAIL 中搜索特定查询,然后在其中获取 body(其中包含一个 URL),然后使用使用 Url.FetchApp.fetch(url).getBlob()
[ 的 doGet 函数下载它=17=]
之后,使用变量 fileInfo,它定义了文件的标题、mimeType 和 "parents",这是我需要存放转换文件的文件夹的 ID。
然后,我插入带有 Drive.Files.insert(fileInfo, file, {convert: true})
的文件,它应该转换我的 Excel 文件并将其存放在我的文件夹中。
导出有效(导出文件)。如果我手动附加一个 .xlsx 扩展名并尝试在 Excel 中打开,它会完美打开并包含所有必需的信息。
但是,问题是我不需要在 Excel 文件中打开,所以我试图将它导出到 Google Sheet 甚至解析它作为 CSV,但它不起作用。
当试图通过 ID 打开这个导出的文件时,它说它丢失或没有权限,但它在那里而且我有权限。
检查文件的 MIME 类型时,显示 "application/x-zip"。
我是否可以使用 ID“1HMXgJuuRFaGK11sfR38mKh6rk4ta_Qgtlljk6HBjLkE”将文件数据上传到我的 Google Sheet?
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;
}
您似乎需要使用正确的 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
是保留函数。
原来我还必须将 doGet 函数中的 mimetype 设置为 xlsx mimetype 才能工作。
作为优化,我还删除了文件信息变量中的 mimetype 规范。
尽管保留了这个 doGet 函数,但我还是设法使用它,所以我想我现在会坚持使用它吗?
至于直接调用驱动器api,我需要使用高级服务才能转换xlsx文件。
我每天收到一个 e-mail 的 XLSX 文件,我需要将其导出到特定的 Google Sheet。
该代码只是在 GMAIL 中搜索特定查询,然后在其中获取 body(其中包含一个 URL),然后使用使用 Url.FetchApp.fetch(url).getBlob()
[ 的 doGet 函数下载它=17=]
之后,使用变量 fileInfo,它定义了文件的标题、mimeType 和 "parents",这是我需要存放转换文件的文件夹的 ID。
然后,我插入带有 Drive.Files.insert(fileInfo, file, {convert: true})
的文件,它应该转换我的 Excel 文件并将其存放在我的文件夹中。
导出有效(导出文件)。如果我手动附加一个 .xlsx 扩展名并尝试在 Excel 中打开,它会完美打开并包含所有必需的信息。
但是,问题是我不需要在 Excel 文件中打开,所以我试图将它导出到 Google Sheet 甚至解析它作为 CSV,但它不起作用。
当试图通过 ID 打开这个导出的文件时,它说它丢失或没有权限,但它在那里而且我有权限。 检查文件的 MIME 类型时,显示 "application/x-zip"。
我是否可以使用 ID“1HMXgJuuRFaGK11sfR38mKh6rk4ta_Qgtlljk6HBjLkE”将文件数据上传到我的 Google Sheet?
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;
}
您似乎需要使用正确的 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
是保留函数。
原来我还必须将 doGet 函数中的 mimetype 设置为 xlsx mimetype 才能工作。
作为优化,我还删除了文件信息变量中的 mimetype 规范。
尽管保留了这个 doGet 函数,但我还是设法使用它,所以我想我现在会坚持使用它吗?
至于直接调用驱动器api,我需要使用高级服务才能转换xlsx文件。