将 excel 文件另存为 gsheet

Save a excel file as gsheet

我想自动化一个流程,我正在使用 python、selenium 和 vba。 我的流程从使用 python 和 selenium 从 SQL 服务器下载文件开始,然后使用 vba,我转换文件并应用了很多公式。完成后,我使用 google 文件流将文件以 xlsx 格式保存在 google 驱动器文件夹中。当文件保存在文件夹中时,使用 google 脚本我发送一封包含文件 url 的邮件。所有这一切的最终目标是,用户将在 google 驱动器文件夹中对 de xlsx 进行观察,但在这种格式下,我无法以协作方式更改文件。 有一种方法可以使用 MS excel 以 gsheet 格式保存 excel 文件,或者自动将 xlsx 转换为 gsheet,然后发送包含新文件 url 的电子邮件? 您好!

您可以使用 Google 驱动器 API

将 MS Excel 文件自动转换为 Google 电子表格

查看 Import to Google Docs types 下的示例。

您只需将 mimeType 从 'text/csv' 更改为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 或类似类型,具体取决于 Excel 文件的 extension

PS:由于您使用 google-apps-script 标记了您的问题:在 Google Apps 脚本中,您可以按 here.

进行转换

这是包含解决方案的代码:

function convertExceltoGoogleSpreadsheet() {


var folder = DriveApp.getFolderById('put the id's folder here')
var excelFile = folder.getFilesByType(MimeType.MICROSOFT_EXCEL).next();
var fileId = excelFile.getId();
var folderId = Drive.Files.get(fileId).parents[0].id;
var blob = excelFile.getBlob();
var resource = {
  title: excelFile.getName(),
  mimeType: MimeType.GOOGLE_SHEETS,
  parents: [{id: folderId}],
};

Drive.Files.insert(resource, blob);
}

稍后,您需要使用此脚本删除 excel 个文件:

   function remove(){
   var folder = DriveApp.getFolderById('put you folder's id here');
   var files = folder.getFilesByType(MimeType.MICROSOFT_EXCEL);;
   while (files.hasNext()){
   var file = files.next();
   folder.removeFile(file);
   }

第三步放通知:

     function checkForChangedFiles() {

     // folder
     var folderID = '"' + "folder's id" + '"';

     // email configuration
     var emailFromName ="emailname";
     var emailSubject = "emailsubject";
     var emailBody = "<b><br>bodyemail:<br></b>" +
     "line1<br>" +
     "line2<br>"+
     "line3<br>"+
     "line4<br>";
      var emailFooter = "footer";

      var folderSearch = folderID + " " + "in parents";
      var ss = SpreadsheetApp.getActiveSpreadsheet(); 
      var sheet = ss.getActiveSheet();
      var email = sheet.getRange("put the cell with the email's values").getValue();
      var timezone = ss.getSpreadsheetTimeZone();
      var today     = new Date();
      var time = new Date(today.getTime() - 1 * 30 * 1000);  // 30 seconds
      var startTime = time.toISOString();
      var search = '(trashed = true or trashed = false) and '+ folderSearch +' and (modifiedDate > "' + startTime + '")';   

      var files  = DriveApp.searchFiles(search);
      var row = "", count=0;

      while( files.hasNext() ) {

      var file = files.next();
      var fileName = file.getName();
      var fileURL  = file.getUrl();
      var lastUpdated =  Utilities.formatDate(file.getLastUpdated(), timezone, "dd-MM-yyyy HH:mm");
      var dateCreated =  Utilities.formatDate(file.getDateCreated(), timezone, "dd-MM-yyyy HH:mm")

      row += "<li>" + lastUpdated + " <a href='" + fileURL + "'>" + fileName + "</a></li>";

      sheet.appendRow([dateCreated, lastUpdated, fileName, fileURL]);

      count++;
      }


      if (row !== "") {

      row = "<p>" + count + "  New File:</p><ol>" + row + "</ol>";
      row +=  emailBody+"<br>" + "<br><small> "+emailFooter+" </a>.</small>";     
      MailApp.sendEmail(email, emailSubject, "", {name: emailFromName, htmlBody: row});
      } 

最后我们把它们放在一起:

      function doall(){
      convertExceltoGoogleSpreadsheet();
      Utilities.sleep(10000);
      remove();
      Utilities.sleep(10000);
      checkForChangedFiles();

      }