亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Google Apps 腳本將多個 CSV 文件導入 Google Sheets

使用 Google Apps 腳本將多個 CSV 文件導入 Google Sheets

當年話下 2023-07-06 17:00:34
所以我正在為我的家庭管理做一個個人項目。我想在打開電子表格 (adminSheet.gs) 時自動導入 .csv 文件??梢允謩訄绦写瞬僮?,但我希望自動執行此操作,因為我必須導入 30 多個 .csv 文件,而且還會有更多文件。我已啟用谷歌應用程序腳本(GAS)。然而,GAS 對我來說是新的,我對 Javascript 有點熟悉,但是自從我上大學以來已經有一段時間了..我希望你能幫助我!以下是事實。我有多個 .csv 文件,每個文件都有不同的名稱。它們位于名為 CSVfolder 的同一文件夾中。此文件夾位于 Google 云端硬盤中的主文件夾 MAINfolder 中。它們由分隔符分隔;(分號)。CSV 文件具有相同的數據結構,并且每個 .csv 文件的第一行相同。第一行已放入工作表 adminSheet.gs 中,作為標題行,稱為 HEADER。因此,導入時需要刪除每個 .csv 文件的第一行。我將在 CSV 文件夾中上傳新的 .csv 文件。這些文件名遵循以下命名結構。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 文件應合并到固定標題行 HEADER 下方和先前導入的 .csv 文件上方。(這也可以解釋為:在 HEADER 和 adminSheet.gs 中已有的數據之間)(這也可以解釋為:.csv 中的新數據應位于 adminSheet.gs 中已有的舊數據之上)。什么 Google Apps 腳本可以做到這一點?
查看完整描述

1 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

以下代碼的工作原理如下:

  • 從 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,';');


查看完整回答
反對 回復 2023-07-06
  • 1 回答
  • 0 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號