【问题标题】:Google Apps Script: trying to read a text file from Google Drive with .getAs(MimeType.PLAIN_TEXT)Google Apps 脚本:尝试使用 .getAs(MimeType.PLAIN_TEXT) 从 Google Drive 读取文本文件
【发布时间】:2021-01-25 13:05:03
【问题描述】:

我在尝试从 Google 云端硬盘读取 HTML 文件时遇到了麻烦。所以

我试过了:

  1. UrlFetchApp.fetch("https://googledrive.com/host/{folderID}/{filename}.html") 的帮助下获取文本,但它会获取一些 google css 文件而不是我的。

  2. 使用file.getAs(MimeType.PLAIN_TEXT)将文件从blob转换为文本字符串,它只输出“Blob”而没有任何文件内容。如何在没有任何特定库的情况下提取文件文本?

  var dApp = DriveApp;
  var folderIter = dApp.getFoldersByName("Лаборатории ФББ");
  var folder = folderIter.next();
  var filesIter = dApp.getFilesByName("Labs.html");

  var filelist = [];
  var propfiledate = 0;
  var propfilename;

  while(filesIter.hasNext()){

    var file = filesIter.next();
    var filename = file.getName();
    var fileurl = file.getUrl();
    var filedate = file.getDateCreated();

    if(filedate >= propfiledate){

      var propfiledate = filedate;
      var propfileurl = fileurl;
      var propfilename = filename;
      var propfile = file;

    }
  }

  Logger.log(propfile);

  // 1st try var myHtmlFile = UrlFetchApp.fetch(propfileurl);
  // 2nd try var myHtmlFile = propfile.getAs(MimeType.PLAIN_TEXT);
  // 3rd try var myHtmlFile = propfile.getBlob().text();
  
  var ss = SpreadsheetApp.create("test");
  SpreadsheetApp.setActiveSpreadsheet(ss);
  var sheet = ss.getActiveSheet();

  sheet.appendRow(myHtmlFile.toString().split("\n"));

  Logger.log(propfiledate);
  Logger.log(propfilename);
  Logger.log(propfileurl);
}

【问题讨论】:

  • 你明白google drive api是一个文件存储api。它不适用于读取文件的内容。您的代码似乎也在使用 Google sheet api 而不是 google drive api。
  • 您要读取的文件是什么? HTML 文件?
  • 是的,它是一个 HTML 文件
  • 实际上有一些 google sheet api 代码。那么有没有办法用驱动api读取内容呢?

标签: javascript google-apps-script google-drive-api google-sheets-api


【解决方案1】:

在虚拟 HTML 文件上使用 Apps 脚本,您可以获得其中的 HTML 数据。

使用 DriveApp getFilesByName(name) 方法通过名称检索文件。

这将返回一个FileIterator,因为可能有许多具有相似名称的文件。

然后你可以得到带有getBlob()的文件blob和带有getDataAsString()的字符串形式的blob数据

我已经设法通过使用前面提到的方法获取了 dummyHTML.html 文件数据:

function myFunction() {
  var files = DriveApp.getFilesByName("dummyHTML.html");
  while (files.hasNext()) {
    var file = files.next();
    Logger.log(file.getBlob().getDataAsString());
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    相关资源
    最近更新 更多