Home > Software engineering >  How to update or overwrite existing sheets
How to update or overwrite existing sheets

Time:09-12

I have 99% of this done. What it is already doing is combining 6-7 CSV files from two folders and putting them all into one Google Sheet Workbook. However, these files are update daily so as you can imagine I need to update/overwrite the Google Sheet Workbook also. Just can't figure out how to implement it into my already working code. Appreciate the help in advance.

Do I update, delete sheet, etc? I will of course add a timing trigger at the end of it to work correctly.

Error: 10:13:16 AM Error
Exception: A sheet with the name "Employee Basic Summary with Supv.csv" already exists. Please enter another name. loadCSVFilesIntoSheets @ googlesheets.gs:10

ERROR IMAGE

CODE:

function loadCSVFilesIntoSheets() { 
  var ss=SpreadsheetApp.openById('CURRENTLY USING THIS FOR GOOGLE WORKBOOK 'ID' AND WORKING');
  var folder=DriveApp.getFolderById('1ST CSV FOLDER 'ID' WORKING FINE');
  var folder=DriveApp.getFolderById('2ND CSV FOLDER 'ID' WORKING FINE');
  var files=folder.getFilesByType(MimeType.CSV);
  while(files.hasNext()) {
    var file=files.next();
    var vA=Utilities.parseCsv(file.getBlob().getDataAsString());
    var sh=ss.insertSheet(file.getName());
    sh.getRange(1,1,vA.length,vA[0].length).setValues(vA);
  }
}

CodePudding user response:

You can try something like this:

var name = file.getName();
var sh = ss.getSheetByName(name) || ss.insertSheet(name);

CodePudding user response:

Try this:

function loadCSVFilesIntoSheets() {
  var ss = SpreadsheetApp.openById('ssid');
  const ids = ["id1", "id2"];
  ids.forEach(id => {
    let folder = DriveApp.getFolderById(id);
    var files = folder.getFilesByType(MimeType.CSV);
    while (files.hasNext()) {
      var file = files.next();
      let shts = ss.getSheets().map(sh => sh.getName());
      var vA = Utilities.parseCsv(file.getBlob().getDataAsString());
      let idx = shts.indexOf(file.getName());
      let sh;
      if (!~idx) {
        sh = ss.insertSheet(file.getName());
      } else {
        sh = ss.getSheetByName(shts[idx]);
        sh.clearContents();//Since this add's a legend to each entry with sheet name, and new Date() you could put a routine to remove some sections based upon date somewhere around here
      }
      sh.getRange(sh.getLastRow()   1, 1, 1, 2).setValues([["Sheet Name:", sh.getName(),new Date()]]);
      sh.getRange(sh.getLastRow()   1, 1, vA.length, vA[0].length).setValues(vA);
    }
  });
}
  • Related