Google apps script 从CSV导入非常慢
当我将csv表导入到Google工作表时,我的脚本(见下文)非常慢。有人知道问题出在哪里吗 我已经在不同的账户上试过了 问候Google apps script 从CSV导入非常慢,google-apps-script,google-sheets,Google Apps Script,Google Sheets,当我将csv表导入到Google工作表时,我的脚本(见下文)非常慢。有人知道问题出在哪里吗 我已经在不同的账户上试过了 问候 function import_konto_kst_statistik_budget() { var fSource = DriveApp.getFolderById('1B2t86GVMoB4yilJ5ieWuGpxFYzsVm8bs'); // reports_folder_id = id of folder where csv reports are saved
function import_konto_kst_statistik_budget() {
var fSource = DriveApp.getFolderById('1B2t86GVMoB4yilJ5ieWuGpxFYzsVm8bs'); // reports_folder_id = id of folder where csv reports are saved
var fi = fSource.getFilesByName('konto_kst_statistik_budget.csv'); // latest report file
var ss = SpreadsheetApp.getActive()
var sheet = ss.getSheetByName('90_konto_kst_statistik_budget'); // Select Sheet Konto
sheet.activate() // aktiviert das Sheet Konto
sheet.clear() // löscht alle Inhalte auf Sheet Konto
if ( fi.hasNext() ) { // proceed if "konto.csv" file exists in the reports folder
var file = fi.next();
var csv = file.getBlob().getDataAsString();
csv = csv.replace(/'/g, '"');
var csvData = CSVToArray(csv); // see below for CSVToArray function
// loop through csv data array and insert (append) as rows into 'NEWDATA' sheet
for ( var i=0, lenCsv=csvData.length; i<lenCsv; i++ ) {
sheet.getRange(i + 1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
}
}
}
function import\u konto\u kst\u statistik\u budget(){
var fSource=DriveApp.getFolderById('1B2T86GVMOB4YILJ5IEWUGPXYZSVM8BS');//报告\文件夹\ id=csv报告保存文件夹的id
var fi=fSource.getFilesByName('konto_kst_statistik_budget.csv');//最新报告文件
var ss=SpreadsheetApp.getActive()
var sheet=ss.getSheetByName('90_konto_kst_statistik_budget');//选择sheet konto
sheet.activate()//aktiviert das sheet Konto
sheet.clear()//löscht alle Inhalte auf sheet Konto
如果(fi.hasNext()){//如果报告文件夹中存在“konto.csv”文件,则继续
var file=fi.next();
var csv=file.getBlob().getDataAsString();
csv=csv.replace(/“/g,”);
var csvData=CSVToArray(csv);//有关CSVToArray函数,请参见下文
//循环浏览csv数据数组,并作为行插入(追加)到“NEWDATA”工作表中
对于(var i=0,lenCsv=csvData.length;i由于以下循环,脚本速度较慢:
for ( var i=0, lenCsv=csvData.length; i<lenCsv; i++ ) {
sheet.getRange(i + 1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
}
原因:
使用setValues的写操作开销巨大,而且耗时较长,因此请尝试
编辑:
如果一次输入一行的原因是CSV数据中的列长度可变。我建议修改CSVtoArray()
函数以返回具有统一列长度的数组由于此循环,您的脚本速度较慢:
for ( var i=0, lenCsv=csvData.length; i<lenCsv; i++ ) {
sheet.getRange(i + 1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
}
原因:
使用setValues的写操作开销巨大,而且耗时较长,因此请尝试
编辑:
如果每次输入一行的原因是CSV数据中的列长度可变。我建议修改CSVtoArray()
函数返回具有统一列长度的数组除非用于活动计算,否则传输速度并不重要。相关:除非用于活动计算,否则传输速度并不重要。相关:什么是i
atcsvData[i].length
的更改?如果CSVtoArray()
具有统一的列长度,是否是0
而不是?它应该是csvData[0]。length,刚刚修改了它谢谢您的建议我收到了您的代码错误(抱歉是德语)“Falsche Bereichsbreite,war 4,sollte jedoch 1 sein.(Zeile 159,Datei“code”)Schlienßßen“使用google Translator翻译时,错误的区域宽度为4,但应为1。(第159行,文件“代码”)我认为,数组长度不相等。如果您查看电子表格,至少会写入第一行。您可以发布您的csvtoarray()吗?”函数和一个示例csv文件来验证是否相同。什么是i
atcsvData[i]。更改的长度
?如果CSVtoArray()
具有统一的列长度,它是0
而不是吗?它应该是csvData[0]。长度,请修改它谢谢您的建议我收到了您的代码错误(对不起,是德语)“Falsche Bereichsbreite,war 4,sollte jedoch 1 sein.(Zeile 159,Datei“代码”)Schließen”用谷歌翻译器翻译,错误区域宽度为4,但应为1。(第159行,文件“代码”)Close我也这么认为,数组长度不相等。如果您查看电子表格,至少会将第一行写入。您是否可以发布您的csvtoarray()函数和示例csv文件来验证这一点。