Google डेटा API का उपयोग करके C # के साथ Google स्प्रेडशीट एक्सेस करना


104

मुझे Google स्प्रेडशीट में कुछ जानकारी एक ही शीट के रूप में मिल रही है। क्या कोई ऐसा तरीका है जिसके द्वारा मैं .NET क्रेडेंशियल्स और स्प्रेडशीट पता प्रदान करके .NET से इस जानकारी को पढ़ सकता हूं। क्या Google डेटा API का उपयोग करना संभव है। अंततः मुझे एक डेटाटेबल में Google स्प्रेडशीट से जानकारी प्राप्त करने की आवश्यकता है। मैं यह कैसे कर सकता हूं? अगर किसी ने इसका प्रयास किया है, तो pls कुछ जानकारी साझा करें।


मेरे उत्तर की जांच करें stackoverflow.com/questions/48432846/…
माइक डारविश

जवाबों:


176

.NET उपयोगकर्ता गाइड के अनुसार :

.NET क्लाइंट लाइब्रेरी डाउनलोड करें :

बयानों का उपयोग करके इन्हें जोड़ें:

using Google.GData.Client;
using Google.GData.Extensions;
using Google.GData.Spreadsheets;

प्रमाणित करें:

SpreadsheetsService myService = new SpreadsheetsService("exampleCo-exampleApp-1");
myService.setUserCredentials("jo@gmail.com", "mypassword");

स्प्रेडशीट की एक सूची प्राप्त करें:

SpreadsheetQuery query = new SpreadsheetQuery();
SpreadsheetFeed feed = myService.Query(query);

Console.WriteLine("Your spreadsheets: ");
foreach (SpreadsheetEntry entry in feed.Entries)
{
    Console.WriteLine(entry.Title.Text);
}

आपके द्वारा पहले से ही पुनर्प्राप्त की गई स्प्रैडशीट को देखते हुए, आप इस स्प्रेडशीट में सभी वर्कशीट की एक सूची प्राप्त कर सकते हैं:

AtomLink link = entry.Links.FindService(GDataSpreadsheetsNameTable.WorksheetRel, null);

WorksheetQuery query = new WorksheetQuery(link.HRef.ToString());
WorksheetFeed feed = service.Query(query);

foreach (WorksheetEntry worksheet in feed.Entries)
{
    Console.WriteLine(worksheet.Title.Text);
}

और सेल आधारित फ़ीड प्राप्त करें:

AtomLink cellFeedLink = worksheetentry.Links.FindService(GDataSpreadsheetsNameTable.CellRel, null);

CellQuery query = new CellQuery(cellFeedLink.HRef.ToString());
CellFeed feed = service.Query(query);

Console.WriteLine("Cells in this worksheet:");
foreach (CellEntry curCell in feed.Entries)
{
    Console.WriteLine("Row {0}, column {1}: {2}", curCell.Cell.Row,
        curCell.Cell.Column, curCell.Cell.Value);
}

3
नए स्प्रेडशीट सेवा (" exampleCo-exampleApp-1") के लिए स्ट्रिंग मान के लिए मुझे क्या उपयोग करना चाहिए ? इससे कोई फर्क नहीं पड़ता कि मैंने वहां क्या रखा है? धन्यवाद!
इयान डेविस

स्प्रेडशीट की एक सूची प्राप्त करें: "स्प्रेडशीट ® क्वेरी = नया स्प्रेडशीट ® ();" "स्प्रैडशीटफीड फीड = myService.Query (क्वेरी)" पढ़ना चाहिए? संपादित नहीं करने के लिए पर्याप्त वर्णों को बदलने की कोशिश की!
एसक्यूबीओबीस्कॉट


1
नीचे दिए गए @wescpy के इस लिंक से मुझे 2016 के मध्य के लिए अधिक प्रासंगिक जानकारी प्राप्त करने में मदद मिली: googleappsdeveloper.blogspot.com/2016/05/…
joon

विल 2020/03/03 पुस्तकालय इस्तेमाल किया उपयोग करता है के बाद से के बाद काम नहीं Google शीट में v3 API cloud.google.com/blog/products/g-suite/...
Ogglas

22

मैंने Google के .Net क्लाइंट लाइब्रेरी के चारों ओर एक साधारण आवरण लिखा है , यह एक सरल डेटाबेस-जैसे इंटरफ़ेस को उजागर करता है, जिसमें दृढ़ता से टाइप किए गए रिकॉर्ड प्रकार होते हैं। यहाँ कुछ नमूना कोड दिया गया है:

public class Entity {
    public int IntProp { get; set; }
    public string StringProp { get; set; }
}

