NEWS

[C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform

[C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
Đăng bởi: Thảo Meo - Lượt xem: 1302 07:51:08, 09/09/2024DATABASE   In bài viết

Xin chào các bạn, bài viết hôm nay mình chia sẻ các bạn source code đọc dữ liệu từ Google Sheet trên C#, Winform.

[C#] Read data from Google Sheet use HttpRequest without Speadsheet API

Dưới đây, là hình ảnh demo ứng dụng đọc bảng table từ SpeadSheet Google.

GOOGLE_SHEET

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:

send_request_postman

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;
        }
    }

}

Thanks for watching!

DOWNLOAD SOURCE

THÔNG TIN TÁC GIẢ

[C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
Đăng bởi: Thảo Meo - Lượt xem: 1302 07:51:08, 09/09/2024DATABASE   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp