0

先行研究

私の質問は、受信した特定のエラーメッセージを解決する方法を扱っているため、この質問を重複として閉じないでください。私の目的が達成可能かどうかの一般的な質問ではありません。詳細、質問しました。

関連する質問と、それらがここに当てはまらない理由

  1. 2012 年 7 月 27 日に尋ねたこの質問は、(1) 古すぎる (10 か月後には新しい解決策/方法が存在する可能性がある)、(2) 私が経験している特定のエラー メッセージを扱っていないため、該当しません。
  2. 2012 年 10 月 12 日に尋ねたこの質問は、同様の理由で当てはまりません。
  3. 以下のコードは here からコピーされ、hereからフォークされました。これらは、スタック オーバーフローの他の質問/回答交換からそのように参照されているため、おそらく実用的なソリューションです。

目的

プログラム的に、私はしようとしています:

  1. メールの受信トレイを検索します。
  2. Excel (.xls) 添付ファイルを検索します。
  3. これらの .xls ファイルの添付ファイルを Google ドライブにアップロードします。
  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")

質問

私は何を間違っていますか?どうすれば修正できますか?たとえば、Google ドライブなどにアクセスするためにプロジェクトをセットアップするのに関連して、APIコンソール

で何か特別なことをする必要がありますか? 私は何が欠けていますか? 注: どのアプリケーションにもまだ 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

ドライブ 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 ドライブに追加する

Zoho シートで データ メニューに移動 »外部データをリンク CSV RSS/Atom フィードまたは HTML ページのいずれかを選択

特定の時間間隔で更新するようにスケジュールできます

私が気に入っているのは、Zoho の VBA とマクロです。ピボット チャートとテーブルも作成できます。

Excel VBA をコピーして Zoho に貼り付けることができます。ピボットグラフを実行する前に、表形式のデータセットで実行する Unpivot VBA があります。

Excel のすべての機能に勝るものはなく、使い慣れたツールに頼ることがよくあります。何か聞いたら載せます

幸運を

于 2013-07-18T05:47:54.557 に答える