post-image

Google Sheet API là gì ?

Tổng quan

Hiện nay Google Sheet đang được sử dụng khá rộng rãi và rất tiện ích cho người sử dụng. Nó giúp chúng ta có thể xây dựng các danh sách để quản lý, vẽ các biểu đồ,… Ngoài ra nó còn cung cáp cho các lập trình viên Google Sheet API để có thể tương tác được với Google Sheet một cách dễ dàng. Cùng tìm hiều ở bài viết này nhé.

Giới thiệu về Google Sheet API

Google sheet API giúp cho các lập trình viên có thể tạo ra các ứng dụng tương tác với Google Sheet một cách dễ dàng, có the khai thác các tính năng rất hưu ích của nó. Về cơ bản tương tác với Google Sheet Api theo các đơn vị bảng tính (spreadsheet), trang tính (sheet), vùng giá trị (range) và ô trang tính (cell). Với 4 phương thúc gốc tương ứng với các API:

  • batchUpdate <POST /v4/spreadsheets/{spreadsheetId}:batchUpdate> : dùng cập nhật áp dụng cho một hay nhiều bảng tính.
  • create <POST /v4/spreadsheets> : tạo một bảng tính , trả lại bảng tính vừa mới tạo.
  • get <GET /v4/spreadsheets/{spreadsheetId}>: trả lại bảng tính với id đã cho.
  • getByDataFilter <POST /v4/spreadsheets/{spreadsheetId}:getByDataFilter> : trả lại bảng tính với id đã cho, dùng để lọc dữ liệu.

Sử dụng Google Sheet API với Java

Ví dụ này mình sẽ sử dụng ngôn ngữ Java cùng với Framework là Spring. Và chúng ta sẽ cùng tiến hành các bước cơ bản như sau:

Bước 1: Tạo một app trên Google Console

Chúng ta sẽ truy cập vào đường dẫn sau https://developers.google.com/sheets/api/quickstart/java và Click vào nút Enable the Google Sheets API như hình và tải xuống file credentials.json.

Sử dụng Google Sheet API với Java

Ví dụ này mình sẽ sử dụng ngôn ngữ Java cùng với Framework là Spring. Và chúng ta sẽ cùng tiến hành các bước cơ bản như sau:

Bước 1: Tạo một app trên Google Console

Chúng ta sẽ truy cập vào đường dẫn sau https://developers.google.com/sheets/api/quickstart/java và Click vào nút Enable the Google Sheets API như hình và tải xuống file credentials.json.

Sau khi đã chuẩn bị thư viện xong chúng ta chạy 2 câu lệnh sau trên cmd để tạo ứng dụng:
gradle init --type basic

mkdir -p src/main/java src/main/resources

Sau đó chúng ta sẽ copy file credentials.json vào trong thư mục resources. Và thêm các thư viện sau vào trong file build.gradle

compile 'com.google.api-client:google-api-client:1.30.4' compile 'com.google.oauth-client:google-oauth-client-jetty:1.30.4' compile 'com.google.apis:google-api-services-sheets:v4-rev581-1.25.0'

Bước 3: Tạo phương thức xác thực quyền truy cập

Chúng ta tạo một class có tên là GoogleSheetAPI như sau:

GoogleSheetAPI.java

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.sheets.v4.Sheets;
import com.google.api.services.sheets.v4.SheetsScopes;
import com.google.api.services.sheets.v4.model.ValueRange;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.GeneralSecurityException;
import java.util.Collections;
import java.util.List;

public class GoogleSheetAPI{
    private static final String APPLICATION_NAME = "Google Sheets API Java Quickstart";
    private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
   // Đây là đường dẫn thư mục sẽ lưu tạo file xác thực khi bạn đăng nhập lần đầu tiên
    private static final String TOKENS_DIRECTORY_PATH = "tokens";

    /**
     * Đây là thuộc tính chỉ phạm vi quyền thực hiện với trang tính, hiện đang để là chỉ đọc
     * Nếu sửa đổi quyền thì bạn cần xóa thư mục  tokens/ để đăng nhập lại
     */
    private static final List<String> SCOPES = Collections.singletonList(SheetsScopes.SPREADSHEETS_READONLY);
    private static final String CREDENTIALS_FILE_PATH = "/credentials.json";

    /**
     * Đây là function để lấy quyền xác thực 
     *Creates an authorized Credential object.
     * @param HTTP_TRANSPORT The network HTTP Transport.
     * @return An authorized Credential object.
     * @throws IOException If the credentials.json file cannot be found.
     */
    private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
        // Load client secrets.
        InputStream in = SheetsQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
        if (in == null) {
            throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
        }
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

        // Build flow and trigger user authorization request.
        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
                .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
                .setAccessType("offline")
                .build();
        LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
        return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
    }

    /**
      *Tương tác thử với một bảng tính để đọc dữ liệu bên trong
     * Prints the names and majors of students in a sample spreadsheet:
     * https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
     */
    public static void main(String... args) throws IOException, GeneralSecurityException {
        // Build a new authorized API client service.
        final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
        final String spreadsheetId = "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms";
        final String range = "Class Data!A2:E";
        Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
                .setApplicationName(APPLICATION_NAME)
                .build();
        ValueRange response = service.spreadsheets().values()
                .get(spreadsheetId, range)
                .execute();
        List<List<Object>> values = response.getValues();
        if (values == null || values.isEmpty()) {
            System.out.println("No data found.");
        } else {
            System.out.println("Name, Major");
            for (List row : values) {
                // Print columns A and E, which correspond to indices 0 and 4.
                System.out.printf("%s, %s\n", row.get(0), row.get(4));
            }
        }
    }
}Code language: JavaScript (javascript)

Bước 4: Tạo một số hàm đơn giản

Tạo một sheet mới

Để tạo một sheet mới chúng ta sử dụng đoạn code sau:

Spreadsheet spreadsheet = new Spreadsheet()
        .setProperties(new SpreadsheetProperties()
                .setTitle("Quan"));
spreadsheet = service.spreadsheets().create(spreadsheet)
        .setFields("spreadsheetId")
        .execute();
System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());Code language: JavaScript (javascript)

Lấy giá trị của một bảng tính

Ở đây chúng ta sẽ đọc dữ liệu trong bảng tính Quan từ cột A tới B , dòng 1 tới 3 tương tứng range = “Quan!A1:B3”

ValueRange result = service.spreadsheets().values().get(spreadsheetId, "Sheet Test!A1:B3").execute();
int numRows = result.getValues() != null ? result.getValues().size() : 0;
System.out.printf("%d rows retrieved.", numRows);Code language: JavaScript (javascript)

Leave a Reply

Your email address will not be published. Required fields are marked *