Este artículo muestra cómo convertir MS Excel XLS o XLSX a Google Sheets mediante programación en Java.

Convierta Excel XLS o XLSX a Google Sheets en Java

Hojas de cálculo de Google es una popular aplicación en línea que le permite crear y manipular documentos de hojas de cálculo. Además, le permite compartir las hojas de cálculo con varias personas en tiempo real. Por lo tanto, a menudo tiene que exportar datos de libros de trabajo de Excel a una hoja de cálculo en Hojas de cálculo de Google mediante programación. En este artículo, daremos un recorrido completo de cómo exportar datos de Excel a una hoja de cálculo de Google Sheets en Java.

Requisitos previos: convertir archivos de Excel a hojas de cálculo de Google en Java

Proyecto de nube de Google

Google Cloud es una plataforma de computación en la nube que proporciona varios tipos de servicios que podemos utilizar en nuestras aplicaciones. Para usar la API de Google Sheets, tendremos que crear un proyecto en la consola de Google Cloud y habilitar la API de Google Sheets. Puede leer la guía paso a paso sobre cómo crear un proyecto de Google Cloud y habilitar Sheets API.

API de Java para la conversión de hojas de cálculo de Excel a Google

Para exportar datos de archivos Excel XLS/XLSX a Hojas de cálculo de Google, necesitaremos las siguientes API.

  • Aspose.Cells for Java - To read the data from Excel files.
  • API de cliente de Google para Java: para crear y actualizar hojas de cálculo en Hojas de cálculo de Google.

Para instalar estas API, puede usar las siguientes configuraciones en su archivo 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>

Exportar datos de Excel a Google Sheets en Java

Los siguientes son los pasos para leer un archivo de Excel y luego exportar sus datos a Hojas de cálculo de Google en una aplicación de consola Java.

  1. Cree una nueva aplicación Java (escritorio).

  2. Instale Aspose.Cells for Java y las API de cliente de Google en el proyecto, como se mencionó en la sección anterior.

  3. Copia el archivo JSON (el que hemos descargado tras crear las credenciales en Google Cloud) y pégalo en el directorio del proyecto.

  4. Especifique los ámbitos de la aplicación que definen los permisos de acceso a las hojas. Además, cree variables para la ruta del directorio del token y la fábrica JSON.

/**
 * Instancia global de los ámbitos requeridos. Si modifica estos ámbitos, elimine
 * sus fichas / carpeta previamente guardadas.
 */
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. Cree un método getCredentials que autorice al usuario que utiliza el archivo de credenciales.
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
	// Cargar secretos de cliente
	InputStream in = new FileInputStream(new File("credentials.json"));
	GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

	// Flujo de compilación y solicitud de autorización de usuario de activación
	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. Cree el método createSpreadsheet para crear una nueva hoja de cálculo en Google Sheets y establezca el nombre de la hoja predeterminada. Este método devuelve un objeto de hoja de cálculo.
private static Spreadsheet createSpreadsheet(Sheets _service, String spreadsheetName, String _defaultSheetName)
		throws IOException {
	// Crear una nueva hoja de cálculo
	Spreadsheet spreadsheet = new Spreadsheet()
			.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));

	// Crear una nueva hoja
	Sheet sheet = new Sheet();
	sheet.setProperties(new SheetProperties());
	sheet.getProperties().setTitle(_defaultSheetName);

	// Agregar hoja a la lista
	List<Sheet> sheetList = new ArrayList<Sheet>();
	sheetList.add(sheet);
	spreadsheet.setSheets(sheetList);

	// Ejecutar solicitud
	spreadsheet = _service.spreadsheets().create(spreadsheet).setFields("spreadsheetId").execute();
	System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());

	return spreadsheet;
}
  1. Cree un método addSheet para agregar una nueva hoja en la hoja de cálculo de Google.
private static void addSheet(Sheets _service, String _spreadSheetID, String _sheetName) {
	try {
		// Agregar nueva hoja
		AddSheetRequest addSheetRequest = new AddSheetRequest();
		addSheetRequest.setProperties(new SheetProperties());
		addSheetRequest.getProperties().setTitle(_sheetName);

		// Crear solicitud de actualización
		BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
		Request req = new Request();
		req.setAddSheet(addSheetRequest);
		batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
		batchUpdateSpreadsheetRequest.getRequests().add(req);

		// Ejecutar solicitud
		_service.spreadsheets().batchUpdate(_spreadSheetID, batchUpdateSpreadsheetRequest).execute();
	} catch (Exception e) {
		System.out.println("Error in creating sheet: " + e.getMessage());
	}
}
  1. Ahora, cree el método exportExcelToGoogle y, en este método, inicialice el servicio Sheets.
