2016-12-28 12 views
3

私には2つの方法があります。 1つはGoogleスプレッドシートからデータを読み込み、もう1つは1つのセルに値を追加することです(ただし、実際は最後の行にデータを追加しますが、最初は1レコードから開始します)。 btnLoadAttendanceは完全に機能しますが、「UpdateValuesResponse result2 = update.Execute();」の中のtextbox1.Textに何かを入力すると、いくつかの行をコメントについて語ること「Request had insufficient authentication scopes [403] when update cell spreadsheet」私はここで答えを見つけ要求の認証スコープが不十分です。 [403] c#

Request had insufficient authentication scopes. [403] 

:私はそうのようなエラーが発生します。私はその行にコメントしてみましたが、それは私のためには機能しません。私はまだ同じエラーが発生します。

private void btnLoadAttendance_Click(object sender, EventArgs e) 
    { 
      UserCredential credential; 

      using (var stream = 
       new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) 
      { 
       string credPath = System.Environment.GetFolderPath(
        System.Environment.SpecialFolder.Personal); 
       credPath = Path.Combine(credPath, ".credentials/sheets.googleapis.com-dotnet-quickstart.json"); 

       credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets, 
        Scopes, 
        "user", 
        CancellationToken.None, 
        new FileDataStore(credPath, true)).Result; 
       Console.WriteLine("Credential file saved to: " + credPath); 
      } 

      var service = new SheetsService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credential, 
       ApplicationName = ApplicationName, 
      }); 

      String spreadsheetId = "1b64mhUgdeRzGyJF4NfAPhkFY7br3c0o9rJ9mMnDBTR8"; 
      String range = "Sheet1!A2:D"; 
      SpreadsheetsResource.ValuesResource.GetRequest request = 
        service.Spreadsheets.Values.Get(spreadsheetId, range); 

      ValueRange response = request.Execute(); 
      IList<IList<Object>> values = response.Values; 
      if (values != null && values.Count > 0) 
      { 
       foreach (var x in values) 
       { 

        dgvAttendance.Rows.Add(x[0], x[1], x[2], x[3]); 
       } 
      } 
      else 
      { 
       MessageBox.Show("No data found."); 
      } 
     } 

WORKING

private void btnAddData_Click(object sender, System.EventArgs e) 
     { 
      string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly }; 
      UserCredential credential; 

      using (var stream = 
       new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) 
      { 
       string credPath = System.Environment.GetFolderPath(
        System.Environment.SpecialFolder.Personal); 
       credPath = Path.Combine(credPath, ".credentials/sheets.googleapis.com-dotnet-quickstart.json"); 

       credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets, 
        Scopes, 
        "user", 
        CancellationToken.None, 
        new FileDataStore(credPath, true)).Result; 
       Console.WriteLine("Credential file saved to: " + credPath); 
      } 

      var service = new SheetsService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credential, 
       ApplicationName = ApplicationName, 
      }); 

      String spreadsheetId = "1b64mhUgdeRzGyJF4NfAPhkFY7br3c0o9rJ9mMnDBTR8/edit"; 
      String range = "Sheet1!F5"; // update the F5 cell 

      //ValueRange response = request.Execute(); 
      ValueRange valueRange = new ValueRange(); 
      valueRange.MajorDimension = "COLUMNS"; //Rows or Columns 

      var oblist = new List<object>() { textBox1.Text }; 
      valueRange.Values = new List<IList<object>> { oblist }; 

      SpreadsheetsResource.ValuesResource.UpdateRequest update = 
       service.Spreadsheets.Values.Update(valueRange, spreadsheetId, range); 
      update.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.RAW; 
      UpdateValuesResponse result2 = update.Execute(); 
     } 

あなたの助けが動作していない非常に高く評価されています。以下は、私のコードです。

答えて

2

私はちょうど私が

static string[] Scopes = { SheetsService.Scope.Spreadsheets }; 

string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly }; 

を変更する必要があり、それは一日かかりました!

+0

あなたも私の人生を保存しています。 –

2
  1. まず、c:\ user \ Documents.credentialsに保存されている資格情報ファイル.credentials/sheets.googleapis.com-dotnet-quickstart.jsonを削除します。コードの実行後

    static string[] Scopes = { SheetsService.Scope.Spreadsheets };

  2. から
  3. 変更

    string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly }; からGoogleスプレッドシートからセルを読み出すために使用されるスコープの変数は、APIは、再度認証されますし、問題が解決されます。

関連する問題