2017年1月30日 星期一

Google Sheets API v4 使用 C# (3) --- 添加寫入 Google Spreadsheet

繼前一篇 Google Sheets API v4 使用 C# (2) --- 更新寫入 Google Spreadsheet 文章,再將添加寫入一起分享。
以下內容為更新寫入。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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;
using System.Threading.Tasks;

namespace WriteGoogleSheet
{
    class Program
    {
        static string[] Scopes = { SheetsService.Scope.Spreadsheets };
        static string ApplicationName = "Update Google Sheet Data with Google Sheets API v4";
        static String spreadsheetId = "1SyfODMfB1t7kpZ-CscOUIXdl6wHoHwYsxIjsbzMfzSk";
        static string sheetName = "AppendRow";

        static void Main(string[] args)
        {
            var service = OpenSheet();
            //每秒寫入一次時間到 Google Sheet
            while (true)
            {
                AppendRow(service);
                System.Threading.Thread.Sleep(10000);
            }
        }

        static SheetsService OpenSheet()
        {
            UserCredential credential;
            using (var stream = 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");

                //存儲憑證到credPath
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    Scopes,
                    "user",
                    CancellationToken.None,
                    new FileDataStore(credPath, true)).Result;
                Console.WriteLine("Credential file saved to: " + credPath);
            }

            //建立一個API服務,設定請求參數
            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });
            return service;
        }

        static void AppendRow(SheetsService service)
        {
            String range = sheetName + "!A1";
            List<object> list1 = new List<object>() { "Item", "Cost", "Stocked", "Ship Date" };
            List<object> list2 = new List<object>() { "Wheel", "$20.50", "4", "3/1/2016" };
            List<object> list3 = new List<object>() { "Door", "$15", "2", "3/15/2016" };
            List<object> list4 = new List<object>() { "Engine", "$100", "1", "30/20/2016" };
            List<object> list5 = new List<object>() { "Totals", "=SUM(B2:B4)", "=SUM(C2:C4)", "=MAX(D2:D4)" };
            IList<IList<Object>> list = new List<IList<Object>>() { list1, list2, list3, list4, list5 };

            ValueRange VRange = new ValueRange();
            VRange.Range = range;
            VRange.Values = list;

            SpreadsheetsResource.ValuesResource.AppendRequest upd
                = service.Spreadsheets.Values.Append(VRange, spreadsheetId, range);
            upd.ValueInputOption = SpreadsheetsResource.ValuesResource.AppendRequest.ValueInputOptionEnum.USERENTERED;
            AppendValuesResponse responses = upd.Execute();
            Console.WriteLine(responses.Updates.UpdatedRange);
        }       
    }
}
執行結果:


相關文章:
參考資料: