Cet article montre comment convertir MS Excel XLS ou XLSX en Google Sheets par programmation en Java.

Convertir Excel XLS ou XLSX en Google Sheets en Java

Google Sheets est une application en ligne populaire qui vous permet de créer et de manipuler des feuilles de calcul. De plus, il vous permet de partager les feuilles de calcul avec plusieurs personnes en temps réel. Par conséquent, vous devez souvent exporter les données des classeurs Excel vers une feuille de calcul dans Google Sheets par programme. Dans cet article, nous expliquerons en détail comment exporter des données Excel vers une feuille de calcul Google Sheets en Java.

Prérequis - Convertir un fichier Excel en Google Sheets en Java

Projet Google Cloud

Google Cloud est une plate-forme de cloud computing qui fournit différents types de services que nous pouvons utiliser dans nos applications. Pour utiliser l’API Google Sheets, nous devrons créer un projet sur la console Google Cloud et activer l’API Google Sheets. Vous pouvez lire le guide étape par étape sur comment créer un projet Google Cloud et activer l’API Sheets.

API Java pour la conversion d’Excel en Google Sheets

Pour exporter des données à partir de fichiers Excel XLS/XLSX vers Google Sheets, nous aurons besoin des API suivantes.

  • Aspose.Cells for Java - To read the data from Excel files.
  • API client Google pour Java - Pour créer et mettre à jour des feuilles de calcul sur Google Sheets.

Pour installer ces API, vous pouvez utiliser les configurations suivantes dans votre fichier pom.xml.

<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>

Exporter des données Excel vers Google Sheets en Java

Voici les étapes pour lire un fichier Excel, puis exporter ses données vers Google Sheets dans une application de console Java.

  1. Créez une nouvelle application Java (bureau).

  2. Installez Aspose.Cells for Java et les API client Google dans le projet, comme mentionné dans la section précédente.

  3. Copiez le fichier JSON (celui que nous avons téléchargé après avoir créé les identifiants dans Google Cloud) et collez-le dans le répertoire du projet.

  4. Spécifiez les étendues de l’application qui définissent les autorisations d’accès aux feuilles. Créez également des variables pour le chemin d’accès au répertoire de jetons et la fabrique JSON.

/**
 * Instance globale des étendues requises. Si vous modifiez ces étendues, supprimez
 * vos jetons / dossier précédemment enregistrés.
 */
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. Créez une méthode getCredentials qui autorise l’utilisateur à utiliser le fichier d’informations d’identification.
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
	// Charger les secrets du client
	InputStream in = new FileInputStream(new File("credentials.json"));
	GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

	// Créer un flux et déclencher une demande d'autorisation utilisateur
	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. Créez la méthode createSpreadsheet pour créer une nouvelle feuille de calcul sur Google Sheets et définissez le nom de la feuille par défaut. Cette méthode renvoie un objet Spreadsheet.
private static Spreadsheet createSpreadsheet(Sheets _service, String spreadsheetName, String _defaultSheetName)
		throws IOException {
	// Créer une nouvelle feuille de calcul
	Spreadsheet spreadsheet = new Spreadsheet()
			.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));

	// Créer une nouvelle feuille
	Sheet sheet = new Sheet();
	sheet.setProperties(new SheetProperties());
	sheet.getProperties().setTitle(_defaultSheetName);

	// Ajouter une feuille à la liste
	List<Sheet> sheetList = new ArrayList<Sheet>();
	sheetList.add(sheet);
	spreadsheet.setSheets(sheetList);

	// Exécuter la demande
	spreadsheet = _service.spreadsheets().create(spreadsheet).setFields("spreadsheetId").execute();
	System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());

	return spreadsheet;
}
  1. Créez une méthode addSheet pour ajouter une nouvelle feuille dans la feuille de calcul Google.
private static void addSheet(Sheets _service, String _spreadSheetID, String _sheetName) {
	try {
		// Ajouter une nouvelle feuille
		AddSheetRequest addSheetRequest = new AddSheetRequest();
		addSheetRequest.setProperties(new SheetProperties());
		addSheetRequest.getProperties().setTitle(_sheetName);

		// Créer une demande de mise à jour
		BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
		Request req = new Request();
		req.setAddSheet(addSheetRequest);
		batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
		batchUpdateSpreadsheetRequest.getRequests().add(req);

		// Exécuter la demande
		_service.spreadsheets().batchUpdate(_spreadSheetID, batchUpdateSpreadsheetRequest).execute();
	} catch (Exception e) {
		System.out.println("Error in creating sheet: " + e.getMessage());
	}
}
  1. Maintenant, créez la méthode exportExcelToGoogle et, dans cette méthode, initialisez le service Sheets.
// Créez un nouveau service client d'API autorisé.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
		.setApplicationName(APPLICATION_NAME).build();
  1. Ensuite, chargez le fichier Excel XLS/XLSX à l’aide d’Aspose.Cells for Java. Obtenez également le nom de la première feuille de calcul du classeur.
// Charger un classeur Excel
Workbook wb = new Workbook(_excelFileName);

// Obtenir le nom de la première feuille de calcul
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();

// Obtenir toutes les feuilles de travail
WorksheetCollection collection = wb.getWorksheets();
  1. Appelez la méthode createSpreadsheet pour créer une nouvelle feuille de calcul sur Google Sheets.
// Créer une nouvelle feuille de calcul Google avec une feuille de calcul par défaut
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
  1. Lisez les données de chaque feuille de calcul et enregistrez-les dans une liste.
String range;

// Parcourir les feuilles de calcul
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
	// Obtenir la référence de la feuille de calcul
	Worksheet ws = collection.get(worksheetIndex);

	if (worksheetIndex == 0) {
		// La première feuille est créée par défaut, donc ne définissez que la plage
		range = defaultWorksheetName + "!A:Y";
	} else {
		// Ajouter une nouvelle feuille
		addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
		range = ws.getName().trim() + "!A:Y";
	}

	// Obtenir le nombre de lignes et de colonnes
	int rows = ws.getCells().getMaxDataRow();
	int cols = ws.getCells().getMaxDataColumn();

	List<List<Object>> worksheetData = new ArrayList<List<Object>>();

	// Boucle à travers les lignes
	for (int i = 0; i <= rows; i++) {
		List<Object> rowData = new ArrayList<Object>();

		// Boucle sur chaque colonne de la ligne sélectionnée
		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());
		}

		// Ajouter aux données de la feuille de calcul
		worksheetData.add(rowData);
	}
  
  // À FAIRE : Exécuter la demande de publication de données sur Google Sheets 
}
  1. Pour chaque feuille de calcul du fichier Excel, créez une demande d’écriture de données dans la feuille de calcul dans Google Sheets.
// Définir la plage
ValueRange body = new ValueRange();
body.setRange(range);

// Définir les valeurs
body.setValues(worksheetData);

// Exporter des valeurs vers Google Sheets
UpdateValuesResponse result = service.spreadsheets().values()
		.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
		.execute();

// Sortie d'impression
System.out.printf("%d cells updated.", result.getUpdatedCells());

La méthode complète pour lire et exporter des données d’un fichier Excel vers une feuille de calcul dans Google Sheets est donnée ci-dessous.

private static void exportExcelToGoogle(String _excelFileName) {
	try {
		// Créez un nouveau service client d'API autorisé.
		final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
		
		Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
				.setApplicationName(APPLICATION_NAME).build();
		
		// Charger un classeur Excel
		Workbook wb = new Workbook(_excelFileName);
		
		// Obtenir le nom de la première feuille de calcul
		String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
		
		// Obtenir toutes les feuilles de travail
		WorksheetCollection collection = wb.getWorksheets();

		// Créer une nouvelle feuille de calcul Google avec une feuille de calcul par défaut
		Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);

		System.out.println("Spreadsheet URL: " + spreadsheet.getSpreadsheetUrl());
		System.out.println("ID: " + spreadsheet.getSpreadsheetId());

		String range;

		// Parcourir les feuilles de calcul
		for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
			// Obtenir la référence de la feuille de calcul
			Worksheet ws = collection.get(worksheetIndex);

			if (worksheetIndex == 0) {
				// La première feuille est créée par défaut, donc ne définissez que la plage
				range = defaultWorksheetName + "!A:Y";
			} else {
				// Ajouter une nouvelle feuille
				addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
				range = ws.getName().trim() + "!A:Y";
			}

			// Obtenir le nombre de lignes et de colonnes
			int rows = ws.getCells().getMaxDataRow();
			int cols = ws.getCells().getMaxDataColumn();

			List<List<Object>> worksheetData = new ArrayList<List<Object>>();

			// Boucle à travers les lignes
			for (int i = 0; i <= rows; i++) {
				List<Object> rowData = new ArrayList<Object>();

				// Boucle sur chaque colonne de la ligne sélectionnée
				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());
				}

				// Ajouter aux données de la feuille de calcul
				worksheetData.add(rowData);
			}

			// Définir la plage
			ValueRange body = new ValueRange();
			body.setRange(range);

			// Définir les valeurs
			body.setValues(worksheetData);

			// Exporter des valeurs vers Google Sheets
			UpdateValuesResponse result = service.spreadsheets().values()
					.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
					.execute();
			
			// Sortie d'impression
			System.out.printf("%d cells updated.", result.getUpdatedCells());

		}

		// Ouvrir la feuille de calcul Google dans le navigateur
		Desktop desk = Desktop.getDesktop();
		desk.browse(new URI("https://docs.google.com/spreadsheets/d/" + spreadsheet.getSpreadsheetId()));
	} catch (Exception e) {
		System.out.println(e.getMessage());
	}
}

