Javascript 如何将CSV或XLS内容从Gmail添加到Google工作表的下一行?
我每天都会收到一封附有.xls(有时是CSV)电子表格文件的电子邮件。 我想每天导入这个SS,并将新内容添加到下一行。 如何调整此脚本以执行该操作?Javascript 如何将CSV或XLS内容从Gmail添加到Google工作表的下一行?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我每天都会收到一封附有.xls(有时是CSV)电子表格文件的电子邮件。 我想每天导入这个SS,并将新内容添加到下一行。 如何调整此脚本以执行该操作? 我希望此脚本将内容添加到特定的工作表/选项卡。 另外,我如何让这个脚本寻找一个特定的标签,而不是我的主收件箱来提取文件? 脚本参考: 您希望将CSV数据和XLSX数据附加到活动电子表格中的特定选项卡 您想要检索带有gmail特定标签的电子邮件 您希望使用谷歌应用程序脚本实现这一点 如果我的理解是正确的,那么这个答案呢?请把这看作是几个答
我希望此脚本将内容添加到特定的工作表/选项卡。
另外,我如何让这个脚本寻找一个特定的标签,而不是我的主收件箱来提取文件? 脚本参考:
- 您希望将CSV数据和XLSX数据附加到活动电子表格中的特定选项卡
- 您想要检索带有gmail特定标签的电子邮件
- 您希望使用谷歌应用程序脚本实现这一点
- 可以直接从CSV文件检索数据。但对于XLSX文件,需要将其转换为Google电子表格,并从转换后的电子表格中检索数据。
- XLSX文件被转换为谷歌电子表格文件:插入驱动器API
- 为了将数据附加到特定选项卡,在这次修改中,我使用了
和getSheetByName()
getLastRow()
- 为了检索带有特定标签的电子邮件,我使用了
的搜索查询标签:#######
sheetName
。并请将搜索查询设置为GmailApp.search(“发件人:######电子邮件#####标签:#####”)
#########
和#######
分别是电子邮件地址和标签
function importCSVFromGmail() {
var sheetName = "Sheet1"; // Please set the tab name you want to append the data.
var threads = GmailApp.search("from:###email### label:###label###"); // Please set here.
var messages = threads[0].getMessages();
var message = messages[messages.length - 1];
var attachment = message.getAttachments()[1];
// attachment.setContentTypeFromExtension(); // This might be required for your situation.
var data = [];
if (attachment.getContentType() == MimeType.CSV) {
data = Utilities.parseCsv(attachment.getDataAsString(), ",");
} else if (attachment.getContentType() == MimeType.MICROSOFT_EXCEL || attachment.getContentType() == MimeType.MICROSOFT_EXCEL_LEGACY) {
var tempFile = Drive.Files.insert({title: "temp", mimeType: MimeType.GOOGLE_SHEETS}, attachment).id;
data = SpreadsheetApp.openById(tempFile).getSheets()[0].getDataRange().getValues();
Drive.Files.trash(tempFile);
}
if (data.length > 0) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
sheet.getRange(sheet.getLastRow() + 1, 1, data.length, data[0].length).setValues(data);
}
}
参考资料:
如果我误解了你的问题,而这不是你想要的结果,我道歉。非常感谢你调查此事。我现在正在按照你的指示做,很快就会跟你联系的!问题,如果说文件类型是.xls,我会将
MimeType.CSV
更改为MimeType.xls
?@FeatherDuster谢谢您的回答。在初始脚本中,var attachment=message.getAttachments()[1]代码>被使用。在这种情况下,将检索第二个附件文件。如果只有一个附件文件,如何修改为var attachment=message.getAttachments()[0]代码>?如果电子邮件没有附件文件,也会发生此类错误。请你也小心点。天哪,它起作用了!!所以在更改var attachment=message.getAttachments()[1]之后代码>到var attachment=message.getAttachments()[0]代码>它导入了我的附件。你就是那个男人!!因此,当我最初将[0]
设置为[1]
导致变量查找多个附件时,通过将其设置为[0]
,默认情况下它只查找1。我理解的对吗?非常感谢你在这方面的帮助,我相信很多人都会觉得这很有用。我很抱歉第一次给你添麻烦。祝你度过愉快的一天,非常感谢!
function importCSVFromGmail() {
var sheetName = "Sheet1"; // Please set the tab name you want to append the data.
var threads = GmailApp.search("from:###email### label:###label###"); // Please set here.
var messages = threads[0].getMessages();
var message = messages[messages.length - 1];
var attachment = message.getAttachments()[1];
// attachment.setContentTypeFromExtension(); // This might be required for your situation.
var data = [];
if (attachment.getContentType() == MimeType.CSV) {
data = Utilities.parseCsv(attachment.getDataAsString(), ",");
} else if (attachment.getContentType() == MimeType.MICROSOFT_EXCEL || attachment.getContentType() == MimeType.MICROSOFT_EXCEL_LEGACY) {
var tempFile = Drive.Files.insert({title: "temp", mimeType: MimeType.GOOGLE_SHEETS}, attachment).id;
data = SpreadsheetApp.openById(tempFile).getSheets()[0].getDataRange().getValues();
Drive.Files.trash(tempFile);
}
if (data.length > 0) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
sheet.getRange(sheet.getLastRow() + 1, 1, data.length, data[0].length).setValues(data);
}
}