Questo articolo mostra come convertire MS Excel XLS o XLSX in Fogli Google a livello di codice in Java.

Converti Excel XLS o XLSX in Fogli Google 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.

  1. Creare una nuova applicazione Java (desktop).

  2. Installa Aspose.Cells per Java e le API client di Google nel progetto, come menzionato nella sezione precedente.

  3. Copia il file JSON (quello che abbiamo scaricato dopo aver creato le credenziali in Google Cloud) e incollalo nella directory del progetto.

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

Guarda anche