Code source complet

Voici le code source complet pour convertir un fichier Excel XLSX en Google Sheets en 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 {

	/**
	 * Instance globale des étendues requises. Si vous modifiez ces étendues, supprimez
	 * vos jetons / dossier précédemment enregistrés.
	 */
	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 {		
		// Exporter des données Excel vers Google Sheets
		exportExcelToGoogle("workbook.xlsx");
	}

	private static void exportExcelToGoogle(String _excelFileName) {
		try {
			// Créez un nouveau service client d'API autorisé.
			final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
			
			Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
					.setApplicationName(APPLICATION_NAME).build();
			
			// Charger un classeur Excel
			Workbook wb = new Workbook(_excelFileName);
			
			// Obtenir le nom de la première feuille de calcul
			String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
			
			// Obtenir toutes les feuilles de travail
			WorksheetCollection collection = wb.getWorksheets();
	
			// Créer une nouvelle feuille de calcul Google avec une feuille de calcul par défaut
			Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
	
			String range;
	
			// Parcourir les feuilles de calcul
			for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
				// Obtenir la référence de la feuille de calcul
				Worksheet ws = collection.get(worksheetIndex);
	
				if (worksheetIndex == 0) {
					// La première feuille est créée par défaut, donc ne définissez que la plage
					range = defaultWorksheetName + "!A:Y";
				} else {
					// Ajouter une nouvelle feuille
					addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
					range = ws.getName().trim() + "!A:Y";
				}
	
				// Obtenir le nombre de lignes et de colonnes
				int rows = ws.getCells().getMaxDataRow();
				int cols = ws.getCells().getMaxDataColumn();
	
				List<List<Object>> worksheetData = new ArrayList<List<Object>>();
	
				// Boucle à travers les lignes
				for (int i = 0; i <= rows; i++) {
					List<Object> rowData = new ArrayList<Object>();
	
					// Boucle sur chaque colonne de la ligne sélectionnée
					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());
					}
	
					// Ajouter aux données de la feuille de calcul
					worksheetData.add(rowData);
				}
	
				// Définir la plage
				ValueRange body = new ValueRange();
				body.setRange(range);
	
				// Définir les valeurs
				body.setValues(worksheetData);
	
				// Exporter des valeurs vers Google Sheets
				UpdateValuesResponse result = service.spreadsheets().values()
						.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
						.execute();
				
				// Sortie d'impression
				System.out.printf("%d cells updated.", result.getUpdatedCells());
	
			}
	
			// Ouvrir la feuille de calcul Google dans le navigateur
			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 {
		// Créer une nouvelle feuille de calcul
		Spreadsheet spreadsheet = new Spreadsheet()
				.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));
	
		// Créer une nouvelle feuille
		Sheet sheet = new Sheet();
		sheet.setProperties(new SheetProperties());
		sheet.getProperties().setTitle(_defaultSheetName);
	
		// Ajouter une feuille à la liste
		List<Sheet> sheetList = new ArrayList<Sheet>();
		sheetList.add(sheet);
		spreadsheet.setSheets(sheetList);
	
		// Exécuter la demande
		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 {
			// Ajouter une nouvelle feuille
			AddSheetRequest addSheetRequest = new AddSheetRequest();
			addSheetRequest.setProperties(new SheetProperties());
			addSheetRequest.getProperties().setTitle(_sheetName);
	
			// Créer une demande de mise à jour
			BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
			Request req = new Request();
			req.setAddSheet(addSheetRequest);
			batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
			batchUpdateSpreadsheetRequest.getRequests().add(req);
	
			// Exécuter la demande
			_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 {
		// Charger les secrets du client
		InputStream in = new FileInputStream(new File("credentials.json"));
		GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
	
		// Créer un flux et déclencher une demande d'autorisation utilisateur
		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");
	}
}

Démo - Convertir des fichiers Excel en Google Sheets en Java

Obtenez une licence Aspose.Cells gratuite

Vous pouvez obtenir une licence temporaire gratuite et utiliser Aspose.Cells for Java sans limitation d’évaluation.

Conclusion

Dans cet article, vous avez appris à convertir des fichiers Excel XLS ou XLSX en Google Sheets par programmation en Java. Nous avons fourni les directives complètes sur la façon de créer un projet Google Cloud, d’activer l’API Google Sheets, de lire des fichiers Excel et d’exporter des données de fichiers Excel vers Google Sheets. Vous pouvez également consulter la documentation pour en savoir plus sur Aspose.Cells for Java. Si vous avez des questions ou des requêtes, faites-le nous savoir via notre forum.

Voir également