使用Google Apps脚本将.CSV文件数据复制到Google工作表
我需要遍历源文件夹中的每个.CSV文件,并将每个文件中的数据复制到一个GoogleSheets文件中的新工作表/选项卡中。我已经找到了一些与这个主题相关的答案,但是两个代码集都出现了错误。以下是我试图从中构建解决方案的代码:使用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
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()获取它;