我已经基于一个GoogleSheets文件在Google DataStudio中设计了一个仪表板。进入GoogleSheets文件的数据来自两个以“;”分隔的.csv文件。这些.csv文件会在夜间自动更新并存储在GoogleDrive中。为了使我的DashBoard也能够根据.csv文件中的更改自动更新,我需要将它们自动读入GoogleSheets文件,这是通过触发脚本在.csvs更新后每晚运行来实现的...
由于除了一些基础知识外,我实际上并不知道如何编码,因此我从互联网上的各种来源构建了以下脚本。令人高兴的是,它基本上可以工作:
function parseCsv(csvString, delimiter) {
var sanitizedString = csvString.replace(/(["'])(?:(?=(\\?))\2[\s\S])*?\1/g, function(e){return e.replace(/\r?\n|\r/g, ' ') });
return Utilities.parseCsv(sanitizedString, delimiter)
}
//------------------------------------------------------------
function import_Sales() {
var fileName = "exported_Sales.csv";
var searchTerm = "title = '"+fileName+"'";
var files = DriveApp.searchFiles(searchTerm)
var csvFile = "";
while (files.hasNext()) {
var file = files.next();
if (file.getName() == fileName) {
csvFile = file.getBlob().getDataAsString('ISO-8859-15');
break;
}
}
var csvData = parseCsv(csvFile,";");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('ExportSales');
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
如前所述,我正在导入2个不同的.csv文件(因此,不仅具有import_sales函数,而且还具有import_stock功能。
对于股票csv,一切工作都很好(除了名称之外,它看起来完全类似于上面的import_Sales()函数)。
问题似乎出在我的sales..csv文件的大小上。 (23列x 56.000行),并且文件在每晚更新时变得越来越长。因此,当尝试在几分钟后运行import_Sales函数时,出现错误“最长执行时间” ...因此,我认为这与.csv的大小或功能(希望)效率低下有关,也许你们中的某人知道它如何运行得更快? .csv的大小无法更改,我无法想象将不可能将其导入到Google表格中吗?!
有没有人知道我如何管理它以便每晚自动将csv中的数据获取到Google工作表中?也许我可以跳过Google表格文件中已经存在的行,而只是以某种方式从cvs中导入新行?但这绝对是我的学业了,所以我很高兴你们能够帮助我!
谢谢问候!
答案 0 :(得分:0)
如果驱动器中已有该文件,请尝试将CSV复制并将其转换为表格,而不是“手动”将单元格从csv移至现有表格。
function main(){
var files = DriveApp.searchFiles('title contains "your csv file name"').next();
var name = files.getName();
var file_id = files.getId();
var file_Blob = files.getBlob();
var newFile = { title : name+'_Sheet',
key : file_id};
files = Drive.Files.insert(newFile,file_Blob, {convert: true});
}
我还附上documentation以说明函数执行时间限制。