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' }],
  }

;

此外,您不能像现在这样使用 doGetdoGet 是保留函数。

原来我还必须将 doGet 函数中的 mimetype 设置为 xlsx mimetype 才能工作。

作为优化,我还删除了文件信息变量中的 mimetype 规范。

尽管保留了这个 doGet 函数,但我还是设法使用它,所以我想我现在会坚持使用它吗?

至于直接调用驱动器api,我需要使用高级服务才能转换xlsx文件。