应用程序脚本每小时清除和刷新需要帮助

问题描述 投票:0回答:1

我对尝试通过应用程序脚本进行编码是全新的,我做了一些似乎主要完成我需要的事情,但是它会运行,但有时会执行大量失败的触发器。 我的目标是让这张 Google 表格每小时清理一次,然后从 Google Drive 文件夹中提取数据,稍后将 Google Drive 连接到 FTP 客户端,该文件夹中将放置一个文件。

我已经花了几周时间在这上面,它似乎“大部分”都做得很好,但我会完成并关闭它。 当我潜伏和学习时,这个社区对我帮助很大。 任何有关如何完成此任务的建议都会有所帮助。

目标是完全清除工作表,然后每小时导入一次文件。如果可以按时完成,那就太好了,但没有必要。我还没有看过那个编码,到目前为止(我认为)它应该每 2 小时运行一次,因为我现在已经设置好了。

缺少的顶行是

const FOLDER_ID - “链接到导入文件所在的 google 文件夹”,这 100% 有效

无数的版本和搜索来找到可靠的东西。 我以前从未使用过这个,所以我主要复制我发现的内容。

const FOLDER_ID = "link to the folder on google drive"

// run the two functions below as the MAIN command
function Main() {
  clearTheSheet();
  ImportCSV();
}
//clear the entire sheet before uploading new folder
function clearTheSheet() {
  var app = SpreadsheetApp;
  var activeSheet = app.getActiveSpreadsheet().getActiveSheet();
  activeSheet.getRange("A2:T99999").clearContent();

//one second delay
  Utilities.sleep(6000);}

//import the entire csv file from google drive and then delete the file
function ImportCSV() {
  Utilities.sleep(6000);

  let folder = DriveApp.getFolderById(FOLDER_ID) ;
  let files = folder.getFiles() ;
  let data = [];

  while (files.hasNext()) {
    let file = files.next();
    let fileType = file.getMimeType();
    if (fileType == "text/csv") {
        let csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
        csvData.splice(0,1);
        csvData = csvData.filter(x => x[0] != '');
        csvData.forEach(x => data.push(x));
        file.setTrashed(true);
    }
  }

  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getSheetByName("NAME OF TAB");
  sheet.getRange(sheet.getLastRow()+1,1,data.length,data[0].length).setValues(data);
  sheet.getRange(2,1,sheet.getLastRow()-1,sheet.getLastColumn()).sort({column: 3, ascending: true});
}
google-apps-script
1个回答
0
投票

您可以使用方法链接简化代码,如下所示:

function test() {
  importCsvFiles_(FOLDER_ID, 'NAME OF TAB');
}

function importCsvFiles_(folderId, sheetName) {
  const sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
  if (!sheet) throw new Error(`Cannot find sheet '${sheetName}'.`);
  if (sheet.getFrozenRows()) sheet.setFrozenRows(1);
  sheet.getDataRange().offset(1, 0).clearContent();
  const files = DriveApp.getFolderById(folderId).getFiles();
  while (files.hasNext()) {
    const file = files.next();
    if (file.getMimeType() === 'text/csv') {
      const csvData = Utilities.parseCsv(file.getBlob().getDataAsString())
        .slice(1)
        .filter(row => row.join(''));
      appendRows_(sheet, csvData);
      file.setTrashed(true);
    }
  }
  sheet.sort(3);
}
© www.soinside.com 2019 - 2024. All rights reserved.