106

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

4

8 に答える 8

183

.NETユーザーガイドによると:

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

次のusingステートメントを追加します。

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);
}
于 2009-05-07T14:43:07.240 に答える
23

私は、 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);

Google の構造化クエリ演算子に変換する LINQ プロバイダーもあります。

var q = from r in table.AsQueryable()
        where r.IntProp > -1000 && r.StringProp == "hello"
        orderby r.IntProp
        select r;
于 2009-05-11T03:52:35.670 に答える
3

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

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

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

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

于 2009-05-04T13:36:42.777 に答える
2

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

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

于 2009-05-04T12:59:13.413 に答える
1

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

于 2009-04-07T13:17:57.847 に答える