以下是以下代码的工作原理:
- 从 csv 文件中获取数据作为数组
- 在标题行之后插入多行
- 在工作表中设置数组
- 导入后将 csv 文件移动到存档文件夹,因此不会再次导入
- 然后移动到下一个文件,直到没有要导入的文件
导入后,您需要为要存储的 csv 文件创建一个存档文件夹。为此,我通常在包含 csv 文件夹的文件夹中创建一个。
在代码中,您需要提供存档文件夹和根文件夹(包含 CSV 文件夹的文件夹)的文件夹 ID,以及电子表格中目标工作表的名称。这些都可以在代码的前四个变量中设置。(我已经csvFolderName根据您上面提供的信息设置为“CSVfolder”。
保存此代码后,在其上创建一个触发器以在打开时运行。
这是代码:
function importCSVFiles()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
const csvFolderName = 'CSVfolder'; // Folder containing csv files and the Archive folder
const rootFolderId = 'id_of_folder_containing_CSVfolder'; // Root folder
const archiveFolderId = 'id_of_archiveFolder'; // Archive Folder
const destinationSheetName = 'name_of_destination_sheet_in_spreadsheet'; // destination sheet in spreadsheet
const root = DriveApp.getFolderById(rootFolderId);
const archiveFolder = DriveApp.getFolderById(archiveFolderId);
const fileName =/ *.csv/;
var rootFolders = root.getFolders();
const sheet = ss.getSheetByName(destinationSheetName);
var csvArray = [];
while (rootFolders.hasNext())
{
var folder = rootFolders.next ();
Logger.log('folder.getName()',folder.getName());
if (folder.getName() === csvFolderName)
{
importCSV(folder);
}
else
{
var csvFolder = folder.getFoldersByName(csvFolderName);
while (csvFolder.hasNext())
{
importCSV(csvFolder.next());
}
}
}
function importCSV(folder)
{
var files = folder.getFiles();
while (files.hasNext())
{
var file = files.next();
Logger.log('file.getName()',file.getName());
csvArray = file.getBlob().getDataAsString("UTF-8");
csvArray = Utilities.parseCsv(csvArray);
csvArray.shift();
sheet.insertRowsAfter(1,csvArray.length);
sheet.getRange (2,1,csvArray.length,csvArray[0].length).setValues(csvArray);
file.moveTo(archiveFolder);
}
}
}
如果您似乎遇到了分隔符问题,您可能需要将上面的代码行替换csvArray = Utilities.parseCsv(csvArray);为csvArray = Utilities.parseCsv(csvArray,';');