首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >上传.xls文件并通过GAS转换到Google电子表格时出错

上传.xls文件并通过GAS转换到Google电子表格时出错
EN

Stack Overflow用户
提问于 2013-05-28 08:13:25
回答 2查看 2.8K关注 0票数 0

先验研究

请不要重复这一问题,因为我的问题涉及如何解决我所收到的具体错误信息,而不是关于我的目标是否可以实现的一般性问题--正如我的研究和下文详细提出的其他相关问题所提出的那样。

相关问题及其不适用于此的原因

  1. 2012年7月27日提出的问题不适用,因为它是:(1)太老了(10个月后,可能存在新的解决方案/方法),(2)不处理我正在经历的具体错误信息。
  2. 2012年12月10日提出的问题由于类似的原因而没有提出申请。
  3. 下面的代码是从这里复制的,后者是从这里中分叉的。这些可能是工作解决方案,因为它们是从堆栈溢出的其他问答交换中引用的。

目标

通过编程,我试图:

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

问题

当我执行processInbox() (在这个问题的底部显示的代码)时,它会失败,并得到如下所示的错误消息。

错误消息

代码语言:javascript
运行
复制
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或其他什么?我遗漏了什么?

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

误差源

第13行

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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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);
      }
    }
  }
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-28 12:11:29

驱动API已经内置于GAS中:https://developers.google.com/apps-script/reference/drive/

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

票数 1
EN

Stack Overflow用户

发布于 2013-07-18 05:47:54

这也许是个临时解决方案

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

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

在数据菜单中,链接外部数据,选择CSV /Atom Feed或HTML页面

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

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

您可以复制和粘贴Excel到Zoho!我有一个Unpivot,在执行PivotChart之前,我将在我的表格数据集上运行它

要克服Excel的所有功能是很困难的,而且我经常依赖于熟悉的工具!如果我听说了什么,我会发出去的

祝好运

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16787054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档