// Cree un nuevo servicio de cliente de API autorizado.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
		.setApplicationName(APPLICATION_NAME).build();
  1. Luego, cargue el archivo Excel XLS/XLSX usando Aspose.Cells for Java. Además, obtenga el nombre de la primera hoja de trabajo en el Workbook.
// Cargar un libro de Excel
Workbook wb = new Workbook(_excelFileName);

// Obtener el nombre de la primera hoja de trabajo
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();

// Obtener todas las hojas de trabajo
WorksheetCollection collection = wb.getWorksheets();
  1. Llame al método createSpreadsheet para crear una nueva hoja de cálculo en Hojas de cálculo de Google.
// Cree una nueva hoja de cálculo de Google con la hoja de trabajo predeterminada
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
  1. Lea los datos de cada hoja de trabajo y guárdelos en una lista.
String range;

// Recorrer las hojas de trabajo
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
	// Obtener la referencia de la hoja de trabajo
	Worksheet ws = collection.get(worksheetIndex);

	if (worksheetIndex == 0) {
		// La primera hoja se crea de forma predeterminada, por lo que solo se establece el rango
		range = defaultWorksheetName + "!A:Y";
	} else {
		// Agregar una nueva hoja
		addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
		range = ws.getName().trim() + "!A:Y";
	}

	// Obtener el número de filas y columnas
	int rows = ws.getCells().getMaxDataRow();
	int cols = ws.getCells().getMaxDataColumn();

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

	// Bucle a través de filas
	for (int i = 0; i <= rows; i++) {
		List<Object> rowData = new ArrayList<Object>();

		// Recorra cada columna en la fila seleccionada
		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());
		}

		// Agregar a los datos de la hoja de trabajo
		worksheetData.add(rowData);
	}
  
  // TO-DO: Ejecutar solicitud para publicar datos en Hojas de cálculo de Google 
}
  1. Para cada hoja de trabajo en el archivo de Excel, cree una solicitud para escribir datos en la hoja de cálculo en Hojas de cálculo de Google.
// Establecer rango
ValueRange body = new ValueRange();
body.setRange(range);

// Establecer valores
body.setValues(worksheetData);

// Exportar valores a Hojas de cálculo de Google
UpdateValuesResponse result = service.spreadsheets().values()
		.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
		.execute();

// Salida de impresión
System.out.printf("%d cells updated.", result.getUpdatedCells());

El método completo para leer y exportar datos de un archivo de Excel a una hoja de cálculo en Hojas de cálculo de Google se proporciona a continuación.

private static void exportExcelToGoogle(String _excelFileName) {
	try {
		// Cree un nuevo servicio de cliente de API autorizado.
		final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
		
		Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
				.setApplicationName(APPLICATION_NAME).build();
		
		// Cargar un libro de Excel
		Workbook wb = new Workbook(_excelFileName);
		
		// Obtener el nombre de la primera hoja de trabajo
		String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
		
		// Obtener todas las hojas de trabajo
		WorksheetCollection collection = wb.getWorksheets();

		// Cree una nueva hoja de cálculo de Google con la hoja de trabajo predeterminada
		Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);

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

		String range;

		// Recorrer las hojas de trabajo
		for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
			// Obtener la referencia de la hoja de trabajo
			Worksheet ws = collection.get(worksheetIndex);

			if (worksheetIndex == 0) {
				// La primera hoja se crea de forma predeterminada, por lo que solo se establece el rango
				range = defaultWorksheetName + "!A:Y";
			} else {
				// Agregar una nueva hoja
				addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
				range = ws.getName().trim() + "!A:Y";
			}

			// Obtener el número de filas y columnas
			int rows = ws.getCells().getMaxDataRow();
			int cols = ws.getCells().getMaxDataColumn();

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

			// Bucle a través de filas
			for (int i = 0; i <= rows; i++) {
				List<Object> rowData = new ArrayList<Object>();

				// Recorra cada columna en la fila seleccionada
				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());
				}

				// Agregar a los datos de la hoja de trabajo
				worksheetData.add(rowData);
			}

			// Establecer rango
			ValueRange body = new ValueRange();
			body.setRange(range);

			// Establecer valores
			body.setValues(worksheetData);

			// Exportar valores a Hojas de cálculo de Google
			UpdateValuesResponse result = service.spreadsheets().values()
					.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
					.execute();
			
			// Salida de impresión
			System.out.printf("%d cells updated.", result.getUpdatedCells());

		}

		// Abrir la hoja de cálculo de Google en el navegador
		Desktop desk = Desktop.getDesktop();
		desk.browse(new URI("https://docs.google.com/spreadsheets/d/" + spreadsheet.getSpreadsheetId()));
	} catch (Exception e) {
		System.out.println(e.getMessage());
	}
}

