89

Tôi đang có một số thông tin trong Bảng tính Google dưới dạng một trang tính. Có cách nào để tôi có thể đọc thông tin này từ .NET hay không bằng cách cung cấp thông tin đăng nhập và địa chỉ bảng tính của google. Có thể sử dụng API dữ liệu của Google không. Cuối cùng tôi cần lấy thông tin từ bảng tính của Google trong một DataTable. Tôi có thể làm như thế nào? Nếu bất cứ ai đã thử nó, xin chia sẻ một số thông tin.Truy cập Bảng tính Google bằng C# bằng Google Data API

Trả lời

163

Theo .NET user guide:

Tải .NET client library:

Thêm các báo cáo sử dụng:

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

Authenticate:

SpreadsheetsService myService = new SpreadsheetsService("exampleCo-exampleApp-1"); 
myService.setUserCredentials("[email protected]", "mypassword"); 

Nhận một danh sách các bảng tính:

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

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

Cho một SpreadsheetEntry bạn đã lấy ra, bạn có thể có được một danh sách tất cả các bảng tính trong bảng tính này như sau:

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

Và có được một thức ăn di động dựa :

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

Tôi nên sử dụng cái gì cho giá trị chuỗi cho SpreadsheetsService mới ("' exampleCo-exampleApp-1' ")? có vấn đề gì tôi đặt trong đó không? Cảm ơn! –

+0

Nhận danh sách bảng tính: "Bảng tính truy vấn = new SpreadsheetQuery();" nên đọc "SpreadsheetFeed feed = myService.Query (truy vấn);" Đã cố gắng chỉnh sửa không đủ ký tự thay đổi! – BobF

+3

_https: //developers.google.com/google-apps/spreadsheets/authorize_ *** Quan trọng: OAuth 1.0 không còn được hỗ trợ và sẽ bị vô hiệu hóa vào ngày 5 tháng 5 năm 2015. Nếu ứng dụng của bạn sử dụng OAuth 1.0, bạn phải di chuyển tới OAuth 2.0 hoặc ứng dụng của bạn sẽ ngừng hoạt động. *** – Kiquenet

2

Tôi chắc chắn sẽ có một số C# SDK/bộ công cụ trên Google Code cho việc này. Tôi đã tìm thấy this one, nhưng có thể có những người khác để có giá trị khi duyệt qua.

2

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

Điều này sẽ giúp bạn bắt đầu. Tôi đã không chơi với nó gần đây nhưng tôi đã tải về một phiên bản rất cũ trong khi trở lại và nó có vẻ khá vững chắc. Điều này được cập nhật lên Visual Studio 2008 cũng như vậy hãy kiểm tra các tài liệu!

3

Bạn có thể làm những gì bạn đang yêu cầu nhiều cách:

  1. Sử dụng thư viện # bảng C của Google (như trong câu trả lời Tacoman667 của) để lấy một ListFeed mà có thể trả về một danh sách các hàng (ListEntry trong Google cách nói) mỗi trong số đó có một danh sách các cặp tên-giá trị. Tài liệu API bảng tính của Google (http://code.google.com/apis/spreadsheets/code.html) có quá nhiều thông tin để giúp bạn bắt đầu.

  2. Sử dụng API trực quan hóa của Google cho phép bạn gửi các truy vấn phức tạp hơn (gần giống như SQL) để tìm nạp chỉ các hàng/cột bạn yêu cầu.

  3. Nội dung bảng tính được trả lại dưới dạng nguồn cấp dữ liệu Atom để bạn có thể sử dụng phân tích cú pháp XPath hoặc SAX để trích xuất nội dung của nguồn cấp dữ liệu danh sách. Có một ví dụ về cách làm theo cách này (trong Java và Javascript chỉ mặc dù tôi sợ) tại http://gqlx.twyst.co.za.

22

I wrote a simple wrapper xung quanh Google's .Net client library, nó cho thấy một giao diện cơ sở dữ liệu như đơn giản, với các loại hồ sơ mạnh mẽ-gõ.Dưới đây là một số mẫu mã:

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); 

Ngoài ra còn có một nhà cung cấp LINQ mà dịch để google của structured query operators:

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

@Kiquenet Ý của bạn là gì? Phiên bản cuối cùng tôi thấy của Google.GData. * Là 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, v.v.) – Kiquenet

+0

@Kiquenet Hãy cho tôi biết khi nào Google cập nhật thư viện .NET của họ. Nhưng tôi nghĩ Google.GData. * 2.2.0 đã sử dụng API v3. –

10

(Jun-tháng 11 năm 2016) Câu hỏi đặt ra và câu trả lời của nó đang out-of-date như: 1) GData APIs là thế hệ API Google trước đó. Mặc dù không phải tất cả API GData đều không được chấp nhận, all the latest Google APIs do không sử dụng the Google Data Protocol; và 2) có new Google Sheets API v4 (cũng không phải GData).

Chuyển tiếp từ đây, bạn cần nhận the Google APIs Client Library for .NET và sử dụng Sheets API mới nhất, mạnh hơn và linh hoạt hơn bất kỳ API nào trước đó. Đây là số C# code sample để giúp bạn bắt đầu. Ngoài ra, hãy kiểm tra .NET reference docs for the Sheets API.NET Google APIs Client Library developers guide.

Nếu bạn không bị dị ứng với Python (nếu bạn đang có, giả vờ là giả mã;)), tôi đã tạo một số video dài hơn, nhiều ví dụ "thực tế" hơn bằng cách sử dụng API mà bạn có thể học hỏi và di chuyển C# nếu muốn:

Các vấn đề liên quan