Artikel ini menunjukkan cara mengonversi MS Excel XLS atau XLSX ke Google Sheets secara terprogram di Java.
Google Sheets adalah aplikasi online populer yang memungkinkan Anda membuat dan memanipulasi dokumen spreadsheet. Selain itu, ini memungkinkan Anda untuk berbagi spreadsheet dengan banyak orang secara waktu nyata. Oleh karena itu, sering kali Anda harus mengekspor data dari buku kerja Excel ke spreadsheet di Google Sheets secara terprogram. Pada artikel ini, kami akan memberikan panduan lengkap tentang cara mengekspor data Excel ke Google Sheets di Java.
Prasyarat - Ekspor Data Excel ke Google Spreadsheet di Java
Proyek Google Cloud
Google Cloud adalah platform komputasi awan, yang menyediakan berbagai jenis layanan yang dapat kita manfaatkan dalam aplikasi kita. Untuk menggunakan Google Sheets API, kita harus membuat proyek di Google Cloud Console dan mengaktifkan Google Sheets API. Anda dapat membaca panduan langkah demi langkah tentang cara membuat proyek Google Cloud dan mengaktifkan Sheets API.
API Java untuk Mengekspor Data Excel ke Google Sheets
Untuk mengekspor data dari file Excel XLS/XLSX ke Google Sheets, kita memerlukan API berikut.
- Aspose.Cells for Java - To read the data from Excel files.
- API Klien Google untuk Java - Untuk membuat dan memperbarui spreadsheet di Google Sheets.
Untuk menginstal API ini, Anda dapat menggunakan konfigurasi berikut di file pom.xml Anda.
<repositories>
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>http://repository.aspose.com/repo/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client-gson</artifactId>
<version>1.33.0</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>1.32.1</version>
</dependency>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-sheets</artifactId>
<version>v4-rev20210629-1.32.1</version>
</dependency>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-cells</artifactId>
<version>22.2</version>
</dependency>
</dependencies>
Ekspor Data Excel ke Google Sheets di Java
Berikut adalah langkah-langkah untuk membaca file Excel dan kemudian mengekspor datanya ke Google Sheets di aplikasi konsol Java.
Buat aplikasi Java baru (desktop).
Instal Aspose.Cells for Java dan Google Client API di proyek, seperti yang disebutkan di bagian sebelumnya.
Salin file JSON (yang telah kita unduh setelah membuat kredensial di Google Cloud) dan tempelkan ke direktori proyek.
Tentukan cakupan aplikasi yang menentukan izin akses ke sheet. Juga, buat variabel untuk jalur direktori token dan pabrik JSON.
/**
* Contoh global dari cakupan yang diperlukan. Jika mengubah cakupan ini, hapus
* token/ folder yang Anda simpan sebelumnya.
*/
private static final String APPLICATION_NAME = "Google Sheets API Java Quickstart";
private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
private static final String TOKENS_DIRECTORY_PATH = "tokens";
private static final List<String> SCOPES = Collections.singletonList(SheetsScopes.SPREADSHEETS);
- Buat metode getCredentials yang mengizinkan pengguna menggunakan file kredensial.
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
// Muat rahasia klien
InputStream in = new FileInputStream(new File("credentials.json"));
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Membangun alur dan memicu permintaan otorisasi pengguna
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");
}
- Buat metode createSpreadsheet untuk membuat spreadsheet baru di Google Sheets dan atur nama sheet default. Metode ini mengembalikan objek Spreadsheet.
private static Spreadsheet createSpreadsheet(Sheets _service, String spreadsheetName, String _defaultSheetName)
throws IOException {
// Buat spreadsheet baru
Spreadsheet spreadsheet = new Spreadsheet()
.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));
// Buat lembar baru
Sheet sheet = new Sheet();
sheet.setProperties(new SheetProperties());
sheet.getProperties().setTitle(_defaultSheetName);
// Tambahkan lembar ke daftar
List<Sheet> sheetList = new ArrayList<Sheet>();
sheetList.add(sheet);
spreadsheet.setSheets(sheetList);
// Jalankan permintaan
spreadsheet = _service.spreadsheets().create(spreadsheet).setFields("spreadsheetId").execute();
System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());
return spreadsheet;
}
- Buat metode addSheet untuk menambahkan sheet baru di spreadsheet Google.
private static void addSheet(Sheets _service, String _spreadSheetID, String _sheetName) {
try {
// Tambahkan Lembar baru
AddSheetRequest addSheetRequest = new AddSheetRequest();
addSheetRequest.setProperties(new SheetProperties());
addSheetRequest.getProperties().setTitle(_sheetName);
// Buat permintaan pembaruan
BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
Request req = new Request();
req.setAddSheet(addSheetRequest);
batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
batchUpdateSpreadsheetRequest.getRequests().add(req);
// Jalankan permintaan
_service.spreadsheets().batchUpdate(_spreadSheetID, batchUpdateSpreadsheetRequest).execute();
} catch (Exception e) {
System.out.println("Error in creating sheet: " + e.getMessage());
}
}
- Sekarang, buat metode exportExcelToGoogle, dan dalam metode ini, inisialisasi layanan Sheets.
// Bangun layanan klien API resmi baru.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME).build();
- Kemudian, muat file XLS/XLSX Excel menggunakan Aspose.Cells for Java. Juga, dapatkan nama lembar kerja pertama di buku kerja.
// Muat buku kerja Excel
Workbook wb = new Workbook(_excelFileName);
// Dapatkan nama lembar kerja pertama
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
// Dapatkan semua lembar kerja
WorksheetCollection collection = wb.getWorksheets();
- Panggil metode createSpreadsheet untuk membuat spreadsheet baru di Google Sheets.
// Buat spreadsheet Google baru dengan lembar kerja default
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
- Baca data dari setiap lembar kerja dan simpan ke dalam daftar.
String range;
// Ulangi lembar kerja
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
// Dapatkan referensi lembar kerja
Worksheet ws = collection.get(worksheetIndex);
if (worksheetIndex == 0) {
// Lembar pertama dibuat secara default, jadi hanya atur rentang
range = defaultWorksheetName + "!A:Y";
} else {
// Tambahkan lembar baru
addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
range = ws.getName().trim() + "!A:Y";
}
// Dapatkan jumlah baris dan kolom
int rows = ws.getCells().getMaxDataRow();
int cols = ws.getCells().getMaxDataColumn();
List<List<Object>> worksheetData = new ArrayList<List<Object>>();
// Ulangi baris
for (int i = 0; i <= rows; i++) {
List<Object> rowData = new ArrayList<Object>();
// Ulangi setiap kolom di baris yang dipilih
for (int j = 0; j <= cols; j++) {
if (ws.getCells().get(i, j).getValue() == null)
rowData.add("");
else
rowData.add(ws.getCells().get(i, j).getValue());
}
// Tambahkan ke data lembar kerja
worksheetData.add(rowData);
}
// LAKUKAN: Jalankan permintaan untuk memposting data ke Google Sheets
}
- Untuk setiap lembar kerja di file Excel, buat permintaan untuk menulis data ke spreadsheet di Google Sheets.
// Tetapkan rentang
ValueRange body = new ValueRange();
body.setRange(range);
// Tetapkan nilai
body.setValues(worksheetData);
// Ekspor nilai ke Google Spreadsheet
UpdateValuesResponse result = service.spreadsheets().values()
.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
.execute();
// Hasil cetak
System.out.printf("%d cells updated.", result.getUpdatedCells());
Metode lengkap untuk membaca dan mengekspor data dari file Excel ke spreadsheet di Google Sheets diberikan di bawah ini.
private static void exportExcelToGoogle(String _excelFileName) {
try {
// Bangun layanan klien API resmi baru.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME).build();
// Muat buku kerja Excel
Workbook wb = new Workbook(_excelFileName);
// Dapatkan nama lembar kerja pertama
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
// Dapatkan semua lembar kerja
WorksheetCollection collection = wb.getWorksheets();
// Buat spreadsheet Google baru dengan lembar kerja default
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
System.out.println("Spreadsheet URL: " + spreadsheet.getSpreadsheetUrl());
System.out.println("ID: " + spreadsheet.getSpreadsheetId());
String range;
// Ulangi lembar kerja
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
// Dapatkan referensi lembar kerja
Worksheet ws = collection.get(worksheetIndex);
if (worksheetIndex == 0) {
// Lembar pertama dibuat secara default, jadi hanya atur rentang
range = defaultWorksheetName + "!A:Y";
} else {
// Tambahkan lembar baru
addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
range = ws.getName().trim() + "!A:Y";
}
// Dapatkan jumlah baris dan kolom
int rows = ws.getCells().getMaxDataRow();
int cols = ws.getCells().getMaxDataColumn();
List<List<Object>> worksheetData = new ArrayList<List<Object>>();
// Ulangi baris
for (int i = 0; i <= rows; i++) {
List<Object> rowData = new ArrayList<Object>();
// Ulangi setiap kolom di baris yang dipilih
for (int j = 0; j <= cols; j++) {
if (ws.getCells().get(i, j).getValue() == null)
rowData.add("");
else
rowData.add(ws.getCells().get(i, j).getValue());
}
// Tambahkan ke data lembar kerja
worksheetData.add(rowData);
}
// Tetapkan rentang
ValueRange body = new ValueRange();
body.setRange(range);
// Tetapkan nilai
body.setValues(worksheetData);
// Ekspor nilai ke Google Spreadsheet
UpdateValuesResponse result = service.spreadsheets().values()
.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
.execute();
// Hasil cetak
System.out.printf("%d cells updated.", result.getUpdatedCells());
}
// Buka spreadsheet Google di browser
Desktop desk = Desktop.getDesktop();
desk.browse(new URI("https://docs.google.com/spreadsheets/d/" + spreadsheet.getSpreadsheetId()));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
Kode Sumber Lengkap
Berikut ini adalah kode sumber lengkap untuk mengonversi file Excel XLSX ke Google Sheets di Java.
package excel_to_google_sheets;
import com.aspose.cells.Workbook;
import com.aspose.cells.Worksheet;
import com.aspose.cells.WorksheetCollection;
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.gson.GsonFactory;
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.AddSheetRequest;
import com.google.api.services.sheets.v4.model.BatchUpdateSpreadsheetRequest;
import com.google.api.services.sheets.v4.model.Request;
import com.google.api.services.sheets.v4.model.Sheet;
import com.google.api.services.sheets.v4.model.SheetProperties;
import com.google.api.services.sheets.v4.model.Spreadsheet;
import com.google.api.services.sheets.v4.model.SpreadsheetProperties;
import com.google.api.services.sheets.v4.model.UpdateValuesResponse;
import com.google.api.services.sheets.v4.model.ValueRange;
import java.awt.Desktop;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ExportExcelToGoogle {
/**
* Contoh global dari cakupan yang diperlukan. Jika mengubah cakupan ini, hapus
* token/ folder yang Anda simpan sebelumnya.
*/
private static final String APPLICATION_NAME = "Google Sheets API Java Quickstart";
private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
private static final String TOKENS_DIRECTORY_PATH = "tokens";
private static final List<String> SCOPES = Collections.singletonList(SheetsScopes.SPREADSHEETS);
public static void main(String[] args) throws Exception {
// Ekspor data Excel ke Google Spreadsheet
exportExcelToGoogle("workbook.xlsx");
}
private static void exportExcelToGoogle(String _excelFileName) {
try {
// Bangun layanan klien API resmi baru.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME).build();
// Muat buku kerja Excel
Workbook wb = new Workbook(_excelFileName);
// Dapatkan nama lembar kerja pertama
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
// Dapatkan semua lembar kerja
WorksheetCollection collection = wb.getWorksheets();
// Buat spreadsheet Google baru dengan lembar kerja default
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
String range;
// Ulangi lembar kerja
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
// Dapatkan referensi lembar kerja
Worksheet ws = collection.get(worksheetIndex);
if (worksheetIndex == 0) {
// Lembar pertama dibuat secara default, jadi hanya atur rentang
range = defaultWorksheetName + "!A:Y";
} else {
// Tambahkan lembar baru
addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
range = ws.getName().trim() + "!A:Y";
}
// Dapatkan jumlah baris dan kolom
int rows = ws.getCells().getMaxDataRow();
int cols = ws.getCells().getMaxDataColumn();
List<List<Object>> worksheetData = new ArrayList<List<Object>>();
// Ulangi baris
for (int i = 0; i <= rows; i++) {
List<Object> rowData = new ArrayList<Object>();
// Ulangi setiap kolom di baris yang dipilih
for (int j = 0; j <= cols; j++) {
if (ws.getCells().get(i, j).getValue() == null)
rowData.add("");
else
rowData.add(ws.getCells().get(i, j).getValue());
}
// Tambahkan ke data lembar kerja
worksheetData.add(rowData);
}
// Tetapkan rentang
ValueRange body = new ValueRange();
body.setRange(range);
// Tetapkan nilai
body.setValues(worksheetData);
// Ekspor nilai ke Google Spreadsheet
UpdateValuesResponse result = service.spreadsheets().values()
.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
.execute();
// Hasil cetak
System.out.printf("%d cells updated.", result.getUpdatedCells());
}
// Buka spreadsheet Google di browser
Desktop desk = Desktop.getDesktop();
desk.browse(new URI("https://docs.google.com/spreadsheets/d/" + spreadsheet.getSpreadsheetId()));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
private static Spreadsheet createSpreadsheet(Sheets _service, String spreadsheetName, String _defaultSheetName)
throws IOException {
// Buat spreadsheet baru
Spreadsheet spreadsheet = new Spreadsheet()
.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));
// Buat lembar baru
Sheet sheet = new Sheet();
sheet.setProperties(new SheetProperties());
sheet.getProperties().setTitle(_defaultSheetName);
// Tambahkan lembar ke daftar
List<Sheet> sheetList = new ArrayList<Sheet>();
sheetList.add(sheet);
spreadsheet.setSheets(sheetList);
// Jalankan permintaan
spreadsheet = _service.spreadsheets().create(spreadsheet).setFields("spreadsheetId").execute();
System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());
return spreadsheet;
}
private static void addSheet(Sheets _service, String _spreadSheetID, String _sheetName) {
try {
// Tambahkan Lembar baru
AddSheetRequest addSheetRequest = new AddSheetRequest();
addSheetRequest.setProperties(new SheetProperties());
addSheetRequest.getProperties().setTitle(_sheetName);
// Buat permintaan pembaruan
BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
Request req = new Request();
req.setAddSheet(addSheetRequest);
batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
batchUpdateSpreadsheetRequest.getRequests().add(req);
// Jalankan permintaan
_service.spreadsheets().batchUpdate(_spreadSheetID, batchUpdateSpreadsheetRequest).execute();
} catch (Exception e) {
System.out.println("Error in creating sheet: " + e.getMessage());
}
}
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
// Muat rahasia klien
InputStream in = new FileInputStream(new File("credentials.json"));
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Membangun alur dan memicu permintaan otorisasi pengguna
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");
}
}
Demo - Konversi Excel ke Google Sheets di Java
API Java Excel ke Google Sheets - Dapatkan Lisensi Gratis
Anda bisa mendapatkan [lisensi sementara] gratis 6 dan menggunakan Aspose.Cells for Java tanpa batasan evaluasi.
Kesimpulan
Pada artikel ini, Anda telah mempelajari cara mengekspor file Excel XLS atau XLSX ke Google Sheets secara terprogram di Java. Kami telah memberikan panduan lengkap tentang cara membuat proyek Google Cloud, mengaktifkan Google Sheets API, membaca file Excel, dan mengekspor data dari file Excel ke Google Sheets. Anda juga dapat mengunjungi dokumentasi untuk membaca lebih lanjut tentang Aspose.Cells for Java. Jika Anda memiliki pertanyaan atau pertanyaan, beri tahu kami melalui forum kami.