使用Google Apps脚本将.CSV文件数据复制到Google工作表

使用Google Apps脚本将.CSV文件数据复制到Google工作表,csv,google-apps-script,google-sheets,Csv,Google Apps Script,Google Sheets,我需要遍历源文件夹中的每个.CSV文件,并将每个文件中的数据复制到一个GoogleSheets文件中的新工作表/选项卡中。我已经找到了一些与这个主题相关的答案,但是两个代码集都出现了错误。以下是我试图从中构建解决方案的代码: function appendCSV() { var file = DriveApp.getFilesByName("myCSVFile.csv").next(); var csvData = Utilities.parseCsv(file.getBl

我需要遍历源文件夹中的每个.CSV文件,并将每个文件中的数据复制到一个GoogleSheets文件中的新工作表/选项卡中。我已经找到了一些与这个主题相关的答案,但是两个代码集都出现了错误。以下是我试图从中构建解决方案的代码:

function appendCSV() {  
    var file = DriveApp.getFilesByName("myCSVFile.csv").next(); 
    var csvData = Utilities.parseCsv(file.getBlob().getDataAsString()); 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var lastRow=sheet.getLastRow(); 
    sheet.getRange(lastRow, 1, csvData.length, csvData[0].length).setValues(csvData);
}
这是我得到的第一个错误:

无法检索下一个对象:迭代器已到达末尾。(第2行,文件“代码”)

我可以从第2行中删除
.next()
方法,然后我得到另一个错误:

TypeError:在对象FileIterator中找不到函数getBlob。(第3行,文件“代码”)


有人能确定这里可能出现了什么问题吗?

您需要提供电子表格Id和文件夹Id。此外,您可能希望更改创建的工作表/选项卡的工作表名称

function loadCSVFilesIntoSheets() { 
  var ss=SpreadsheetApp.openById('SpreadsheetId')
  var folder=DriveApp.getFolderById('folderId');
  var files=folder.getFilesByType(MimeType.CSV);
  while(files.hasNext()) {
    var file=files.next();
    var vA=Utilities.parseCsv(file.getBlob().getDataAsString());
    var ts=Utilities.formatDate(new Date(),Session.getScriptTimeZone(),"MM/dd/yy HH:mm:ss")
    var sh=ss.insertSheet(file.getName()+'-'+ts);
    sh.getRange(1,1,vA.length,vA[0].length).setValues(vA);
  }
}
获取电子表格Id:
https://docs.google.com/spreadsheets/d/SpreadsheetIdHere/edit#gid=1655026329

文件夹Id:
https://drive.google.com/drive/folders/folder 此处id


您遇到的第一个错误

无法检索下一个对象:迭代器已到达末尾。(第2行,文件“代码”)

发生的原因是显然没有任何名为
myCSVFile.csv的文件

var file = DriveApp.getFilesByName("myCSVFile.csv").next();
第二个错误发生的原因相同


首先,您应该仔细检查文件名是否正确,以及此文件是否与用于运行脚本的同一帐户拥有或共享。

感谢您的回复!!非常感谢。我按照您的建议插入了电子表格ID和文件夹ID。当我运行代码时,我得到以下错误:“Missing;before语句。(第10行,文件“code”)”,这是代码的最后一行。很抱歉,我修复了它。最后一分钟的变化,这很有效!非常感谢你!另一个问题:如何按名称而不是ID打开文件夹和文件。我尝试了open()而不是openByID(),但似乎不起作用-表示“找不到方法open()”。再次感谢你的帮助!Id在Google Drive中更有意义。事实上,在同一目录中找到同名文件并不罕见。DriveApp中按名称获取文件的唯一命令是Folder.getFileByName(),它返回集合的迭代器。如果您确实知道它是唯一具有该名称的文件,那么您可以使用`var file=Folder.getFilesByName().next()获取它;