首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Google脚本将多个CSV文件导入Google工作表

使用Google脚本将多个CSV文件导入Google工作表
EN

Stack Overflow用户
提问于 2020-11-03 09:31:42
回答 1查看 3.7K关注 0票数 0

所以我正在为我的家庭管理做一个个人项目。我想自动打开我的扩展表(adminSheet.gs)导入.csv文件。手动完成此操作是可能的,但我希望将其自动化,因为我必须导入30+ .csv文件,而且还需要更多的文件。我已经启用了google应用程序脚本(GAS)。不管汽油对我来说是什么新鲜事,我对Javascript还是有点满意,不过自从我上大学以来已经有一段时间了。希望你能帮我一把!

以下是事实。

我有多个.csv文件,都有不同的名称。它们位于名为CSVfolder的同一个文件夹中。此文件夹位于Google的主文件夹MAINfolder中。它们由分隔符分隔;(分号)。CSV文件具有相同的数据结构,每个.csv文件的第一行是相同的。第一行已经放在工作表adminSheet.gs中,充当标题行,名为HEADER。因此,在导入每个.csv文件时,需要删除第一行。

我将在.csv中上传新的CSVfolder文件。这些文件名遵循以下命名结构。ID_01-09-2020_30-09-2020.csv或ID_01-10-2020_31-10-2020.csv。ID后面跟着更改的日期。( .csv数据将是这段时间的数据。不会发生重叠或重复的数据,因为我将手动选择数据集)。然而,这将使它当然非常整洁。

当我打开adminSheet.gs (位于MAINfolder中)时,它需要自动识别任何新的.csv文件,并将其与所有其他(以前导入的) .csv数据合并到现有的adminSheet.gs中。新的.csv文件应该合并在固定的标题行标题之下,在以前导入的.csv文件之上。(这也可以解释为:在标头和adminSheet.gs中的数据之间)(这也可以解释为:来自.csv的新数据应该在adminSheet.gs中的旧数据之上)。

谷歌应用程序脚本能做什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-03 18:02:47

下面是以下代码的工作方式:

  • 从csv文件中获取数据,因为数组
  • 在表中的标题行
  • 设置了数组后将csv文件移动到存档文件夹中,这样就不会再次导入
  • ,然后移动到下一个文件,直到没有更多的文件要导入H 210F 211

您将需要为csv文件创建一个存档文件夹,以便在导入这些文件后存储在其中。为此,我通常在包含csv文件夹的文件夹中创建一个。

在代码中,您需要提供存档文件夹和根文件夹(包含CSV文件夹的文件夹)的文件夹In和电子表格中目标表的名称。这些都可以在代码中的前四个变量中设置。(我已经根据您提供的信息将csvFolderName设置为“CSVfolder”)。

保存此代码后,在其上创建一个触发器以在打开时运行。

以下是代码:

代码语言:javascript
运行
复制
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,';');

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64660105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档