var e1 = new Entity { IntProp = 2 };
var e2 = new Entity { StringProp = "hello" };
var client = new DatabaseClient("you@gmail.com", "password");
const string dbName = "IntegrationTests";
Console.WriteLine("Opening or creating database");
db = client.GetDatabase(dbName) ?? client.CreateDatabase(dbName); // databases are spreadsheets
const string tableName = "IntegrationTests";
Console.WriteLine("Opening or creating table");
table = db.GetTable<Entity>(tableName) ?? db.CreateTable<Entity>(tableName); // tables are worksheets
table.DeleteAll();
table.Add(e1);
table.Add(e2);
var r1 = table.Get(1);

एक LINQ प्रदाता भी है जो Google के संरचित क्वेरी ऑपरेटरों के लिए अनुवाद करता है :

var q = from r in table.AsQueryable()
        where r.IntProp > -1000 && r.StringProp == "hello"
        orderby r.IntProp
        select r;

@Kiquenet तुम्हारा क्या मतलब है? अंतिम संस्करण जो मैं Google.GData का देख रहा हूं। * 2.2.0 nuget.org/packages/Google.GData.Documents
मौरिसियो शेफ़र

developers.google.com/google-apps/spreadsheets संस्करण 3.0 एपीआई (OAuth, आदि)
Kiquenet

@Kiquenet मुझे बताएं कि Google कब अपने .NET लाइब्रेरीज़ को अपडेट करता है। लेकिन मुझे लगता है कि Google.GData। * 2.2.0 पहले से ही API v3 का उपयोग करता है।
मौरिसियो शेफ़र


17

(जून-नवंबर २०१६) प्रश्न और उसके उत्तर अब आउट-ऑफ़-डेट हैं: १) GData API , Google API की पिछली पीढ़ी हैं। जबकि नहीं सभी GData एपीआई पदावनत किया गया है, सभी नवीनतम गूगल एपीआई करते नहीं का उपयोग गूगल डेटा प्रोटोकॉल ; और 2) एक नया Google पत्रक API v4 है (GData भी नहीं)।

यहां से आगे बढ़ते हुए, आपको .NET के लिए Google API क्लाइंट लाइब्रेरी प्राप्त करना होगा और नवीनतम Sheets API का उपयोग करना होगा , जो किसी भी पिछले API की तुलना में अधिक शक्तिशाली और लचीला है। यहां आपको आरंभ करने में सहायता के लिए C # कोड नमूना दिया गया है। शीट्स एपीआई और .NET Google एपीआई क्लाइंट लाइब्रेरी डेवलपर्स गाइड के लिए .NET संदर्भ डॉक्स भी देखें ।

यदि आपको पायथन से एलर्जी नहीं है (यदि आप हैं, तो बस यह दिखावा है कि यह स्यूडोकोड है;)), मैंने थोड़ी देर के साथ कई वीडियो बनाए, एपीआई का उपयोग करने के और अधिक "वास्तविक दुनिया" उदाहरण आप से सीख सकते हैं और सी # पर माइग्रेट कर सकते हैं। :


क्या Microsoft Excel फ़ाइलों तक पहुँचने के लिए इन उपकरणों का उपयोग किया जा सकता है?
afr0

1
दुर्भाग्य से, Microsoft और Google दोनों प्रतिस्पर्धी उत्पाद बना रहे हैं जो एक सामान्य मानक का पालन नहीं करते हैं, इसलिए आपको एक्सेल फ़ाइलों तक पहुंचने के लिए अपने स्वयं के उपकरण खोजने होंगे। यदि आप पायथन डेवलपर हैं, तो python-excel.org देखें । अन्य भाषाओं के लिए, आपको उनके संबंधित समुदायों को खोजना होगा। वैकल्पिक रूप से, आप एक्सेल फ़ाइलों को Google (ड्राइव एपीआई का उपयोग करके) आयात कर सकते हैं, फिर अपनी इच्छित संचालन करने के लिए शीट्स एपीआई का उपयोग करें। Google API विभिन्न प्रकार की भाषाओं का समर्थन करता है ... डेवलपर्स
Googleapi

3

आप वही कर सकते हैं जो आप कई तरीकों से पूछ रहे हैं:

  1. ListFeed प्राप्त करने के लिए Google की स्प्रेडशीट C # लाइब्रेरी (Tacoman667 के उत्तर के रूप में) का उपयोग करना, जो पंक्तियों की सूची (Google parlance में ListEntry) लौटा सकती है, जिनमें से प्रत्येक में नाम-मूल्य जोड़े की सूची है। Google स्प्रेडशीट API ( http://code.google.com/apis/spreadsheets/code.html ) प्रलेखन आपके आरंभ करने के लिए पर्याप्त जानकारी से अधिक है।

  2. Google विज़ुअलाइज़ेशन एपीआई का उपयोग करना, जो आपको अधिक परिष्कृत (लगभग SQL) प्रश्नों को प्रस्तुत करने की अनुमति देता है, केवल उन पंक्तियों / स्तंभों को लाने के लिए जिनकी आपको आवश्यकता है।

  3. स्प्रेडशीट सामग्री को एटम फ़ीड के रूप में लौटाया जाता है ताकि आप किसी सूची फ़ीड की सामग्री को निकालने के लिए XPath या SAX पार्सिंग का उपयोग कर सकें। इस तरह से करने का एक उदाहरण है (जावा और जावास्क्रिप्ट में, हालांकि मुझे डर है) http://gqlx.twyst.co.za पर


