it-swarm.com.de

Aktualisieren Sie eine Zelle mit C # und Sheets API v4

Hat jemand ein gutes C # -Beispiel zum Aktualisieren einer Zelle mit der v4-API?

Ich habe das Beispiel für die Zellenwerte c # von der Entwickler-Website, die mit Google Sheets API v4 arbeitet. Ich versuche, das Beispiel zu ändern, um eine Zelle mit dem Wert "Tom" zu aktualisieren. Ich halte die Einstellungen für SpreadSheets.Values.Update fest. 

using Google.Apis.Auth.OAuth2;
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace GoogleSheetsAPI4_v1console
    {
    class Program
    {
        // If modifying these scopes, delete your previously saved credentials
        // at ~/.credentials/sheets.googleapis.com-dotnet-quickstart.json
        static string[] Scopes = { SheetsService.Scope.Spreadsheet };
        static string ApplicationName = "TestSpreadsheet";

        static void Main(string[] args)
        {
            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);
            }

            // Create Google Sheets API service.
            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });


            // Define request parameters.
            String spreadsheetId = "<<myspreadsheetid>>";
            String range = "Sheet1!D5";  // single cell D5
            String myNewCellValue = "Tom";
            SpreadsheetsResource.ValuesResource.UpdateRequest request = service.Spreadsheets.Values.Update(<<what goes here?>>, spreadsheetId, range);

            // Prints the names and majors of students in a sample spreadsheet:
            // https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
            ValueRange response = request.Execute();
            IList<IList<Object>> values = response.Values;
            Console.WriteLine(values);
        }
    }
}
14
Slim

Hier ist ein Arbeitsbeispiel, in dem eine Konsole zum Schreiben einer einzelnen Zelle verwendet wird. Vielen Dank an alle, die geholfen haben !!

using Google.Apis.Auth.OAuth2;
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace GoogleSheetsAPI4_v1console
{
    class Program
    {
        // If modifying these scopes, delete your previously saved credentials
        // at ~/.credentials/sheets.googleapis.com-dotnet-quickstart.json
        static string[] Scopes = { SheetsService.Scope.Spreadsheets}; // static string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly };
        static string ApplicationName = "<MYSpreadsheet>";

        static void Main(string[] args)
        {
            UserCredential credential;

            using (var stream =
                new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
            {
                string credPath = System.Environment.GetFolderPath(
                    System.Environment.SpecialFolder.Personal);


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

            // Create Google Sheets API service.
            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });



            String spreadsheetId2 = "<my spreadsheet ID>";
            String range2 = "<my page name>!F5";  // update cell F5 
            ValueRange valueRange = new ValueRange();
            valueRange.MajorDimension = "COLUMNS";//"ROWS";//COLUMNS

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

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

            Console.WriteLine("done!");

        }
    }
}
22
Slim

Erstellen Sie zunächst ein Wertebereichsobjekt wie unten angegeben: 

Google.Apis.Sheets.v4.Data.ValueRange requestBody = new Google.Apis.Sheets.v4.Data.ValueRange();
0
Shravan Ravva

Ich denke, Sie haben nur Zugriff auf Ihr Blatt, weil ich Folgendes sehen kann: 

statischer String [] Scopes = {SheetsService.Scope.SpreadsheetsReadonly};

Versuchen Sie, "SheetsService.Scope.SpreadsheetsReadonly" durch "SheetsService.Scope.Spreadsheet" oder durch "SheetsService.Scope.Drive" zu ändern. Vielleicht ist es eine andere Syntax ... Wenn es kein Autorisierungsproblem ist, kann ich Ihnen nicht helfen, sorry ... Viel Glück, mein Freund.

Ps: Bei Xcode (object-c) müssen Sie den Simulator nach der Änderung des Gültigkeitsbereichs zurücksetzen. Für dich (C #) weiß ich nicht.

0
G. Tommy

Die Datei "Google.Apis.Sheets.v4.SpreadsheetsResource.cs" enthält den Fehler: URL " https://sheets.googleapis.com/v4/spreadsheets/ {spreadsheetId}/values ​​/ {range}" nicht "? valueInputOption = RAW". Verwenden Sie diesen Code vorübergehend:

String spreadsheetId = "rihhgfkjhgufhgHUGUJKGHUItgUIGUIgui";
String range = "Config!A2:E";
ValueRange valueRange=new ValueRange();
valueRange.Range = range;
valueRange.MajorDimension = "ROWS";//"ROWS";//COLUMNS
var oblist=new List<object>(){12,3,4,5u,6};
valueRange.Values = new List<IList<object>> {oblist};

var url = "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}?valueInputOption=RAW".Replace("{spreadsheetId}",spreadsheetId).Replace("{range}", HttpUtility.UrlEncode(range));

JObject json = null;
using (var client = new WebClient())
{
    client.Headers.Set("Authorization", "Bearer " + credential.Token.AccessToken);
    client.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
    client.Headers.Set(HttpRequestHeader.UserAgent, "myprogram database updater google-api-dotnet-client/1.13.1.0 (gzip)");
    ServicePointManager.Expect100Continue = false;
    var jsonstr = JsonConvert.SerializeObject(valueRange);
    var jsontemp = JObject.Parse(jsonstr);
    jsontemp.Remove("ETag");
    jsonstr = jsontemp.ToString();
    try
    {
        var res = client.UploadString(url, "PUT", jsonstr);
        json = JObject.Parse(res);
    }
    catch (Exception)
    {


    }
}
0
user2757577

Wenn Sie dieses Tutorial verwenden, __. https://developers.google.com/sheets/quickstart/dotnet Stellen Sie sicher, dass Sie die folgende Codezeile auskommentieren. 

credPath = Path.Combine(credPath, ".credentials/sheets.googleapis.com-dotnet-quickstart.json");

Auch das ist, was ich Syntax weise verwendet habe und es funktioniert. 

String spreadsheetId2 = "<put yours here>";
String range2 = "<againyours>!F5";
ValueRange valueRange = new ValueRange();
valueRange.MajorDimension = "COLUMNS";//"ROWS";//COLUMNS

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

SpreadsheetsResource.ValuesResource.UpdateRequest update = service.Spreadsheets.Values.Update(valueRange, spreadsheetId2, range2);
update.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.RAW;
UpdateValuesResponse result2 = update.Execute(); 
0
suiiie