Javascript 如何将CSV或XLS内容从Gmail添加到Google工作表的下一行?

Javascript 如何将CSV或XLS内容从Gmail添加到Google工作表的下一行?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我每天都会收到一封附有.xls(有时是CSV)电子表格文件的电子邮件。 我想每天导入这个SS,并将新内容添加到下一行。 如何调整此脚本以执行该操作? 我希望此脚本将内容添加到特定的工作表/选项卡。 另外,我如何让这个脚本寻找一个特定的标签,而不是我的主收件箱来提取文件? 脚本参考: 您希望将CSV数据和XLSX数据附加到活动电子表格中的特定选项卡 您想要检索带有gmail特定标签的电子邮件 您希望使用谷歌应用程序脚本实现这一点 如果我的理解是正确的,那么这个答案呢?请把这看作是几个答

我每天都会收到一封附有.xls(有时是CSV)电子表格文件的电子邮件。 我想每天导入这个SS,并将新内容添加到下一行。

如何调整此脚本以执行该操作?
我希望此脚本将内容添加到特定的工作表/选项卡。
另外,我如何让这个脚本寻找一个特定的标签,而不是我的主收件箱来提取文件? 脚本参考:

  • 您希望将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);
  }
}