Google Apps 脚本 - 将 xlsx 转换为 sheet 覆盖现有脚本

Google Apps Script - convert xlsx to sheet overwriting the existing one

我在尝试将 xlsx 文件转换为 google sheet 时遇到了一个真正的大问题,每天都会覆盖同一个文件。 下面是每天生成一个新文件的代码。sheet 但我确实需要覆盖现有文件,以便能够使用更新后的数据更新 google 数据工作室仪表板。 你能帮帮我吗?

function convertExceltoGoogleSpreadsheet(fileName) {
  try {

    fileName = fileName || "GDS_Stock_Positioning.xlsx";

    var excelFile = DriveApp.getFilesByName(fileName).next();
    var fileId = excelFile.getId();
    var folderId = Drive.Files.get("1g5oIY5qeH5tNkMBGIzj1ddqX9DCXqJrz").parents[0].id;
    var blob = excelFile.getBlob();
    var resource = {
      title: excelFile.getName(),
      mimeType: MimeType.GOOGLE_SHEETS,
      parents: [{id: "1g5oIY5qeH5tNkMBGIzj1ddqX9DCXqJrz"}],
    };

    Drive.Files.insert(resource, blob);
    Drive.Files.remove(fileId)

  } catch (f) {
    Logger.log(f.toString());
  }

}

function DeleteOldFiles() {
  var Folders = new Array(
    '1g5oIY5qeH5tNkMBGIzj1ddqX9DCXqJrz',
    '1g5oIY5qeH5tNkMBGIzj1ddqX9DCXqJrz'
  );
  var Files;

  Logger.clear();

  for (var key in Folders) {
    Folder = DriveApp.getFolderById(Folders[key])
    Files = Folder.getFiles();
    
    Logger.log('Opening Folder: ' + Folder.getName());

    while (Files.hasNext()) {
      var File = Files.next();

      if (new Date() - File.getLastUpdated() > 1 * 12 * 60 * 60 * 1000) {
        File.setTrashed(true); // Places the file in the Trash folder
        //Drive.Files.remove(File.getId()); // Permanently deletes the file
        Logger.log('File ' + File.getName() + ' was deleted.');
      }
    }
  }

  if(Logger.getLog() != '')
    MailApp.sendEmail('xxxx@gmail.com', 'Backups have been removed from Google Drive', Logger.getLog());
}

我相信你的目标如下。

  • 您想使用 EXCEL 数据覆盖现有的 Google 电子表格。
  • 您想使用 Google Apps 脚本实现此目的。

在这种情况下,我认为可以通过驱动器API的“文件:更新”的方法来实现。

示例脚本:

在您使用此脚本之前,please enable Drive API at Advanced Google services。并且,请设置xlsxFileNamespreadsheetId的变量。 xlsxFileName 是 XLSX 文件的文件名。 spreadsheetId id 被 XLSX 数据覆盖的 Spreadsheet 的 Spreadsheet ID。

function myFunction() {
  const xlsxFileName = "###";  // Please set the filename of XLSX file.
  const spreadsheetId = "###";  // Please set the Spreadsheet ID. This Spreadsheet is overwritten by EXCEL data.

  const xlsx = DriveApp.getFilesByName(xlsxFileName || "GDS_Stock_Positioning.xlsx");
  if (!xlsx.hasNext()) throw new Error("No excel file.");
  Drive.Files.update({mimeType: MimeType.GOOGLE_SHEETS}, spreadsheetId, xlsx.next().getBlob());
}
  • 当您运行此脚本时,spreadsheetId 的电子表格被xlsxFileNameGDS_Stock_Positioning.xlsx 的XLSX 数据覆盖。如果不使用 xlsxFileName,则使用 GDS_Stock_Positioning.xlsx。这是来自您的脚本。

重要提示:

  • 此脚本覆盖现有的电子表格。所以请小心。我想推荐使用示例电子表格来测试脚本。

参考: