首先,此代码完全符合我需要它处理一个问题,如果有太多数据要移动,Google会超时并将结束此过程。完全诚实/透明,我是一个完整的脚本代码菜鸟,所以我可能会遗漏一些非常简单的东西。据我所知,这些代码逐行堆叠数据,如果有太多行,这就是我的故障所在。有没有为什么只选择所有数据,并粘贴所有数据?谢谢你的帮助!
function importDataCDOP() {
var fSource = DriveApp.getFolderById('FILE PATH');
var fi = fSource.getFilesByName('xxxx.csv');
var ss = SpreadsheetApp.openById('FILE PATH');
if ( fi.hasNext() ) {
var ss1 = SpreadsheetApp.getActiveSpreadsheet();
var first = ss.getSheetByName('NEWDATA');
var file = fi.next();
var csv = file.getBlob().getDataAsString();
var csvData = CSVToArray(csv);
var newsheet = ss.getSheetByName('NEWDATA');
var destSheet = ss.getSheetByName('NEWDATA');
var lastRow = destSheet.getLastRow();
destSheet.insertRowAfter(lastRow);
for ( var i=0, lenCsv=csvData.length; i<lenCsv; i++ ) {
destSheet.getRange(lastRow + i + 1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
}
file.setName("OP report-"+(new Date().toString())+".csv");
}
};
function CSVToArray( strData, strDelimiter ) {
strDelimiter = (strDelimiter || ",");
var objPattern = new RegExp(
(
"(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
"([^\"\\" + strDelimiter + "\\r\\n]*))"
),
"gi"
);
var arrData = [[]];
var arrMatches = null;
while (arrMatches = objPattern.exec( strData )){
var strMatchedDelimiter = arrMatches[ 1 ];
if (
strMatchedDelimiter.length &&
(strMatchedDelimiter != strDelimiter)
){
arrData.push( [] );
}
if (arrMatches[ 2 ]){
var strMatchedValue = arrMatches[ 2 ].replace(
new RegExp( "\"\"", "g" ),
"\""
);
} else {
var strMatchedValue = arrMatches[ 3 ];
}
arrData[ arrData.length - 1 ].push( strMatchedValue );
}
return( arrData );
};
答案 0 :(得分:0)
从您的问题和评论中,我可以理解您要从&#34; xxxx.csv&#34;的文件中导入csv数据。在&#34; NEWDATA&#34;在&#34; FILE PATH&#34;的电子表格中,当导入大型csv数据时,经过的时间超过了Google Apps脚本的时间限制。我明白这是你的问题。对于这种情况,这个修改怎么样?虽然我不确定此修改是否可以直接解决您的问题,但请尝试运行此操作。
getFilesByName('xxxx.csv').next()
检索文件对象,因为csv文件只有一个。var first = ss.getSheetByName('NEWDATA');
和var newsheet = ss.getSheetByName('NEWDATA');
。
我只修改了importDataCDOP()
。
function importDataCDOP() {
var fSource = DriveApp.getFolderById('FILE PATH');
var file = fSource.getFilesByName('xxxx.csv').next();
var ss = SpreadsheetApp.openById('FILE PATH');
var csv = file.getBlob().getDataAsString();
var csvData = CSVToArray(csv).filter(String);
var destSheet = ss.getSheetByName('NEWDATA');
destSheet.getRange(destSheet.getLastRow() + 1, 1, csvData.length, csvData[0].length).setValues(csvData);
file.setName("OP report-"+(new Date().toString())+".csv");
};
CSVToArray()
。filter(String)
删除仅包含换行符的元素。如果我误解了你的问题并且修改后的脚本的使用时间超过了限制,我很抱歉。