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



前期研究

请不要关闭这个问题作为一个重复,因为我的问题是如何解决我收到的具体错误信息,而不是我的目标是否可以实现的一般问题-作为一些其他相关问题,由我的研究产生,下面详细说明,已经问过。

相关问题及为什么不适用于这里

  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 Spreadsheet文件格式。

当我执行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);
      }
    }
  }
};

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

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

这可能是临时解决方案

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

步骤2:添加Zoho表应用程序到您的谷歌驱动器

在Zoho工作表中转到数据菜单»链接外部数据选择CSVRSS/Atom提要或HTML页面

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

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

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

很难打败Excel的所有功能,我经常依赖于熟悉的工具!如果我听到什么消息,我会贴出来的 好运

相关内容

  • 没有找到相关文章

最新更新