Google Code Prettify

2017年3月5日 星期日

[C# + Google SpreadSheet] (二)、讀取Google SpreadSheet內容

接下來就是要做讀取 SpreadSheet 內容至C#

前面設定請看
[C# + Google SpreadSheet] (一)、建立Google OAuth 2.0


  • 基本上建議使用VS2012以上的版本,因 NuGet 在2012以上的版本是以內建安裝,
    所以直接至 tool ->NuGet 封裝管理員->套件管理器主控台

  • 下方會出現 套件管理器主控台 

  • 加入後點擊client_secret.json,找屬性->複製到輸出目錄 : 一律複製
    • 再給範例程式之前,先注意幾點,皆於範例程式中
    1. new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
      client_secret.json,為下載的名稱,不同則須修改
    2. spreadsheetId,為google spreadsheet的網址 : /d/XXXXX/
      Ex: spreadsheets/d/1kLk9VslDYn0nhZpJZXd3tErt1f2gzG-2eSJWbrh2piU/
    3. range,規則為 "頁籤名稱!選取範圍"
      例如您的標籤為 123 ,然後表格內容是A1~F3
      則 range = "123 !A1:F3";
    4. 若你Google尚未建立,則自行去建立,沒東西怎可能抓得到內容呢?

    範例程式&設計頁面

    1. 設計頁面

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    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.IO;
    using System.Threading;

    namespace GoogleSpreadsheetTest
    {
        public partial class Form1 : Form
        {
            static string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly };
            //應用程式的名字需要英文
            static string ApplicationName = "Get Google SheetData with Google Sheets API";

            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                SpreadSheet();
            }

            private void SpreadSheet() {
                UserCredential credential;

                using (var stream =
                    //輸出檔名稱Ex."client_secret.json"
                    new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
                {
                    string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
                    credPath = Path.Combine(credPath, ".credentials/sheets.googleapis.com-dotnet-quickstart.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.
                //spreadsheetId,為google spreadsheet的網址 : / d / XXXXX /
                //Ex: https://docs.google.com/spreadsheets/d/1kLk9VslDYn0nhZpJZXd3tErt1f2gzG-2eSJWbrh2piU/edit#gid=0
                String spreadsheetId = "1kLk9VslDYn0nhZpJZXd3tErt1f2gzG-2eSJWbrh2piU";
                //"頁籤名稱!選取範圍"
                String range = "test!A1:F6";
                SpreadsheetsResource.ValuesResource.GetRequest request =
                        service.Spreadsheets.Values.Get(spreadsheetId, range);

                // Prints the names and majors of students in a sample spreadsheet:
                ValueRange response = request.Execute();
                IList<IList<Object>> values = response.Values;

                richTextBox1.Text = "";

                if (values != null && values.Count > 0)
                {
                    foreach (var row in values)
                    {
                        //第一種寫法 - 總和累計
                        foreach (var col in row)
                        {
                            richTextBox1.Text += col+"\t";
                        }
                        //或是第二種寫法 - 選取部分
                        //richTextBox1.Text = Convert.ToString(row[0])+ Convert.ToString(row[1])+Convert.ToString(row[2]);
                    }
                }
                else
                {
                    richTextBox1.Text = "No data found.";
                }
            }

            private void button2_Click(object sender, EventArgs e)
            {
                richTextBox1.Text = "";
            }
        }
    }


    沒有留言:

    張貼留言