khoe [Office VBA] Chia sẻ với mọi người thư viện giúp viết macro VBA tương tác với Google Drive

NguyenDang95

Senior Member
Với công việc thường xuyên tương tác qua lại với Google Drive, sẽ rất tiện nếu như chúng ta có thể tương tác với Google Drive một cách tự động như tải tập tin lên Google Drive, tải tập tin từ Google Drive về máy tính, chia sẻ tập tin, tạo liên kết URL chia sẻ thư mục hoặc tập tin nhất định cho người khác, v.v. Tuy vậy những thao tác này hầu như không thực hiện được trong VBA. Chúng ta vẫn có thể làm được việc này bằng cách lập trình add-in VSTO hoặc Web add-in, tuy nhiên điều này đòi hỏi kiến thức về ngôn ngữ lập trình C#, VB.Net hay Javascript/Typescript. Từ thực tế này, mình đã viết một thư viện dựa vào Drive API của Google và bổ sung thêm một số tiện ích thường dùng cho công việc để có thể lập trình được trong VBA. Tất nhiên là với việc không phải là lập trình viên (chỉ là tay ngang học code) và mình viết thư viện này căn cứ vào nhu cầu công việc hiện tại, mọi người có thể sẽ thấy thiết sót hoặc gặp lỗi không đáng có.

Tải xuống:

GoogleDriveGoogleSheetsLibraryForVBA.zip:
https://1drv.ms/u/s!AmwM8BaWQzt0nLxXG3BiJZJn2rNxiw?e=QrPOTH

Tài liệu tham khảo cách cài đặt và sử dụng:

ThuVienGoogleApis.docx: https://1drv.ms/w/s!AmwM8BaWQzt0nLwfCrYcHvNHXGJ5lg?e=8lzGvM

GitHub:
https://github.com/nguyendang95/Google-Drive-and-Google-Sheets-Library-For-VBA

Ví dụ về sử dụng thư viện trong VBA:
Ví dụ 1:

Macro trong Outlook tự động tạo ra một email mới chứa đính kèm là tập tin sẽ được tải lên Google Drive.
Code:
Option Explicit

Public Sub UploadAttachmentToGoogleDrive()
    Dim objDS As GoogleApis.DriveService
    Dim objFile As GoogleApis.GoogleDriveFile
    Dim strUploadedFileId As String
    Dim strShareableLink As String
    Dim objMail As Outlook.MailItem
    Set objDS = New GoogleApis.DriveService
    With objDS
        .ClientId = "Client_Id"
        .ClientSecret = "Client_Secret"
        .ApplicationName = "Desktop Client"
        .LoginToGoogleDrive
        If .LoginStatus = GDLoginStatus_gdLoginStatusSuccess Then
            strUploadedFileId = .UploadFile("C:\Users\nguye\Downloads\SeleniumBasic-2.0.9.0.exe")
            If strUploadedFileId <> vbNullString Then
                Set objFile = .GetFileById(strUploadedFileId)
                strShareableLink = objFile.CreateShareableLink(GDPermissionType_gdPermissionTypeAnyone, GDPermissionRole_gdPermissionRoleReader)
                Set objMail = Application.CreateItem(olMailItem)
                With objMail
                    .Display
                    .BodyFormat = olFormatPlain
                    .Body = .Body & vbCrLf & "Attachment: " & objFile.Name & vbCrLf & strShareableLink
                End With
            Else: MsgBox "Failed to upload attachment(s) to Google Drive. Please try again.", vbInformation, "Failed to Upload Attachment(s) to Google Drive"
            End If
        End If
    End With
    Set objDS = Nothing
    Set objFile = Nothing
    Set objMail = Nothing
End Sub

Kết quả đạt được:

Screenshot 2022-10-05 104435.png


Ví dụ 2: Tải xuống tất cả các tập tin trong thư mục nhất định:
Giả sử người dùng có thư mục trên Google Drive tên là "Videos" với mã id là "11TyeTJb4LVW7sEDPGQ9joqW00Za2YbED" và muốn tải xuống tất cả các tập tin trong thư mục này về máy tính (vd: C:confused:Users\nguye\Downloads).

1664949618066.png


Code:
Public Sub DownloadAllFilesInFolder()
    Dim objDS As GoogleApis.DriveService
    Dim objFile As GoogleApis.GoogleDriveFile
    Dim arrFileIds() As String
    Dim i As Long
    Set objDS = New GoogleApis.DriveService
    With objDS
        .ClientId = "Client_Id
        .ClientSecret = "ClientSecret"
        .ApplicationName = "Desktop Client"
        .LoginToGoogleDrive
        If .LoginStatus = GDLoginStatus_gdLoginStatusSuccess Then
            arrFileIds = .GetAllFileIdsInFolder("11TyeTJb4LVW7sEDPGQ9joqW00Za2YbED")
            For i = 0 To UBound(arrFileIds)
                Set objFile = .GetFileById(arrFileIds(i))
                objFile.DownloadFile "C:\Users\nguye\Downloads\" & objFile.Name
            Next
        End If
    End With
    Set objDS = Nothing
    Set objFile = Nothing
End Sub

Kết quả đạt được:

1664949672160.png


