iInfo 資訊交流: Google Sheets API v4 使用 C# (2) --- 更新寫入 Google Spreadsheet

最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2017/02/20] 近來有網友詢問 MultiCharts 與 Excel 畫冰火能量圖 (8)MultiCharts 與Excel 畫冰火能量圖(11) --- 更名「台股儀表板」 文章中教學檔案取得方式,有興趣的朋友可透過 Line了解詳情 (請勿以為是免費分享),Line : aminwhite5168。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲,請盡快把握機會,歡迎券商、大專院校邀約講座。

[公告2018/06/01] 台指能量儀表板教學課程,課程如網頁內容 台北班:台指能量儀表板

[公告2018/10/02] 期交所於2018/10/03進行網址改版,若有參考部落格與期交所相關文章,請各位讀者自行修改。

2017年1月30日 星期一

Google Sheets API v4 使用 C# (2) --- 更新寫入 Google Spreadsheet

Google Sheets API v4 使用 C# (1) --- 讀取Google Spreadsheet 介紹讀取 Google Spreadsheet 的方法,現在也分享如何 寫入 Google Spreadsheet,如此就可對 Google Spreadsheet進行存取。

筆者目前研究資料寫入 Google Spreadsheet 有以下2種方法,後續還有其他再行分享:
  1. 更新寫入:指定位置修改,若指定欄位有資料,則覆蓋原位置內容。
  2. 添加寫入:指定位置修改,若指定欄位有資料,則往下一行列填寫。
以下內容為更新寫入。
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 = "Test123";

        static void Main(string[] args)
        {
            var service = OpenSheet();
            //每10秒一次寫入時間到 Google Sheet
            while (true)
            {
                UpdateRow(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 = Path.Combine
                    (System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),
                     ".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 UpdateRow(SheetsService service)
        {
            ValueRange rVR;
            String sRange;
            int rowNumber = 1;

            //設定讀取A欄最後一行位置
            sRange = String.Format("{0}!A:A", sheetName);
            SpreadsheetsResource.ValuesResource.GetRequest getRequest
                = service.Spreadsheets.Values.Get(spreadsheetId, sRange);
            rVR = getRequest.Execute(); //到Google sheet讀取內容
            IList<IList<Object>> values = rVR.Values; //最後一行位置

            //寫入新資料
            if (values != null && values.Count > 0) rowNumber = values.Count + 1; //添加一行
            sRange = String.Format("{0}!A{1}:B{1}", sheetName, rowNumber);  //指定寫入位置

            //設定寫入
            ValueRange valueRange = new ValueRange();
            valueRange.Range = sRange;
            valueRange.MajorDimension = "ROWS";//ROWS或COLUMNS

            //取得當前時間
            DateTime dt = new DateTime();
            dt = DateTime.Now;
            List<object> oblist = new List<object>() { String.Format("{0}", rowNumber), dt.ToString("HH:mm:ss") };
            //寫入時間
            valueRange.Values = new List<IList<object>> { oblist };
            Console.WriteLine("{0}, {1}", oblist[0], oblist[1]);

            //執行寫入動作
            SpreadsheetsResource.ValuesResource.UpdateRequest updateRequest
                = service.Spreadsheets.Values.Update(valueRange, spreadsheetId, sRange);
            updateRequest.ValueInputOption
                = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
            UpdateValuesResponse uUVR = updateRequest.Execute();
        }
    }
}
執行結果:


相關文章:
參考資料: