Cet article montre comment convertir MS Excel XLS ou XLSX en Google Sheets par programmation 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.
Créez une nouvelle application Java (bureau).
Installez Aspose.Cells for Java et les API client Google dans le projet, comme mentionné dans la section précédente.
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.
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);
- 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");
}
- 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;
}
- 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());
}
}
- 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();
- 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();
- 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);
- 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
}
- 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.