Questo articolo mostra come convertire MS Excel XLS o XLSX in Fogli Google a livello di codice in Java.
Fogli Google è una popolare applicazione online che ti consente di creare e manipolare fogli di lavoro. Inoltre, ti consente di condividere i fogli di calcolo con più persone in tempo reale. Pertanto, spesso devi esportare i dati dalle cartelle di lavoro Excel in un foglio di lavoro in Fogli Google in modo programmatico. In questo articolo, forniremo una panoramica completa su come esportare i dati di Excel in un foglio di lavoro di Fogli Google in Java.
Prerequisiti - Converti file Excel in Fogli Google in Java
Progetto Google Cloud
Google Cloud è una piattaforma di cloud computing, che fornisce vari tipi di servizi che possiamo utilizzare nelle nostre applicazioni. Per utilizzare l’API Fogli Google, dovremo creare un progetto sulla console Google Cloud e abilitare l’API Fogli Google. Puoi leggere la guida passo passo su come creare un progetto Google Cloud e abilitare l’API Fogli.
API Java per la conversione da Excel a Fogli Google
Per esportare i dati dai file XLS/XLSX di Excel a Fogli Google, avremo bisogno delle seguenti API.
- Aspose.Cells per Java - To read the data from Excel files.
- API client di Google per Java: per creare e aggiornare fogli di lavoro su Fogli Google.
Per installare queste API, puoi utilizzare le seguenti configurazioni nel tuo file 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>
Esporta i dati di Excel in Fogli Google in Java
Di seguito sono riportati i passaggi per leggere un file Excel e quindi esportarne i dati in Fogli Google in un’applicazione console Java.
Creare una nuova applicazione Java (desktop).
Installa Aspose.Cells per Java e le API client di Google nel progetto, come menzionato nella sezione precedente.
Copia il file JSON (quello che abbiamo scaricato dopo aver creato le credenziali in Google Cloud) e incollalo nella directory del progetto.
Specificare gli ambiti dell’applicazione che definiscono le autorizzazioni di accesso ai fogli. Inoltre, crea variabili per il percorso della directory del token e la fabbrica JSON.
/**
* Istanza globale degli ambiti richiesti. Se si modificano questi ambiti, eliminare
* i token/cartella precedentemente salvati.
*/
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);
- Creare un metodo getCredentials che autorizzi l’utente a utilizzare il file delle credenziali.
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
// Carica i segreti del client
InputStream in = new FileInputStream(new File("credentials.json"));
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Crea flusso e attiva la richiesta di autorizzazione dell'utente
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");
}
- Crea il metodo createSpreadsheet per creare un nuovo foglio di calcolo su Fogli Google e impostare il nome del foglio predefinito. Questo metodo restituisce un oggetto Spreadsheet.
private static Spreadsheet createSpreadsheet(Sheets _service, String spreadsheetName, String _defaultSheetName)
throws IOException {
// Crea un nuovo foglio di calcolo
Spreadsheet spreadsheet = new Spreadsheet()
.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));
// Crea un nuovo foglio
Sheet sheet = new Sheet();
sheet.setProperties(new SheetProperties());
sheet.getProperties().setTitle(_defaultSheetName);
// Aggiungi foglio all'elenco
List<Sheet> sheetList = new ArrayList<Sheet>();
sheetList.add(sheet);
spreadsheet.setSheets(sheetList);
// Esegui richiesta
spreadsheet = _service.spreadsheets().create(spreadsheet).setFields("spreadsheetId").execute();
System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());
return spreadsheet;
}
- Crea un metodo addSheet per aggiungere un nuovo foglio nel foglio di lavoro di Google.
private static void addSheet(Sheets _service, String _spreadSheetID, String _sheetName) {
try {
// Aggiungi nuovo foglio
AddSheetRequest addSheetRequest = new AddSheetRequest();
addSheetRequest.setProperties(new SheetProperties());
addSheetRequest.getProperties().setTitle(_sheetName);
// Crea richiesta di aggiornamento
BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
Request req = new Request();
req.setAddSheet(addSheetRequest);
batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
batchUpdateSpreadsheetRequest.getRequests().add(req);
// Esegui richiesta
_service.spreadsheets().batchUpdate(_spreadSheetID, batchUpdateSpreadsheetRequest).execute();
} catch (Exception e) {
System.out.println("Error in creating sheet: " + e.getMessage());
}
}
- Ora crea il metodo exportExcelToGoogle e, in questo metodo, inizializza il servizio Fogli.
// Crea un nuovo servizio client API autorizzato.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME).build();
- Quindi, caricare il file XLS/XLSX di Excel utilizzando Aspose.Cells per Java. Inoltre, ottieni il nome del primo foglio di lavoro nella cartella di lavoro.
// Carica una cartella di lavoro di Excel
Workbook wb = new Workbook(_excelFileName);
// Ottieni il nome del primo foglio di lavoro
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
// Ottieni tutti i fogli di lavoro
WorksheetCollection collection = wb.getWorksheets();
- Chiama il metodo createSpreadsheet per creare un nuovo foglio di calcolo su Fogli Google.
// Crea un nuovo foglio di lavoro Google con il foglio di lavoro predefinito
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
- Leggi i dati da ciascun foglio di lavoro e salvalo in un elenco.
String range;
// Scorri i fogli di lavoro
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
// Ottieni il riferimento del foglio di lavoro
Worksheet ws = collection.get(worksheetIndex);
if (worksheetIndex == 0) {
// Il primo foglio viene creato per impostazione predefinita, quindi imposta solo l'intervallo
range = defaultWorksheetName + "!A:Y";
} else {
// Aggiungi un nuovo foglio
addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
range = ws.getName().trim() + "!A:Y";
}
// Ottieni il numero di righe e colonne
int rows = ws.getCells().getMaxDataRow();
int cols = ws.getCells().getMaxDataColumn();
List<List<Object>> worksheetData = new ArrayList<List<Object>>();
// Passa attraverso le righe
for (int i = 0; i <= rows; i++) {
List<Object> rowData = new ArrayList<Object>();
// Scorri ogni colonna nella riga selezionata
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());
}
// Aggiungi ai dati del foglio di lavoro
worksheetData.add(rowData);
}
// DA FARE: esegui la richiesta di pubblicare dati su Fogli Google
}
- Per ogni foglio di lavoro nel file Excel, crea una richiesta per scrivere i dati nel foglio di lavoro in Fogli Google.
// Imposta la gamma
ValueRange body = new ValueRange();
body.setRange(range);
// Imposta i valori
body.setValues(worksheetData);
// Esporta valori in Fogli Google
UpdateValuesResponse result = service.spreadsheets().values()
.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
.execute();
// Output di stampa
System.out.printf("%d cells updated.", result.getUpdatedCells());
Di seguito è riportato il metodo completo per leggere ed esportare i dati da un file Excel a un foglio di calcolo in Fogli Google.
private static void exportExcelToGoogle(String _excelFileName) {
try {
// Crea un nuovo servizio client API autorizzato.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME).build();
// Carica una cartella di lavoro di Excel
Workbook wb = new Workbook(_excelFileName);
// Ottieni il nome del primo foglio di lavoro
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
// Ottieni tutti i fogli di lavoro
WorksheetCollection collection = wb.getWorksheets();
// Crea un nuovo foglio di lavoro Google con il foglio di lavoro predefinito
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
System.out.println("Spreadsheet URL: " + spreadsheet.getSpreadsheetUrl());
System.out.println("ID: " + spreadsheet.getSpreadsheetId());
String range;
// Scorri i fogli di lavoro
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
// Ottieni il riferimento del foglio di lavoro
Worksheet ws = collection.get(worksheetIndex);
if (worksheetIndex == 0) {
// Il primo foglio viene creato per impostazione predefinita, quindi imposta solo l'intervallo
range = defaultWorksheetName + "!A:Y";
} else {
// Aggiungi un nuovo foglio
addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
range = ws.getName().trim() + "!A:Y";
}
// Ottieni il numero di righe e colonne
int rows = ws.getCells().getMaxDataRow();
int cols = ws.getCells().getMaxDataColumn();
List<List<Object>> worksheetData = new ArrayList<List<Object>>();
// Passa attraverso le righe
for (int i = 0; i <= rows; i++) {
List<Object> rowData = new ArrayList<Object>();
// Scorri ogni colonna nella riga selezionata
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());
}
// Aggiungi ai dati del foglio di lavoro
worksheetData.add(rowData);
}
// Imposta la gamma
ValueRange body = new ValueRange();
body.setRange(range);
// Imposta i valori
body.setValues(worksheetData);
// Esporta valori in Fogli Google
UpdateValuesResponse result = service.spreadsheets().values()
.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
.execute();
// Output di stampa
System.out.printf("%d cells updated.", result.getUpdatedCells());
}
// Apri il foglio di lavoro di Google nel 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());
}
}
Codice sorgente completo
Di seguito è riportato il codice sorgente completo per convertire un file XLSX di Excel in Fogli Google in 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 {
/**
* Istanza globale degli ambiti richiesti. Se si modificano questi ambiti, eliminare
* i token/cartella precedentemente salvati.
*/
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 {
// Esporta i dati di Excel in Fogli Google
exportExcelToGoogle("workbook.xlsx");
}
private static void exportExcelToGoogle(String _excelFileName) {
try {
// Crea un nuovo servizio client API autorizzato.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME).build();
// Carica una cartella di lavoro di Excel
Workbook wb = new Workbook(_excelFileName);
// Ottieni il nome del primo foglio di lavoro
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
// Ottieni tutti i fogli di lavoro
WorksheetCollection collection = wb.getWorksheets();
// Crea un nuovo foglio di lavoro Google con il foglio di lavoro predefinito
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
String range;
// Scorri i fogli di lavoro
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
// Ottieni il riferimento del foglio di lavoro
Worksheet ws = collection.get(worksheetIndex);
if (worksheetIndex == 0) {
// Il primo foglio viene creato per impostazione predefinita, quindi imposta solo l'intervallo
range = defaultWorksheetName + "!A:Y";
} else {
// Aggiungi un nuovo foglio
addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
range = ws.getName().trim() + "!A:Y";
}
// Ottieni il numero di righe e colonne
int rows = ws.getCells().getMaxDataRow();
int cols = ws.getCells().getMaxDataColumn();
List<List<Object>> worksheetData = new ArrayList<List<Object>>();
// Passa attraverso le righe
for (int i = 0; i <= rows; i++) {
List<Object> rowData = new ArrayList<Object>();
// Scorri ogni colonna nella riga selezionata
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());
}
// Aggiungi ai dati del foglio di lavoro
worksheetData.add(rowData);
}
// Imposta la gamma
ValueRange body = new ValueRange();
body.setRange(range);
// Imposta i valori
body.setValues(worksheetData);
// Esporta valori in Fogli Google
UpdateValuesResponse result = service.spreadsheets().values()
.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
.execute();
// Output di stampa
System.out.printf("%d cells updated.", result.getUpdatedCells());
}
// Apri il foglio di lavoro di Google nel 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 {
// Crea un nuovo foglio di calcolo
Spreadsheet spreadsheet = new Spreadsheet()
.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));
// Crea un nuovo foglio
Sheet sheet = new Sheet();
sheet.setProperties(new SheetProperties());
sheet.getProperties().setTitle(_defaultSheetName);
// Aggiungi foglio all'elenco
List<Sheet> sheetList = new ArrayList<Sheet>();
sheetList.add(sheet);
spreadsheet.setSheets(sheetList);
// Esegui richiesta
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 {
// Aggiungi nuovo foglio
AddSheetRequest addSheetRequest = new AddSheetRequest();
addSheetRequest.setProperties(new SheetProperties());
addSheetRequest.getProperties().setTitle(_sheetName);
// Crea richiesta di aggiornamento
BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
Request req = new Request();
req.setAddSheet(addSheetRequest);
batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
batchUpdateSpreadsheetRequest.getRequests().add(req);
// Esegui richiesta
_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 {
// Carica i segreti del client
InputStream in = new FileInputStream(new File("credentials.json"));
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Crea flusso e attiva la richiesta di autorizzazione dell'utente
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: converti file Excel in fogli Google in Java
Ottieni una licenza Aspose.Cells gratuita
Puoi ottenere una licenza temporanea gratuita e utilizzare Aspose.Cells per Java senza limitazioni di valutazione.
Conclusione
In questo articolo, hai imparato come convertire i file XLS o XLSX di Excel in Fogli Google in modo programmatico in Java. Abbiamo fornito le linee guida complete su come creare un progetto Google Cloud, abilitare l’API di Fogli Google, leggere file Excel ed esportare dati da file Excel a Fogli Google. Puoi anche visitare la documentazione per saperne di più su Aspose.Cells per Java. In caso di domande o domande, faccelo sapere tramite il nostro forum.