将 Excel 转换为 Gsheet,然后在不需要 Auth 的情况下导入它们

Converting Excel to Gsheet and then importrange them without needing Auth

我收到大约每天更新的 .xlsx 格式的文件。要使用 importrange 函数,我需要将 xlsx 文件转换为 gSheet。我已经按照驱动器 API

完成了转换
function importXLS(){
  var folderBId = "redacted"; // This is the folder where we will save the gsheet converted files

  fileID = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("DataFile").getValue();


  var xFile = DriveApp.getFileById(fileID);
  var name = xFile.getName();
  if (name.indexOf('.xlsx')>-1){ 
    var ID = xFile.getId();
    var xBlob = xFile.getBlob();
    var newFile = {
      title : name+'_converted',
      parents: [{id: folderBId}] //  Added
    };
    file = Drive.Files.insert(newFile, xBlob, {
      convert: true
    });
    SpreadsheetApp.getActiveSpreadsheet().getRangeByName("GDatafile").setValue(file.id); // **Notes below**
    // Drive.Files.remove(ID); // Added // If this line is run, the original XLSX file is removed. So please be careful this.
  }

所以我将新的 gSheet ID 保存在我的电子表格中,以便我可以使用 importrange 导入它。但是因为它是每次更新的新 gsheet 文件,而不是旧文件的覆盖版本,所以我需要明确授予对该文件的访问权限。这里的重点是自动化,每次访问都必须单击“允许”是不理想的。

我能否以某种方式(因为我在这里拥有 fileID 以及想要访问它的电子表格)允许访问?或者有什么方法可以设置这个 'converting' 代码来覆盖旧的 gsheet(这样我只需要允许访问一次)。

这对我有用:

function importXLS(){
  var folderBId = "redacted"; // This is the folder where we will save the gsheet converted files

  fileID = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("DataFile").getValue();


  var xFile = DriveApp.getFileById(fileID);
  var name = xFile.getName();
 

  if (name.indexOf('.xlsx')>-1){ 
    var ID = xFile.getId();
    var xBlob = xFile.getBlob();
    var newFile = {
      title : name+'_gsheet',
      parents: [{id: folderBId}]
    };
    var GDataFile = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("GDatafile").getValue();

    if (GDataFile == "" ){
      file = Drive.Files.insert(newFile, xBlob, {
        convert: true
      })
      Logger.log("New File Created: " + file.id);
      SpreadsheetApp.getActiveSpreadsheet().getRangeByName("GDatafile").setValue(file.id);
    }
    else{
      file = Drive.Files.update(newFile,GDataFile,xBlob); // <--- this is the update code
      Logger.log("File in theory updated... " + GDataFile);  
    }   
    // Drive.Files.remove(ID); // Added // If this line is run, the original XLSX file is removed. So please be careful this.
  }

}