Доступ к таблицам Google с помощью C # с помощью API данных Google - PullRequest
99 голосов
/ 07 апреля 2009

У меня есть некоторая информация в таблицах Google в виде одного листа. Есть ли способ, с помощью которого я могу прочитать эту информацию из .NET, предоставив учетные данные Google и адрес электронной таблицы. Возможно ли это с помощью API данных Google. В конечном итоге мне нужно получить информацию из электронной таблицы Google в DataTable. Как мне это сделать? Если кто-то пытался это сделать, пожалуйста, поделитесь информацией.

Ответы [ 7 ]

172 голосов
/ 07 мая 2009

Согласно руководству пользователя .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);
}

Имея SpreadsheetEntry, который вы уже получили, вы можете получить список всех таблиц в этой таблице следующим образом:

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);
}
22 голосов
/ 11 мая 2009

Я написал простую оболочку вокруг Клиентская библиотека 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;
14 голосов
/ 16 июня 2016

(июнь-ноябрь 2016 г.) Вопрос и ответы на него устарели: 1) API GData - это API Google предыдущего поколения. Хотя не все API GData устарели, все последние API Google делают не используют протокол данных Google ; и 2) существует новый API Google Sheets v4 (также не GData).

Чтобы двигаться дальше, вам нужно получить клиентскую библиотеку API Google для .NET и использовать новейший Sheets API , который гораздо более мощный и гибкий, чем любой предыдущий API , Вот пример кода C # , который поможет вам начать работу. Также проверьте справочные документы .NET для API Sheets и руководство разработчика клиентской библиотеки .NET Google APIs .

Если у вас нет аллергии на Python (если вы просто притворяетесь, что это псевдокод;)), я сделал несколько видеороликов с чуть более длинными, более «реальными» примерами использования API, из которого вы можете изучить и перенести на C # при желании:

3 голосов
/ 04 мая 2009

Вы можете сделать то, что просите, несколькими способами:

  1. Использование библиотеки Google C # для электронных таблиц (как в ответе Tacoman667) для получения ListFeed, который может возвращать список строк (ListEntry на языке Google), каждая из которых имеет список пар имя-значение. API электронных таблиц Google (http://code.google.com/apis/spreadsheets/code.html) документация содержит более чем достаточно информации для начала работы.

  2. Использование API визуализации Google, который позволяет отправлять более сложные (почти как в SQL) запросы для выборки только тех строк / столбцов, которые вам нужны.

  3. Содержимое электронной таблицы возвращается в виде каналов Atom, поэтому вы можете использовать синтаксический анализ XPath или SAX для извлечения содержимого канала списка. Есть пример того, как это делается (только на Java и Javascript, хотя я боюсь) на http://gqlx.twyst.co.za.

2 голосов
/ 04 мая 2009

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

Это должно помочь вам начать. Я не играл с ним в последнее время, но некоторое время назад я скачал очень старую версию, и она казалась довольно солидной. Эта версия также обновлена ​​до Visual Studio 2008, поэтому ознакомьтесь с документацией!

2 голосов
/ 07 апреля 2009

Я почти уверен, что для этого в Google Code будет несколько SDK / инструментариев C #. Я нашел этот , но могут быть и другие, поэтому стоит поискать.

1 голос
/ 04 июня 2018

Эта страница блога Twilio, сделанная 24 марта 2017 года Маркосом Плакона, может оказаться полезной.

Таблицы Google и .NET Core

Он ссылается на Google.Api.Sheets.v4 и OAuth2 .

...