我正在编写一个脚本,以将最新添加的csv文件搜索到Google驱动器文件夹中,并将内容添加到“主表”的最后一行。不幸的是,每次将csv文件放在驱动器文件夹中时,其文件名都不相同,因此我要做的只是最后添加的文件。
我收到以下错误消息:
“ TypeError:在对象Masergy报告中找不到函数hasNext。(第7行,文件“代码”)”
感谢任何帮助解决此问题的方法。
function importData()
{
var ss = SpreadsheetApp.openById("1FldzyMKoQnbsqNxCYUZsizxVLShHrLBq_llJnu2so9o");
var folderID = (typeof(folderID) !== 'undefined')? folderID : '1vzOduvWFCQGZYFuq_AKUY4NfDb2dW5fB';//default folderID
var fldr = DriveApp.getFolderById(folderID);
var files = fldr.getFilesByType('text/csv');
while (fldr.hasNext())
{
var file = files.next();
var filename = file.getFilesByType('text/csv');
if(fileType.match(files))
{
var csvstr=file.getBlob().getDataAsString();
var csvData=Utilities.parseCsv(csvstr);
var sheet = ss.getSheetByName("MasergyReports");
var lastrow = sheet.getLastRow();
sheet.getRange(lastrow + 1, 1, csvData.length, csvData[0].length).setValues(csvData);
file.setName(filename.slice(0,-3) + 'old'); //the .old files won't pass the file re filter next time.
}
}
}
答案 0 :(得分:0)
folderID
变量似乎过于复杂,为什么要在该行中定义变量时检查其是否未定义?while
语句中的文件。file.getFilesByType()
是无效的方法。fileType
未定义,但您在if
语句中使用它。filename
变量无效,因此您的setName()
语句也无效。if
语句中添加一行以检查'.old'模式的文件名。仅用ID定义var folderID
,就没有理由检查它是否未定义,因为无论如何您都在定义它:
var folderID = '1vzOduvWFCQGZYFuq_AKUY4NfDb2dW5fB';
您应该遍历变量files
,而不是fldr
:
while (files.hasNext())
更改var fileName
来实际获取每个文件的文件名:
var fileName = file.getName();
更改您的if
语句以获取文件的内容类型,而不是尝试在var filename
中对其进行定义。还添加了对以“ .old”结尾的文件名的检查,以确保我们仅处理新文件:
if(file.getBlob().getContentType() === "text/csv" && !fileName.match(/.old/))
在您的var fileName
语句中使用新的setName()
:
file.setName(fileName.slice(0,-3) + ".old");
function importData()
{
var ss = SpreadsheetApp.openById("1FldzyMKoQnbsqNxCYUZsizxVLShHrLBq_llJnu2so9o");
var folderID = '1vzOduvWFCQGZYFuq_AKUY4NfDb2dW5fB';
var fldr = DriveApp.getFolderById(folderID);
var files = fldr.getFilesByType('text/csv');
while (files.hasNext())
{
var file = files.next();
var fileName = file.getName();
if(file.getBlob().getContentType() === "text/csv" && !fileName.match(/.old/))
{
var csvstr=file.getBlob().getDataAsString();
var csvData=Utilities.parseCsv(csvstr);
var sheet = ss.getSheetByName("MasergyReports");
var lastrow = sheet.getLastRow();
sheet.getRange(lastrow + 1, 1, csvData.length, csvData[0].length).setValues(csvData);
file.setName(fileName.slice(0,-3) + "old"); //the .old files won't pass the file re filter next time.
}
}
}