Cập nhật: Hiện tại mình đang mở rộng thư viện này có thể tương tác được với Google Sheets để có thêm nhiều chức năng phong phú, cho nên những thím nào quan tâm có thể mạnh dạn đề xuất với mình nhé, mình sẽ cố gắng bổ sung.

Cập nhật ngày 10/10/2022: Hiện tại mình đã bổ sung khả năng tương tác với Google Sheets với một số thuộc tính, đối tượng và phương thức như sau:
  • Tạo tập tin Google Sheets mới
  • Lấy dữ liệu, thiết lập, xóa giá trị của một vùng dữ liệu bất kỳ trên Google Sheets
  • Tạo bộ lọc FilterView, Sort, quy tắc Conditional Format, xóa bộ lọc FilterView
  • Tạo, xóa sheet, nối thêm dữ liệu vào sheet
  • Tìm kiếm và thay thế theo cách thông thường, tìm kiếm và thay thế bằng Regex trong vùng dữ liệu nhất định.
Mọi người có thể tìm thấy đầy đủ mã nguồn C# tại đây: Github
https://github.com/nguyendang95/Goo...aybkzCfyaBI3LI6lLEznwKMWZXg_eeoEFvBNR2L8BY7e0

Cập nhật ngày 12/10/2022: Bổ sung thêm một số phương thức giúp người dùng có thể làm việc với Named Range, Protected Range và tương tác với Sheet:
  1. Tạo, xóa, thay đổi Named Range
  2. Tạo, xóa, thay đổi Protected Range
  3. Thay đổi thuộc tính của Sheet (đổi tên, ẩn/hiển thị sheet, thay đổi màu tab của sheet)
View attachment 1436428

Cập nhật ngày 15/10/2022: Bổ sung thêm một số phương thức làm việc với vùng dữ liệu (Range) trên Google Sheets:
  • Thao tác sao chép, cắt, dán dữ liệu
  • Gộp ô, bỏ gộp ô
  • Loại bỏ khoảng trắng dư thừa trong các ô của vùng dữ liệu
  • Tự động điều chỉnh kích thước hàng/cột
  • Di chuyển, xóa, chèn hàng/cột
Hiện mình đang cân nhắc mở rộng tính năng của thư viện này để có thể làm việc, tương tác với Gmail với một số thao tác như tạo email mới, tạo email có đính kèm, liệt kê email trong thư mục nhất định, v.v... Tuy nhiên với trường hợp này dùng Outlook VBA sẽ là lựa chọn hay hơn do Outlook cho tốc độ xử lý nhanh và tin cậy hơn.
 
Last edited:
Cập nhật: Hiện tại mình đang mở rộng thư viện này có thể tương tác được với Google Sheets để có thêm nhiều chức năng phong phú, cho nên những thím nào quan tâm có thể mạnh dạn đề xuất với mình nhé, mình sẽ cố gắng bổ sung.
 
Last edited:
Cập nhật ngày 10/10/2022: Hiện tại mình đã bổ sung khả năng tương tác với Google Sheets với một số thuộc tính, đối tượng và phương thức như sau:
  • Tạo tập tin Google Sheets mới
  • Lấy dữ liệu, thiết lập, xóa giá trị của một vùng dữ liệu bất kỳ trên Google Sheets
  • Tạo bộ lọc FilterView, Sort, quy tắc Conditional Format, xóa bộ lọc FilterView
  • Tạo, xóa sheet, nối thêm dữ liệu vào sheet
  • Tìm kiếm và thay thế theo cách thông thường, tìm kiếm và thay thế bằng Regex trong vùng dữ liệu nhất định
Mọi người có thể tìm thấy đầy đủ mã nguồn C# tại đây: Github
https://github.com/nguyendang95/Goo...aybkzCfyaBI3LI6lLEznwKMWZXg_eeoEFvBNR2L8BY7e0
 
Last edited:
Cập nhật ngày 12/10/2022: Bổ sung thêm một số phương thức giúp người dùng có thể làm việc với Named Range, Protected Range và tương tác với Sheet:
  1. Tạo, xóa, thay đổi Named Range
  2. Tạo, xóa, thay đổi Protected Range
  3. Thay đổi thuộc tính của Sheet (đổi tên, ẩn/hiển thị sheet, thay đổi màu tab của sheet)
1665584121837.png
 
Cập nhật ngày 15/10/2022: Bổ sung thêm một số phương thức làm việc với vùng dữ liệu (Range) trên Google Sheets:
  • Thao tác sao chép, cắt, dán dữ liệu
  • Gộp ô, bỏ gộp ô
  • Loại bỏ khoảng trắng dư thừa trong các ô của vùng dữ liệu
  • Tự động điều chỉnh kích thước hàng/cột
  • Di chuyển, xóa, chèn hàng/cột
Hiện mình đang cân nhắc mở rộng tính năng của thư viện này để có thể làm việc, tương tác với Gmail với một số thao tác như tạo email mới, tạo email có đính kèm, liệt kê email trong thư mục nhất định, v.v... Tuy nhiên với trường hợp này dùng Outlook VBA sẽ là lựa chọn hay hơn do Outlook cho tốc độ xử lý nhanh và tin cậy hơn.
 
Back
Top