Código fuente completo

El siguiente es el código fuente completo para convertir un archivo XLSX de Excel a Hojas de cálculo de Google 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 {

	/**
	 * Instancia global de los ámbitos requeridos. Si modifica estos ámbitos, elimine
	 * sus fichas / carpeta previamente guardadas.
	 */
	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 {		
		// Exportar datos de Excel a Hojas de cálculo de Google
		exportExcelToGoogle("workbook.xlsx");
	}

	private static void exportExcelToGoogle(String _excelFileName) {
		try {
			// Cree un nuevo servicio de cliente de API autorizado.
			final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
			
			Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
					.setApplicationName(APPLICATION_NAME).build();
			
			// Cargar un libro de Excel
			Workbook wb = new Workbook(_excelFileName);
			
			// Obtener el nombre de la primera hoja de trabajo
			String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
			
			// Obtener todas las hojas de trabajo
			WorksheetCollection collection = wb.getWorksheets();
	
			// Cree una nueva hoja de cálculo de Google con la hoja de trabajo predeterminada
			Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
	
			String range;
	
			// Recorrer las hojas de trabajo
			for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
				// Obtener la referencia de la hoja de trabajo
				Worksheet ws = collection.get(worksheetIndex);
	
				if (worksheetIndex == 0) {
					// La primera hoja se crea de forma predeterminada, por lo que solo se establece el rango
					range = defaultWorksheetName + "!A:Y";
				} else {
					// Agregar una nueva hoja
					addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
					range = ws.getName().trim() + "!A:Y";
				}
	
				// Obtener el número de filas y columnas
				int rows = ws.getCells().getMaxDataRow();
				int cols = ws.getCells().getMaxDataColumn();
	
				List<List<Object>> worksheetData = new ArrayList<List<Object>>();
	
				// Bucle a través de filas
				for (int i = 0; i <= rows; i++) {
					List<Object> rowData = new ArrayList<Object>();
	
					// Recorra cada columna en la fila seleccionada
					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());
					}
	
					// Agregar a los datos de la hoja de trabajo
					worksheetData.add(rowData);
				}
	
				// Establecer rango
				ValueRange body = new ValueRange();
				body.setRange(range);
	
				// Establecer valores
				body.setValues(worksheetData);
	
				// Exportar valores a Hojas de cálculo de Google
				UpdateValuesResponse result = service.spreadsheets().values()
						.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
						.execute();
				
				// Salida de impresión
				System.out.printf("%d cells updated.", result.getUpdatedCells());
	
			}
	
			// Abrir la hoja de cálculo de Google en el navegador
			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 {
		// Crear una nueva hoja de cálculo
		Spreadsheet spreadsheet = new Spreadsheet()
				.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));
	
		// Crear una nueva hoja
		Sheet sheet = new Sheet();
		sheet.setProperties(new SheetProperties());
		sheet.getProperties().setTitle(_defaultSheetName);
	
		// Agregar hoja a la lista
		List<Sheet> sheetList = new ArrayList<Sheet>();
		sheetList.add(sheet);
		spreadsheet.setSheets(sheetList);
	
		// Ejecutar solicitud
		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 {
			// Agregar nueva hoja
			AddSheetRequest addSheetRequest = new AddSheetRequest();
			addSheetRequest.setProperties(new SheetProperties());
			addSheetRequest.getProperties().setTitle(_sheetName);
	
			// Crear solicitud de actualización
			BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
			Request req = new Request();
			req.setAddSheet(addSheetRequest);
			batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
			batchUpdateSpreadsheetRequest.getRequests().add(req);
	
			// Ejecutar solicitud
			_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 {
		// Cargar secretos de cliente
		InputStream in = new FileInputStream(new File("credentials.json"));
		GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
	
		// Flujo de compilación y solicitud de autorización de usuario de activación
		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");
	}
}

Demostración: convertir archivos de Excel a hojas de cálculo de Google en Java

Obtenga una licencia gratuita de Aspose.Cells

Puede obtener una licencia temporal gratuita y usar Aspose.Cells for Java sin limitaciones de evaluación.

Conclusión

En este artículo, ha aprendido cómo convertir archivos Excel XLS o XLSX a Google Sheets mediante programación en Java. Hemos proporcionado las pautas completas sobre cómo crear un proyecto de Google Cloud, habilitar la API de Hojas de cálculo de Google, leer archivos de Excel y exportar datos de archivos de Excel a Hojas de cálculo de Google. También puede visitar la documentación para leer más sobre Aspose.Cells for Java. En caso de que tenga alguna pregunta o consulta, háganoslo saber a través de nuestro foro.

Ver también