89

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

ответ

163

Согласно .NET user guide:

.NET client library Загрузите:

Добавить эти заявления с помощью:

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

Аутентифицировать:

SpreadsheetsService myService = new SpreadsheetsService("exampleCo-exampleApp-1"); 
myService.setUserCredentials("[email protected]", "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); 
} 
+3

Что следует использовать для строкового значения для нового SpreadsheetsService ("exampleCo-exampleApp-1'?)? не имеет значения, что я там вложил? Благодаря! –

+0

Получить список таблиц: "SpreadsheetQuery query = new SpreadsheetQuery();" следует читать «Распространение фида = myService.Query (запрос);» Пытался отредактировать недостаточно символов! – BobF

+3

_https: //developers.google.com/google-apps/spreadsheets/authorize_ *** Важно: OAuth 1.0 больше не поддерживается и будет отключен 5 мая 2015 года. Если ваше приложение использует OAuth 1.0, вам необходимо выполнить миграцию к OAuth 2.0, или ваше приложение перестанет функционировать. *** – Kiquenet

2

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

2

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

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

3

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

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

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

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

22

I wrote a simple wrapper вокруг Google's .Net client library, предоставляет более простой базы данных, как интерфейс, с сильно типизированных типов записей.Вот некоторые примеры кода:

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("[email protected]", "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 structured query operators:

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

@Kiquenet Что значит? Последняя версия, которую я вижу в Google.GData. * - 2.2.0 http://www.nuget.org/packages/Google.GData.Documents/ –

+0

https://developers.google.com/google-apps/spreadsheets/ API Versión 3.0 (OAuth и т. Д.) – Kiquenet

+0

@Kiquenet Сообщите мне, когда Google обновляет свои библиотеки .NET. Но я думаю, что Google.GData. * 2.2.0 уже использует API v3. –

10

(июнь-ноябрь 2016) вопрос и его ответы теперь устарелый as: 1) GData APIs - это предыдущее поколение API Google. Хотя не все API GData устарели, all the latest Google APIs do неthe Google Data Protocol; и 2) есть new Google Sheets API v4 (также не GData).

Чтобы перейти отсюда, вы должны получить the Google APIs Client Library for .NET и использовать новейший Sheets API, который намного более мощный и гибкий, чем любой предыдущий API. Вот вам C# code sample, чтобы помочь вам начать работу. Также проверьте .NET reference docs for the Sheets API и .NET Google APIs Client Library developers guide.

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

Смежные вопросы