- Hướng dẫn đọc webcam trong Windows Form C# bằng thư viện Aforge
- Chụp ảnh màn hình bằng C#
- Hướng dẫn sử dụng JSON trong C#
- Hướng dẫn gửi dữ liệu lên Google Sheets từ chương trình C#
Việc kết nối ứng dụng C# với Google Sheets giúp bạn quản lý dữ liệu linh hoạt mà không cần cài đặt Excel trên máy trạm. Trong bài viết này, chúng ta sẽ thực hiện từ A-Z: từ việc tạo dự án ExampleProject trên Google Cloud đến việc viết Class Helper để đẩy hàng nghìn ô dữ liệu lên cloud chỉ với 1 request duy nhất.
Mục lục
- Thiết lập dự án trên Google Cloud
- Lấy ID bảng tính và cấp quyền
- 3. Tạo Project C#
- Lưu ý
- Câu hỏi thường gặp
1. Thiết lập dự án ExampleProject trên Google Cloud
Để ứng dụng C# có thể “nói chuyện” với Google Sheets, bạn cần một bộ thông tin định danh (Credentials). Do đó, trước khi viết code, bạn cần đăng ký dịch vụ với Google để nhận file xác thực.
1.1. Tạo dự án mới
- Truy cập Google Cloud Console.
- Click vào danh sách dự án ở góc trên bên trái và chọn New Project.
- Đặt tên dự án là ExampleProject và nhấn Create.
1.2. Bật Google Sheets API
- Tại ô tìm kiếm, gõ “Google Sheets API” và chọn kết quả tương ứng.
- Nhấn nút Enable để kích hoạt API cho dự án ExampleProject.
1.3. Tạo Service Account và lấy file JSON
- Vào menu APIs & Services > Credentials.
- Chọn + Create Credentials > Service Account.
- Sau khi tạo xong, click vào email của Service Account đó.
- Chuyển sang tab Keys, chọn Add Key > Create new key.
- Chọn định dạng JSON và nhấn Create. Một file sẽ tự động tải về máy bạn. Hãy đổi tên nó thành
credentials.json.
2. Lấy ID bảng tính và cấp quyền
Mỗi file Google Sheets có một ID duy nhất. Bạn hãy mở file Sheets của mình lên và quan sát URL:
https://docs.google.com/spreadsheets/d/1vqnkf65XGiFzr3UHETkKA0qjnwSYHPzUI4vjUJJKW0E/edit
Chuỗi in đậm chính là Spreadsheet ID.
Cực kỳ quan trọng: Mở file credentials.json bạn vừa tải về, copy giá trị của client_email. Sau đó vào Google Sheets, nhấn nút Share và thêm email này với quyền Editor. Nếu thiếu bước này, bạn sẽ gặp lỗi 403 Forbidden.
3. Tạo Project C# và Cấu hình Helper
Tại bước này, chúng ta sẽ chuẩn bị môi trường lập trình trong Visual Studio.
3.1. Tạo Project .NET Framework 4.7.2
- Mở Visual Studio, chọn Create a new project.
- Tìm kiếm và chọn Console App (.NET Framework) hoặc Windows Forms App (.NET Framework). Nhấn Next.
- Đặt tên cho dự án (ví dụ: GoogleSheetsApp).
- Tại mục Framework, chọn .NET Framework 4.7.2.
- Nhấn Create để khởi tạo dự án.
3.2. Cài đặt thư viện NuGet
Để giao tiếp với Google API, bạn cần cài đặt thư viện chính thức thông qua NuGet:
- Vào menu Tools > NuGet Package Manager > Package Manager Console.
- Gõ lệnh sau và nhấn Enter:
|
1 |
Install-Package Google.Apis.Sheets.v4 |
3.3. Viết Class Helper xử lý dữ liệu
Chuột phải vào Project, chọn Add > Class, đặt tên là TGMTgooglesheet.cs và dán đoạn mã sau để xử lý gửi dữ liệu:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
using System; using System.Collections.Generic; using System.IO; using Google.Apis.Auth.OAuth2; using Google.Apis.Sheets.v4; using Google.Apis.Sheets.v4.Data; using Google.Apis.Services; namespace TGMTcs { public class TGMTgooglesheet { private readonly SheetsService _service; private readonly string _spreadsheetId; public TGMTgooglesheet(string spreadsheetId, string credentialsPath, string applicationName = "ExampleProject") { _spreadsheetId = spreadsheetId; string[] scopes = { SheetsService.Scope.Spreadsheets }; using (var stream = new FileStream(credentialsPath, FileMode.Open, FileAccess.Read)) { var credential = GoogleCredential.FromStream(stream).CreateScoped(scopes); _service = new SheetsService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = applicationName }); } } public string UpdateRange(string range, List<IList<object>> values) { var valueRange = new ValueRange { Values = values }; var updateRequest = _service.Spreadsheets.Values.Update(valueRange, _spreadsheetId, range); updateRequest.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED; var response = updateRequest.Execute(); return $"Đã cập nhật {response.UpdatedCells} ô."; } // Tìm kiếm giá trị trong file (Search) public int Search(string sheetName, string searchValue, int colIndex = 0) { var request = _service.Spreadsheets.Values.Get(_spreadsheetId, sheetName); var response = request.Execute(); if (response.Values == null) return -1; for (int i = 0; i < response.Values.Count; i++) { if (response.Values[i].Count > colIndex && response.Values[i][colIndex].ToString() == searchValue) return i + 1; // Trả về Row Index (1-based) } return -1; } // Cập nhật nhiều dải ô cùng lúc nhằm tiết kiệm request (BatchUpdate) public void BatchUpdateData(List<ValueRange> data) { var requestBody = new BatchUpdateValuesRequest { ValueInputOption = "USER_ENTERED", Data = data }; _service.Spreadsheets.Values.BatchUpdate(requestBody, _spreadsheetId).Execute(); } } } |
3.4. Ví dụ sử dụng thực tế
Ví dụ này hướng dẫn cách gửi dữ liệu, tìm kiếm một hàng và cập nhật hàng loạt nhiều vị trí khác nhau:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
var sheet = new TGMTgooglesheet("ID_CUA_BAN", "credentials.json"); // 1. Ghi dữ liệu mới (Nhiều cột) var data = new List<IList<object>> { new List<object> { "ID001", "Camera 01", "Active" } }; sheet.UpdateRange("Sheet1!A2:C2", data); // 2. Tìm kiếm hàng có ID "ID001" int rowIndex = sheet.Search("Sheet1", "ID001", 0); Console.WriteLine("Tìm thấy tại hàng: " + rowIndex); // 3. BatchUpdate: Cập nhật nhiều ô không liên tục var batchData = new List<ValueRange> { new ValueRange { Range = "Sheet1!C2", Values = new List<IList<object>> { new List<object> { "Inactive" } } }, new ValueRange { Range = "Sheet1!A10", Values = new List<IList<object>> { new List<object> { "Log End" } } } }; sheet.BatchUpdateData(batchData); |
4. Lưu ý
Một vấn đề gây đau đầu là C# mặc định hiểu dấu . là ngăn cách thập phân, nhưng Google Sheets tại Việt Nam thường dùng dấu ,.
- Cách 1: Thay đổi Locale trong Google Sheets (File > Settings > Locale) sang United States để đồng bộ với chuẩn lập trình.
- Cách 2: Trong code C#, sử dụng
searchValue.Replace(",", ".")trước khi parse để đảm bảo tìm kiếm chính xác dù người dùng nhập theo chuẩn nào.
5. Câu hỏi thường gặp (FAQ)
| Câu hỏi | Giải đáp |
|---|---|
| Có mất phí không? | Hoàn toàn miễn phí. |
| Giới hạn đọc/ghi là bao nhiêu? | 300 yêu cầu đọc mỗi phút và 300 yêu cầu ghi mỗi phút cho mỗi dự án. Mỗi người dùng sẽ giới hạn 60 yêu cầu đọc/ghi mỗi phút cho mỗi dự án. Nếu ứng dụng của bạn vượt quá các giới hạn này, API sẽ trả về mã trạng thái HTTP 429: Too many requests |
| Lỗi “The caller does not have permission”? | Bạn chưa Share bảng tính cho email của Service Account. |
| Lỗi “Unable to parse range”? | Tên Sheet của bạn có thể chứa khoảng trắng hoặc sai chính tả (Ví dụ: ‘Sheet 1’ thay vì ‘Sheet1’). |
Hy vọng hướng dẫn này giúp bạn tích hợp Google Sheets vào ứng dụng C# .NET Framework 4.7.2 một cách dễ dàng. Nếu có thắc mắc, hãy để lại bình luận hoặc liên hệ qua support@viscomsolution.com.