2

मुझे पूरा यकीन है कि इसके लिए Google कोड पर कुछ C # SDKs / टूलकिट होंगे। मुझे यह एक मिला , लेकिन अन्य भी हो सकते हैं, इसलिए यह एक ब्राउज़ करने के लायक है।


2

http://code.google.com/apis/gdata/articles/dotnet_client_lib.html

इससे आप कार्य शुरू कर पाएंगे। मैं हाल ही में इसके साथ नहीं खेला, लेकिन मैंने कुछ समय पहले एक बहुत पुराना संस्करण डाउनलोड किया था और यह बहुत ठोस लग रहा था। यह एक दृश्य स्टूडियो 2008 के लिए अद्यतन किया गया है और साथ ही डॉक्स की जाँच करें!



2

@ केली का सबसे उत्कीर्ण जवाब अब मान्य नहीं है जैसा @wescpy कहते हैं। हालाँकि 2020-03-03 के बाद यह लाइब्रेरी के उपयोग के बाद से बिल्कुल भी काम नहीं करेगा Google Sheets v3 API

Google शीट v3 API 3 मार्च, 2020 को बंद हो जाएगा

https://developers.google.com/sheets/api/v3

यह Google द्वारा 2019-09-10 की घोषणा की गई थी:

https://cloud.google.com/blog/products/g-suite/migrate-your-apps-use-latest-sheets-api

इसके लिए नया कोड नमूना Google Sheets v4 API:

के लिए जाओ

https://developers.google.com/sheets/api/quickstart/dotnet

और उत्पन्न करते हैं credentials.json। फिर इंस्टॉल करेंGoogle.Apis.Sheets.v4 NuGet करें और निम्न नमूने का प्रयास करें:

ध्यान दें कि मुझे त्रुटि Unable to parse range: Class Data!A2:Eकोड उदाहरण के साथ मिला लेकिन मेरी स्प्रेडशीट के साथ। Sheet1!A2:Eलेकिन जब से मेरी शीट का नाम लिया गया था तब तक काम करना बदल गया। साथ ही काम भी किया A2:E

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.Threading;

namespace SheetsQuickstart
{
    class Program
    {
        // If modifying these scopes, delete your previously saved credentials
        // at ~/.credentials/sheets.googleapis.com-dotnet-quickstart.json
        static string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly };
        static string ApplicationName = "Google Sheets API .NET Quickstart";

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

            using (var stream =
                new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
            {
                // The file token.json stores the user's access and refresh tokens, and is created
                // automatically when the authorization flow completes for the first time.
                string credPath = "token.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 = "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms";
            String range = "Class Data!A2:E";
            SpreadsheetsResource.ValuesResource.GetRequest request =
                    service.Spreadsheets.Values.Get(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;
            if (values != null && values.Count > 0)
            {
                Console.WriteLine("Name, Major");
                foreach (var row in values)
                {
                    // Print columns A and E, which correspond to indices 0 and 4.
                    Console.WriteLine("{0}, {1}", row[0], row[4]);
                }
            }
            else
            {
                Console.WriteLine("No data found.");
            }
            Console.Read();
        }
    }
}

क्लाइंट आईडी / रहस्य और स्कोप को निर्दिष्ट नहीं करने के लिए मुझे कैसे मिलेगा? मैंने पहले ही OAuth प्रवाह किया है और एक पहुंच टोकन और ताज़ा टोकन है (ऑफ़लाइन मोड के बारे में सोचो) और मुझे इस अतिरिक्त बकवास में से कोई भी नहीं चाहिए। मेरे पास क्लाइंट आईडी और क्लाइंट सीक्रेट तक पहुंच नहीं है क्योंकि वे एक ओउथ रिले सर्वर पर हैं, जिसकी पृष्ठभूमि सेवाओं में भी मेरी पहुंच नहीं है।
ब्लेक निमेज्स्की

@BlakeNiemyjski बाकी API का उपयोग सीधे करें, लिंक करें: Developers.google.com/sheets/api/reference/rest
Ogglas
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.