4

私が取得することですし、更新値cをGoogleスプレッドシートに新しいシートを作成します。以下のコードを使用してGoogleシートに#

private void btnUpdate_Click(object sender, EventArgs e) 
     { 
      if (cbYards.Text == "Select Yard") 
      { 
       MessageBox.Show(@"Please select a yard."); 
       return; 
      } 
      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, 
      }); 

      IList<IList<Object>> list = new List<IList<Object>>() { }; 
      for (var i = 0; i < dataGridView1.Rows.Count - 1; i++) 
      { 
       var formula = "=IFERROR(VLOOKUP(B"+(i+2)+",Names!$A$2:$B,2,FALSE),\"No Record\")"; 
       List<object> lists = new List<object>() { formula, dataGridView1.Rows[i].Cells[0].Value.ToString(), 
        dataGridView1.Rows[i].Cells[1].Value.ToString() }; 
       list.Add(lists); 
      } 

      var range = cbYards.Text+"!A2:C"; 
      ValueRange VRange = new ValueRange(); 
      VRange.Range = range; 
      VRange.Values = list; 

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

      SpreadsheetsResource.ValuesResource.UpdateRequest upd = service.Spreadsheets.Values.Update(VRange, spreadsheetId, range); 
      upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED; 
      UpdateValuesResponse response = upd.Execute(); 
     } 

私の質問は、私は私Googleスプレッドシートに新しいシートを作成する方法であります現在使用中です。私は私がする必要があるすべては

SpreadsheetsResource.ValuesResource.UpdateRequest upd = service.Spreadsheets.Values.Update(VRange, spreadsheetId, range); 

SpreadsheetsResource.ValuesResource.UpdateRequest upd = service.Spreadsheets.create(); 

を交換していると考えどうやらそれは私が指示を実装する方法を理解することはできません

...間違っていますdocumentation at Method: spreadsheets.create

JSonはどのようにC#でコーディングするのですか?本当に助けに感謝します。

UPDATE は、私はここでこれを見つけたが、それはまだ私に

追加情報のエラーを与えているので、それは完全なものではありません:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

これは、更新されたコードです:あなたはちょうどそれを新しいシートオブジェクトを渡す必要があります作成するためのクライアントライブラリのメソッドがあり

private void button1_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 sheetName = string.Format("{0} - {1}-{2}", cbYards.Text, fromDate.Value.ToShortDateString(), toDate.Value.ToShortDateString()); 
      var myNewSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet(); 
      myNewSheet.Properties = new SpreadsheetProperties(); 
      myNewSheet.Properties.Title = sheetName; 
      var newSheet = service.Spreadsheets.Create(myNewSheet).Execute(); 
     } 

答えて

2

。タイトル(下の行2)

var myNewSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet(); 
myNewSheet.Properties = new SpreadsheetProperties(); 
myNewSheet.Properties.Title = "Daimtos awsom sheet"; 
var awsomNewSheet= service.Spreadsheets.Create(myNewSheet).Execute(); 

注意を割り当てる前に、プロパティをインスタンス化することを忘れないでください:私は、そのドキュメントページは無用であるあなたに同意します。

+0

まだ不完全だと思いますDalmToは、エラーを表示するわけではありませんが、新しいシートをスプレッドシートに追加しないためです。私の質問で編集した内容をご覧ください。 – Ibanez1408

+0

私はあなたがしたいことを完全に理解しているとは思わない。 https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.sheets/copyToを試したことがありますか – DaImTo

0

更新されたソリューションは完全に機能します。しかし、保存された資格情報には読み取り専用アクセスが許可されていたため、「要求には認証スコープが不十分でした」という問題がありました。 ユーザー資格情報(以前に/Users/yourUserName/.credentials/sheets.googleapis.com-projectName/*に保存されていた)を削除し、アプリケーションを再度実行して新しい資格情報を取得することで問題を解決しました

関連する問題