Este artículo muestra cómo convertir MS Excel XLS o XLSX a Google Sheets mediante programación 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.
Cree una nueva aplicación Java (escritorio).
Instale Aspose.Cells for Java y las API de cliente de Google en el proyecto, como se mencionó en la sección anterior.
Copia el archivo JSON (el que hemos descargado tras crear las credenciales en Google Cloud) y pégalo en el directorio del proyecto.
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);
- 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");
}
- 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;
}
- 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());
}
}
- 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();
- 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();
- 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);
- 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
}
- 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.