0

先前的研究

请不要将此问题作为重复项关闭,因为我的问题涉及如何解决我收到的特定错误消息,而不是关于我的目标是否可以实现的一般问题——正如我的研究和以下产生的一些其他相关问题一样详细的,有问过。

相关问题以及它们为何不适用于此处

  1. 2012 年 7 月 27 日提出的这个问题不适用,因为它:(1)太旧(10 个月后,可能存在新的解决方案/方法)和(2)不处理我遇到的具体错误消息。
  2. 这个问题于 2012 年 10 月 12 日提出,由于类似的原因未能适用。
  3. 我的下面的代码是从这里复制的,它是从这里分叉的。这些可能是可行的解决方案,因为它们已在 Stack Overflow 上的其他问题/答案交换中被引用。

客观的

以编程方式,我试图:

  1. 搜索我的电子邮件收件箱。
  2. 查找 Excel (.xls) 文件附件。
  3. 将这些 .xls 文件附件上传到 Google Drive。
  4. 上传时,将 .xls 文件转换为 Google 电子表格文件格式。

问题

当我执行 processInbox() (此问题底部显示的代码)时,它失败并且我收到如下所示的错误消息。

错误信息

Request failed for returned code 403.
Server response:
{
   "error":{
      "errors":[
         {
            "domain":"usageLimits",
            "reason":"accessNotConfigured",
            "message":"AccessNotConfigured"
         }
      ],
      "code":403,
      "message":"AccessNotConfigured"
   }
}
(line 13, file "DriveUpload")

问题

我究竟做错了什么?我该如何解决?

例如,我是否需要在我的 API控制台中做一些特殊的事情来设置我的项目,比如访问 Google Drive 或其他东西?我错过了什么?

注意:我还没有在我的任何应用程序中成功实现 oAuth。

错误源

13号线

(这是错误消息引用的代码行。)

var uploadRequest = UrlFetchApp.fetch("https://www.googleapis.com/upload/drive/v2/files/?uploadType=media&convert=true&key="+key, params); // convert=true convert xls to google spreadsheet

代码

我正在使用的完整代码主体如下所示,供您参考。我提取了引发错误的“第 13 行”,并在上面突出显示,以帮助我们关注问题的近因。

DriveUpload.js

function uploadXls(file) {
  authorize();
  var key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // <-- developer key
  var metadata = { title: file.getName() }
  var params = {method:"post",
                oAuthServiceName: "drive",
                oAuthUseToken: "always",
                contentType: "application/vnd.ms-excel",
                contentLength: file.getBytes().length,
                payload: file.getBytes()
               };
  // convert=true convert xls to google spreadsheet
  var uploadRequest = UrlFetchApp.fetch("https://www.googleapis.com/upload/drive/v2/files/?uploadType=media&convert=true&key="+key, params);
  var uploadResponse = Utilities.jsonParse(uploadRequest.getContentText());
  var params = {method:"put",
                oAuthServiceName: "drive",
                oAuthUseToken: "always",
                contentType: "application/json",
                payload: Utilities.jsonStringify(metadata)
               };
  var metaRequest = UrlFetchApp.fetch("https://www.googleapis.com/drive/v2/files/"+uploadResponse.id+"?key="+key, params)
  return DocsList.getFileById(uploadResponse.id);
}

function authorize() {
  var oauthConfig = UrlFetchApp.addOAuthService("drive");
  var scope = "https://www.googleapis.com/auth/drive";
  oauthConfig.setConsumerKey("anonymous");
  oauthConfig.setConsumerSecret("anonymous");
  oauthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
  oauthConfig.setAuthorizationUrl("https://accounts.google.com/OAuthAuthorizeToken");    
  oauthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");  
}

function processInbox() {
  // get all threads in inbox
  var threads = GmailApp.getInboxThreads();
  for (var i = 0; i < threads.length; i++) {
    // get all messages in a given thread
    var messages = threads[i].getMessages();
    // iterate over each message
    for (var j = 0; j < messages.length; j++) {
      // log message subject
      var subject = messages[j].getSubject()
      //Logger.log(subject);
      if ( subject == "with xls attach" ){
        Logger.log(messages[j].getSubject());
        var attach = messages[j].getAttachments()[0];
        var name = attach.getName();
        var type = attach.getContentType();
        //var data = attach.getDataAsString();
        Logger.log( name + " " + type + " " );
        var file = uploadXls(attach);
        SpreadsheetApp.open(file);
      }
    }
  }
};
4

2 回答 2

1

Drive API 已经内置在 GAS 中:https ://developers.google.com/apps-script/reference/drive/

使用 DriveApp,您的问题就会消失;-)

于 2013-05-28T12:11:29.453 回答
0

这可能是一个临时解决方案

第 1 步:使用 Google 表单将数据收集到 Google 电子表格

第 2 步:将 Zoho Sheet 应用程序添加到您的 Google Drive

在 Zoho Sheet 中转到数据菜单 »链接外部数据 选择 CSV RSS/Atom 提要或 HTML 页面

您可以安排它在特定时间间隔更新

我喜欢的是 Zoho 中的 VBA 和宏 你也可以做数据透视图和表格

您可以将 Excel VBA 复制并粘贴到 Zoho 中!我有一个 Unpivot VBA,我将在我的表格数据集上运行,然后才能执行数据透视图

很难超越 Excel 的所有功能,我经常求助于熟悉的工具!如果我听到任何消息,我会发布它

祝你好运

于 2013-07-18T05:47:54.557 回答