Artikel ini menunjukkan cara mengonversi MS Excel XLS atau XLSX ke Google Sheets secara terprogram di Java.

Konversi Excel XLS atau XLSX ke Google Sheets 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.

  1. Buat aplikasi Java baru (desktop).

  2. Instal Aspose.Cells for Java dan Google Client API di proyek, seperti yang disebutkan di bagian sebelumnya.

  3. Salin file JSON (yang telah kita unduh setelah membuat kredensial di Google Cloud) dan tempelkan ke direktori proyek.

  4. 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);
  1. 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");
}
  1. 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;
}
  1. 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());
	}
}
  1. 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();
  1. 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();
  1. 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);
  1. 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 
}
  1. 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.

Lihat juga