Thao tác với google sheet bằng Java

Google™ Spreadsheets là chương trình bảng tính miễn phí của google, tuy không đầy đủ như là excel nhưng nó sở hữu nhiều tính năng phong phú và đa dạng của điện toán đám mây giúp cho bạn có thể làm việc một cách hiệu quả.

Trong bài viết này tôi sẽ giới thiệu việc sử dụng ngôn ngữ JAVA để thao tác với Google Sheet API


Điều kiện cần phải có

   - Phiên bản java > 1.7
   - Maven
   - Máy tính phải truy cập được internet
   - Có 1 tài khoản gmail


2.Bật Google Sheet API ở tài khoản của bạn

-- Truy cập địa chỉ Enable Google Sheet API

enabled_google_api.png

=> Download file client_id.json để cho cho vào project

3.Cấu trúc thư mục source code

Screen Shot 2016-05-24 at 13.38.26.png

4.Source code tham khảo

package com.javagdata;

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.HttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.sheets.v4.SheetsScopes;
import com.google.api.services.sheets.v4.model.*;
import com.google.api.services.sheets.v4.Sheets;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;

public class SheetsQuickstart {
    private static final String APPLICATION_NAME = "Google Sheets API Java";

    private static final java.io.File DATA_STORE_DIR =
        new java.io.File(
            System.getProperty("user.home"),
            ".credentials/client_secret_674700710104-vbfa8enkg66l2gohr18d9oal4sp27r73.apps.googleusercontent.com.json");

    private static FileDataStoreFactory DATA_STORE_FACTORY;

    private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();

    private static HttpTransport HTTP_TRANSPORT;

    private static final List<String> SCOPES = Arrays.asList(SheetsScopes.SPREADSHEETS_READONLY);

    static {
        try {
            HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
            DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
        } catch (Throwable t) {
            t.printStackTrace();
            System.exit(1);
        }
    }

    public static Credential authorize() throws IOException {
        InputStream in = SheetsQuickstart.class.getResourceAsStream("/client_id.json");
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

        GoogleAuthorizationCodeFlow flow =
            new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
                .setDataStoreFactory(DATA_STORE_FACTORY)
                .setAccessType("offline")
                .build();
        Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
        System.out.println("Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
        return credential;
    }

    public static Sheets getSheetsService() throws IOException {
        Credential credential = authorize();
        return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
    }

    public static void main(String[] args) throws IOException {
        Sheets service = getSheetsService();

        // https://docs.google.com/spreadsheets/d/1py_1x30bHKuFWqOIp1ihouGJ5yTZgrZ0qOOyJSwOieo/edit#gid=0
        String spreadsheetId = "1py_1x30bHKuFWqOIp1ihouGJ5yTZgrZ0qOOyJSwOieo";
        String range = "Sheet1!A1:C";
        ValueRange response = service.spreadsheets().values().get(spreadsheetId, range).execute();
        List<List<Object>> values = response.getValues();
        if (values == null || values.size() == 0) {
            System.out.println("No data found.");
        } else {
            for (List row : values) {
                System.out.println(row.get(0) + "\t" + row.get(1) + "\t" + row.get(2));
            }
        }
    }
}

Chú ý khi lấy speedsheetId:

https://docs.google.com/spreadsheets/d/1py_1x30bHKuFWqOIp1ihouGJ5yTZgrZ0qOOyJSwOieo/edit?usp=sharing

==> spreadsheetId: 1py_1x30bHKuFWqOIp1ihouGJ5yTZgrZ0qOOyJSwOieo

Tiến hành chạy thử, sau đây là kết quả

Credentials saved to /Users/framgiavn/.credentials/client_secret_674700710104-vbfa8enkg66l2gohr18d9oal4sp27r73.apps.googleusercontent.com.json
East	Jones	Pencil
Central	Kivell	Binder
Central	Jardine	Pencil
Central	Gill	Pen
West	Sorvino	Pencil
East	Jones	Binder
Central	Andrews	Pencil
Central	Jardine	Pencil
West	Thompson	Pencil
East	Jones	Binder
Central	Morgan	Pencil
East	Howard	Binder
East	Parent	Binder
East	Jones	Pencil
Central	Smith	Desk
East	Jones	Pen Set
Central	Morgan	Binder


All Rights Reserved