我有一个脚本可以从Google驱动器中的.csv文件中获取内容并将其拉入Google表格。该脚本使用不推荐使用的DocsList服务。以下工作原理,但我希望将DocsList组件转换为DriveApp,以确保它在可预见的未来有效。
我看到的主要问题是getContentAsString()方法似乎不适用于DriveApp。是否可以直接替代getContentAsString()或其他元素的组合,以获得与以下脚本相同的结果?
function importFromCSV() {
var fileName = "0B2n-RwpLExXnaXRBWG1aT3NLbm8";
var FileId = DriveApp.getFileById("0B2n-RwpLExXnaXRBWG1aT3NLbm8");
var files = DocsList.getFiles();
var csvFile = "";
for (var i = 0; i < files.length; i++) {
if (files[i].getId() == fileName) {
csvFile = files[i].getContentAsString();
Logger.log(files[i]);
break;
}
}
var csvData = CSVToArray(csvFile, ",");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
for (var i = 0; i < csvData.length; i++) {
sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
}
}
答案 0 :(得分:3)
DriveApp文件对象有一个getBlob()
方法,blob对象有一个getDataAsString()
方法......您可以链接这两种方法以获得字符串内容。
以下是完整代码,尽可能简化(初始代码中存在其他不一致之处,如former question中已提到的那样)。
function importFromCSV() {
var id = "0B2n-RwpLExXnaXRBWG1aT3NLbm8";
var file = DriveApp.getFileById(id);// get the file object
var csvFile = file.getBlob().getDataAsString();// get string content
Logger.log(csvFile);// check in the logger
var csvData = CSVToArray_(csvFile);// convert to 2D array
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
sheet.getRange(1,1, csvData.length, csvData[0].length).setValues(csvData);// write to sheet in one single step
}
function CSVToArray_(strData){
var rows = strData.split("\n");
Logger.log(rows.length);
var array = [];
for(n=0;n<rows.length;++n){
if(rows[n].split(',').length>1){
array.push(rows[n].split(','));
}
}
Logger.log(array);
return array;
}