【问题标题】:Save a excel file as gsheet将excel文件另存为gsheet
【发布时间】:2020-05-06 11:29:24
【问题描述】:

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

【问题讨论】:

  • 到目前为止,您编写了哪些代码来实现这一目标?
  • 你需要代码@ross 吗?也许,我可以私下向您发送 vba、python 和 google 脚本中的所有交互和所有代码。

标签: excel google-apps-script gmail-api google-sheets-api xlsx


【解决方案1】:

您可以使用 Google Drive 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

【讨论】:

  • 非常感谢@ziganotschka。根据您的回答,我找到了一些商品示例的链接:labnol.org/code/…
【解决方案2】:

这是解决方案的代码:

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();

      }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多