4

ich in der Lage bin abzurufen und zu aktualisieren Werte in Google Sheets den Code unter Verwendung von:Erstellen Sie ein neues Blatt in Google Blatt C#

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(); 
     } 

Meine Frage ist, wie kann ich ein neues Blatt in der Google-Tabelle erstellen, die ich verwende derzeit. Ich dachte, dass alles, was ich tun müssen, um den

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

zu

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

wird ersetzen, aber anscheinend ist es falsch ...

Ich kann nicht verstehen, wie die Anweisungen in dem zur Umsetzung Dokumentation unter Method: spreadsheets.create

Was macht der JSon mit, wie ich in C# codieren werde? Ich schätze die Hilfe sehr.

UPDATE Ich fand hier das, aber es ist nicht vollständig, da es immer noch mir einen Fehler von

Zusätzliche Informationen geben: Objektverweis nicht auf eine Instanz eines Objekts festgelegt.

Dies ist der aktualisierte Code:

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(); 
     } 

Antwort

2

Es ist eine Methode, in der Client-Bibliothek für erstellen Sie es nur das Objekt neues Blatt müssen passieren. Vergessen Sie nicht die Eigenschaften zu instanziiert, bevor die Zuordnung der Titel (Zeile 2 unten)

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(); 

Anmerkung: Ich stimme mit Ihnen überein, dass Dokumentationsseite nutzlos ist.

+0

Ich denke, es ist immer noch unvollständig DalmTo, obwohl es mir keine Fehler gibt, fügt es das neue Blatt der Tabelle nicht hinzu. Bitte beachten Sie die Änderungen, die ich in meiner Frage vorgenommen habe. – Ibanez1408

+0

Ich glaube nicht, dass ich komplett verstehe, was Sie zu tun versuchen. Haben Sie https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.sheets/copyTo ausprobiert? – DaImTo

0

Ihre aktualisierte Lösung funktioniert einwandfrei. Aber ich hatte Probleme mit "Request hatte unzureichende Authentifizierungsbereiche", da gespeicherte Anmeldeinformationen Lesezugriff erlaubt. Ich hatte das Problem durch Löschen der Benutzeranmeldeinformationen (zuvor in /Users/IhrBenutzername/.credentials/sheets.googleapis.com-projectName/*) gelöst und die Anwendung erneut ausgeführt, um neue Anmeldeinformationen zu erhalten

Verwandte Themen