将 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.
}
}
我收到大约每天更新的 .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.
}
}