Google Sheet
trên C#, Winform.[CSHARP] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform.
Dưới đây, là hình ảnh demo ứng dụng đọc bảng table từ
SpeadSheet Google
.Khi các bạn send 1
request
trên Postman
thì chúng ta được kết quả như hình bên dưới:Dữ liệu trả về là 1 Table HTML, nên chúng ta chỉ cần dùng thư viện
HTMLAglitypack
để đọc chuyển dữ liệu từ Table HTML
sang DataTable
trên C#
, và hiện thị nó lên DataGridView
.Full source code C#:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DemoReadGoogleSheet { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnReadGoogleSheet_Click(object sender, EventArgs e) { var google_sheet_url = @"https://docs.google.com/spreadsheets/u/0/d/1ifPr7foe2DJiVZoZ-wUkDlyjKbDneeowprTGowejnZI/gviz/tq?tqx=out:html&tq&gid=1"; var dataTable = GetGoogleSheetAsDataTable(google_sheet_url); dataGridView1.DataSource = dataTable; } public static DataTable GetGoogleSheetAsDataTable(string sheetUrl) { string htmlContent = GetHtmlContent(sheetUrl); return ParseHtmlToDataTable(htmlContent); } private static string GetHtmlContent(string url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (StreamReader reader = new StreamReader(response.GetResponseStream())) { return reader.ReadToEnd(); } } private static DataTable ParseHtmlToDataTable(string htmlContent) { DataTable dt = new DataTable(); var htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(htmlContent); var table = htmlDoc.DocumentNode.SelectSingleNode("//table"); if (table == null) { return dt; } var headerRow = table.SelectSingleNode(".//thead/tr"); if (headerRow != null) { foreach (var th in headerRow.SelectNodes("th")) { dt.Columns.Add(WebUtility.HtmlDecode( th.InnerText.Trim())); } } else { var firstRow = table.SelectSingleNode(".//tr"); if (firstRow != null) { foreach (var td in firstRow.SelectNodes("td")) { dt.Columns.Add(td.InnerText.Trim()); } } } var rows = table.SelectNodes(".//tr"); foreach (var row in rows) { DataRow dr = dt.NewRow(); var cells = row.SelectNodes("td"); if (cells != null) { for (int i = 0; i < cells.Count && i < dt.Columns.Count; i++) { dr[i] = WebUtility.HtmlDecode( cells[i].InnerText.Trim()); } dt.Rows.Add(dr); } } return dt; } } }
Chúc mọi người thành công.