web-dev-qa-db-ja.com

Google Data APIを使用してC#でGoogleスプレッドシートにアクセスする

Googleスプレッドシートには、単一のシートとしていくつかの情報があります。 Googleの認証情報とスプレッドシートのアドレスを提供することにより、.NETからこの情報を読み取る方法はありますか。 Google Data APIを使用することは可能ですか?最終的には、DataTableのGoogleスプレッドシートから情報を取得する必要があります。どうすればいいですか?誰かがそれを試みた場合、plsはいくつかの情報を共有します。

102
blitzkriegz

。Netユーザーガイド によると:

。NETクライアントライブラリ をダウンロードします。

これらのusingステートメントを追加します。

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);
}
175
Kelly

簡単なラッパーを作成しました 周り 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("[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プロバイダーもあります。

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

(2016年6月から11月)質問とその回答は次のように古くなっています:1) GData APIs は、Google APIの前世代です。すべてのGData APIが非推奨になっているわけではありませんが、 すべての最新のGoogle API do not use Google Data Protocol ; 2) 新しいGoogle Sheets API v4 (GDataでもない)があります。

ここから先は、 。NET用Google APIクライアントライブラリ を取得し、最新の シートAPI を使用する必要があります。これは、以前のAPIよりもはるかに強力で柔軟です。ここに C#コードサンプル があります。 Sheets APIの.NETリファレンスドキュメント および 。NET Google APIクライアントライブラリ開発者ガイド も確認してください。

Python(もしそうなら、それは擬似コードのふりをするだけです;))にアレルギーがない場合は、APIを使用する、少し長く、より「実世界」の例を使用したビデオをいくつか作成しました必要に応じて、C#から学習し、C#に移行できます。

16
wescpy

あなたが求めていることをいくつかの方法で行うことができます:

  1. GoogleのスプレッドシートC#ライブラリ(Tacoman667の回答)を使用して、それぞれが名前と値のペアのリストを持つ行のリスト(Googleの用語ではListEntry)を返すことができるListFeedを取得します。 GoogleスプレッドシートAPI( http://code.google.com/apis/spreadsheets/code.html )ドキュメントには、十分な情報があります。始めました。

  2. Google視覚化APIを使用して、より洗練された(ほぼSQLに似た)クエリを送信し、必要な行/列のみを取得できます。

  3. スプレッドシートのコンテンツはAtomフィードとして返されるため、XPathまたはSAX解析を使用してリストフィードのコンテンツを抽出できます。この方法で実行する例があります(Javaと私は怖いけどJavascriptのみ) http://gqlx.twyst.co.za .

3
tonys

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

これで開始できます。私は最近それで遊んでいませんが、しばらく前に非常に古いバージョンをダウンロードしましたが、かなり安定しているように見えました。これはVisual Studio 2008にも更新されているので、ドキュメントをチェックしてください!

2
Tacoman667

このために、Google CodeにはいくつかのC#SDK /ツールキットがあると確信しています。 this one を見つけましたが、他にもあるかもしれないので、ブラウズしてみる価値はあります。

2
Steve Haigh

2017年3月24日にMarcos Placonaによって作成されたこのTwilioブログページは役に立つかもしれません。

Googleスプレッドシートと.NET Core

Google.Api.Sheets.v4 および OAuth2 を参照します。

2
JohnH