【问题标题】:Converting Excel to Gsheet and then importrange them without needing Auth将 Excel 转换为 Gsheet,然后在不需要 Auth 的情况下导入它们
【发布时间】:2021-03-19 19:46:36
【问题描述】:

我收到大约每天更新的 .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,以及想要访问它的电子表格)允许在那里进行访问?或者有没有办法可以设置这个“转换”代码来覆盖旧的 gsheet(这样我只需要允许访问一次)。

【问题讨论】:

  • 为什么不用您的代码直接读取和导入数据?
  • 所以当提取物是 .csv 格式时我这样做了,但是在 .xlsx 中我(我想我)必须转换它,所以我可以使用 =importrange 来引入它。但我相信我我已经整理好了。现在将发布解决方案。

标签: google-apps-script google-drive-api


【解决方案1】:

这对我有用:

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.
  }

}

【讨论】:

    猜你喜欢
    • 2020-03-27
    • 1970-01-01
    • 2016-06-26
    • 2021-09-28
    • 2015-05-25
    • 2012-11-21
    • 1970-01-01
    • 2013-11-07
    • 2018-09-08
    相关资源
    最近更新 更多