将替换现有文件添加到GmailToDrive应用脚本-后续问题

这是相关帖子之外的另一个问题:Adding Replace Existing File to GmailToDrive App Script@Tanaike.回答

我正在尝试将上一篇文章中的代码与带有xlsx文件的Edit函数一起使用。一切似乎都工作正常,可以在其中抓取文件并将其保存,甚至可以将修改后的日期更新到Google驱动器文件夹中。但是,excel文件的内容与原始文件没有变化。我已启用云端硬盘API。这与xlsx文件类型兼容吗?实际需要更新文件中的内容而不仅仅是元数据吗?

// GLOBALS
//Array of file extension which you would like to extract to Drive
var fileTypesToExtract = ['xlsx'];
//Name of the folder in google drive i which files will be put
var folderName = 'YourfolderName;
//Name of the label which will be applied after processing the mail message
var labelName = 'Saved2';


function GmailToDrive(){
  //build query to search emails
  var query = '';
  //filename:jpg OR filename:tif OR filename:gif OR fileName:png OR filename:bmp OR filename:svg'; //'after:'+formattedDate+
  for(var i in fileTypesToExtract){
 query += (query === '' ?('filename:'+fileTypesToExtract[i]) : (' OR filename:'+fileTypesToExtract[i]));
  }
  query = 'in:inbox label:MyCustomLabel has:attachment ' + query;
  var threads = GmailApp.search(query);
  var label = getGmailLabel_(labelName);
  var parentFolder;
  if(threads.length > 0){
    parentFolder = getFolder_(folderName);
  }
  var root = DriveApp.getRootFolder();
  for(var i in threads){
    var mesgs = threads[i].getMessages();
 for(var j in mesgs){
      //get attachments
      var attachments = mesgs[j].getattachments();
      for(var k in attachments){
        var attachment = attachments[k];
        var isDefinedType = checkIfDefinedType_(attachment);
     if(!isDefinedType) continue;
        var attachmentBlob = attachment.copyBlob();
        var existingFile = DriveApp.getFilesByName(attachment.getName());
        if (existingFile.hasnext()) {
          var file = existingFile.next();
          Drive.Files.update({},file.getId(),attachmentBlob);
        } else { // Added
          var file = DriveApp.createFile(attachmentBlob); // Added
          parentFolder.addFile(file); // Added
          root.removeFile(file); // Added
        }
      }
 }
 threads[i].addLabel(label);
  }
}

//This function will get the parent folder in Google drive
function getFolder_(folderName){
  var folder;
  var fi = DriveApp.getFoldersByName(folderName);
  if(fi.hasnext()){
    folder = fi.next();
  }
  else{
    folder = DriveApp.createFolder(folderName);
  }
  return folder;
}

//getDate n days back
// n must be integer
function getDateNDaysBack_(n){
  n = parseInt(8);
  var date = new Date();
  date.setDate(date.getDate() - n);
  return Utilities.formatDate(date,Session.getScriptTimeZone(),'yyyy/MM/dd');
}

function getGmailLabel_(name){
  var label = GmailApp.getUserLabelByName(name);
  if(!label){
 label = GmailApp.createLabel(name);
  }
  return label;
}

//this function will check for filextension type.
// and return boolean
function checkIfDefinedType_(attachment){
  var fileName = attachment.getName();
  var temp = fileName.split('.');
  var fileExtension = temp[temp.length-1].toLowerCase();
  if(fileTypesToExtract.indexOf(fileExtension) !== -1) return true;
  else return false;
}
axingweb 回答:将替换现有文件添加到GmailToDrive应用脚本-后续问题

由于 .xlsx 是Excel格式,因此Apps Script无法修改其内容,因为它不是Google产品,就像试图使用Apps Script修改pdf ,但请放心,您可以将 .xlsx 文件转换为本地Google Spreadsheet格式,然后像处理普通Google Spreadsheet一样进行处理。此功能将为您完成转换:

// this Function will convert your .xlsx files into native Google Spreadsheet format
function convertExceltoGoogleSpreadsheet(parentFolder) {
  var files = parentFolder.getFiles();
  while(files.hasNext()){
    var file = files.next();
    // If the file contains the .xlsx extention in its name
    // then it will return an array with length 2
    var filename = file.getName().split(/.xlsx?/);
    if(filename.length > 1){
      // build info to create the new file with Google Spreadsheet format
      var resource = {
        title: filename[0],mimeType: MimeType.GOOGLE_SHEETS,parents: [{id: parentFolder.getId()}],};
      // Return the response after creating the file 
      return Drive.Files.insert(resource,file.getBlob());
    }   
  }
}

然后,在代码的这一部分中使用该函数:

...
        var attachmentBlob = attachment.copyBlob();
        var existingFile = DriveApp.getFilesByName(attachment.getName());
        if (existingFile.hasNext()) {
          var file = existingFile.next();
          Drive.Files.update({},file.getId(),attachmentBlob);
        } else { 
           var file = DriveApp.createFile(attachmentBlob)
           parentFolder.addFile(file); 
           root.removeFile(file); 
        }
        // Let's change the format and insert a "Hello world" message
        // ----START----
        var spreadSheetResponse = convertExceltoGoogleSpreadsheet(parentFolder);
        var spreadSheetId = spreadSheetResponse.getId()
        var sheet = SpreadsheetApp.openById(spreadSheetId).getSheets()[0];
        sheet.getRange(1,1).setValue("Hello world");
        // ----END----
...

通知

在我的代码中,我将 .xlsx 文件保留在云端硬盘中,如果要在将其转换为本地Google Spreadsheet格式后将其删除

文档

这就是我用来帮助您的:

本文链接:https://www.f2er.com/3121363.html

大家都在问