Google 스프레드 시트에 단일 시트로 일부 정보가 있습니다. Google 자격 증명과 스프레드 시트 주소를 제공하여 .NET에서이 정보를 읽을 수있는 방법이 있습니까? Google 데이터 API를 사용하는 것이 가능합니까? 궁극적으로 DataTable의 Google 스프레드 시트에서 정보를 가져와야합니다. 내가 어떻게 해? 누군가 시도했다면 pls는 정보를 공유합니다.
Google 스프레드 시트에 단일 시트로 일부 정보가 있습니다. Google 자격 증명과 스프레드 시트 주소를 제공하여 .NET에서이 정보를 읽을 수있는 방법이 있습니까? Google 데이터 API를 사용하는 것이 가능합니까? 궁극적으로 DataTable의 Google 스프레드 시트에서 정보를 가져와야합니다. 내가 어떻게 해? 누군가 시도했다면 pls는 정보를 공유합니다.
답변:
.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);
}
exampleCo-exampleApp-1
") 의 문자열 값으로 무엇을 사용해야 합니까? 내가 거기에 넣는 것이 중요합니까? 감사!
나는 간단한 래퍼 썼다 주위 구글의 닷넷 클라이언트 라이브러리를 , 그것은 노출 간단한 데이터베이스와 같은 강력한 형식의 기록 유형과 인터페이스. 다음은 몇 가지 샘플 코드입니다.
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;
(2016 년 6 월 -11 월) 질문과 답변은 다음과 같이 구식입니다. 1) GData API 는 이전 세대의 Google API입니다. 모든 GData API가 더 이상 사용되지는 않지만 모든 최신 Google API 는 Google 데이터 프로토콜을 사용 하지 않습니다 . 2) 새로운 Google Sheets API v4 (GData도 아님)가 있습니다.
여기서부터는 .NET 용 Google API 클라이언트 라이브러리 를 가져 와서 이전 API보다 훨씬 강력하고 유연한 최신 Sheets API를 사용해야합니다 . 다음은 시작하는 데 도움이 되는 C # 코드 샘플 입니다. 또한 Sheets API에 대한 .NET 참조 문서 및 .NET Google API 클라이언트 라이브러리 개발자 가이드를 확인 하세요.
Python에 알레르기가없는 경우 (만약 의사 코드 인 척하십시오;)), 필자는 API를 사용하여 배우고 원하는 경우 C #으로 마이그레이션하는 약간 더 길고 "실제"예제로 여러 비디오를 만들었습니다. :
여러 가지 방법으로 요청한 작업을 수행 할 수 있습니다.
Google의 스프레드 시트 C # 라이브러리 (Tacoman667의 답변에서와 같이)를 사용하여 각각 이름-값 쌍 목록이있는 행 목록 (Google 용어의 ListEntry)을 반환 할 수있는 ListFeed를 가져옵니다. Google 스프레드 시트 API ( http://code.google.com/apis/spreadsheets/code.html ) 설명서에는 시작하기에 충분한 정보가 있습니다.
필요한 행 / 열만 가져 오기 위해보다 정교한 (거의 SQL과 유사) 쿼리를 제출할 수있는 Google 시각화 API를 사용합니다.
스프레드 시트 콘텐츠는 Atom 피드로 반환되므로 XPath 또는 SAX 구문 분석을 사용하여 목록 피드의 콘텐츠를 추출 할 수 있습니다. http://gqlx.twyst.co.za 에는 이런 식으로 수행하는 예제가 있습니다 (Java 및 Javascript에서만 두렵지 만) .
http://code.google.com/apis/gdata/articles/dotnet_client_lib.html
시작해야합니다. 나는 최근에 그것을 가지고 놀지 않았지만 얼마 전에 아주 오래된 버전을 다운로드했는데 꽤 견고 해 보였습니다. 이것은 Visual Studio 2008로 업데이트되었으므로 문서를 확인하십시오!
Marcos Placona가 2017 년 3 월 24 일에 작성한이 Twilio 블로그 페이지가 도움이 될 수 있습니다.
Google.Api.Sheets.v4 및 OAuth2를 참조 합니다.
@Kelly의 가장 많이 찬성 된 답변은 @wescpy가 말한 것처럼 더 이상 유효하지 않습니다. 그러나 2020-03-03 이후에는 사용 된 라이브러리가 Google Sheets v3 API
.
Google Sheets v3 API는 2020 년 3 월 3 일에 종료됩니다.
https://developers.google.com/sheets/api/v3
이것은 Google에서 2019-09-10 발표했습니다.
https://cloud.google.com/blog/products/g-suite/migrate-your-apps-use-latest-sheets-api
에 대한 새 코드 샘플 Google Sheets v4 API
:
이동
https://developers.google.com/sheets/api/quickstart/dotnet
생성 credentials.json
합니다. 그런 다음 Google.Apis.Sheets.v4
NuGet을 설치 하고 다음 샘플을 시도합니다.
Unable to parse range: Class Data!A2:E
예제 코드 에는 오류 가 있지만 스프레드 시트 에는 오류 가 있습니다. Sheet1!A2:E
그러나 내 시트가 이름이 붙여진 이후로 변경되었습니다 . 또한 A2:E
.
using Google.Apis.Auth.OAuth2;
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
namespace SheetsQuickstart
{
class Program
{
// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/sheets.googleapis.com-dotnet-quickstart.json
static string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly };
static string ApplicationName = "Google Sheets API .NET Quickstart";
static void Main(string[] args)
{
UserCredential credential;
using (var stream =
new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
{
// The file token.json stores the user's access and refresh tokens, and is created
// automatically when the authorization flow completes for the first time.
string credPath = "token.json";
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
Console.WriteLine("Credential file saved to: " + credPath);
}
// Create Google Sheets API service.
var service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
// Define request parameters.
String spreadsheetId = "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms";
String range = "Class Data!A2:E";
SpreadsheetsResource.ValuesResource.GetRequest request =
service.Spreadsheets.Values.Get(spreadsheetId, range);
// Prints the names and majors of students in a sample spreadsheet:
// https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
ValueRange response = request.Execute();
IList<IList<Object>> values = response.Values;
if (values != null && values.Count > 0)
{
Console.WriteLine("Name, Major");
foreach (var row in values)
{
// Print columns A and E, which correspond to indices 0 and 4.
Console.WriteLine("{0}, {1}", row[0], row[4]);
}
}
else
{
Console.WriteLine("No data found.");
}
Console.Read();
}
}
}