Este artigo mostra como converter o MS Excel XLS ou XLSX para o Planilhas Google programaticamente em Java.

Converter Excel XLS ou XLSX para Google Sheets em Java

Google Sheets é um aplicativo on-line popular que permite criar e manipular documentos de planilha. Além disso, permite compartilhar as planilhas com várias pessoas em tempo real. Portanto, muitas vezes você precisa exportar dados de pastas de trabalho Excel para uma planilha no Planilhas Google de forma programática. Neste artigo, daremos um passo a passo completo de como exportar dados do Excel para uma planilha do Google Sheets em Java.

Pré-requisitos - Converter arquivo do Excel para planilhas do Google em Java

Projeto Google Cloud

Google Cloud é uma plataforma de computação em nuvem, que fornece vários tipos de serviços que podemos utilizar em nossos aplicativos. Para usar a Google Sheets API, teremos que criar um projeto no console do Google Cloud e habilitar a Google Sheets API. Você pode ler o guia passo a passo sobre como criar um projeto do Google Cloud e ativar a Sheets API.

Conversão de APIs Java para Excel em Planilhas Google

Para exportar dados de arquivos XLS/XLSX do Excel para o Planilhas Google, precisaremos das seguintes APIs.

  • Aspose.Cells for Java - To read the data from Excel files.
  • APIs de cliente do Google para Java - Para criar e atualizar planilhas no Planilhas Google.

Para instalar essas APIs, você pode usar as seguintes configurações em seu arquivo 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 dados do Excel para o Planilhas Google em Java

A seguir estão as etapas para ler um arquivo do Excel e exportar seus dados para o Planilhas Google em um aplicativo de console Java.

  1. Crie um novo aplicativo Java (desktop).

  2. Instale Aspose.Cells para Java e APIs de cliente do Google no projeto, conforme mencionado na seção anterior.

  3. Copie o arquivo JSON (aquele que baixamos após criar as credenciais no Google Cloud) e cole-o no diretório do projeto.

  4. Especifique os escopos do aplicativo que definem as permissões de acesso às planilhas. Além disso, crie variáveis para o caminho do diretório do token e a fábrica JSON.

/**
 * Instância global dos escopos necessários. Se modificar esses escopos, exclua
 * seus tokens/pasta salvos anteriormente.
 */
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. Crie um método getCredentials que autorize o usuário usando o arquivo de credenciais.
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
	// Carregar segredos do cliente
	InputStream in = new FileInputStream(new File("credentials.json"));
	GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

	// Crie fluxo e acione a solicitação de autorização do usuário
	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. Crie o método createSpreadsheet para criar uma nova planilha no Planilhas Google e defina o nome da planilha padrão. Este método retorna um objeto Spreadsheet.
private static Spreadsheet createSpreadsheet(Sheets _service, String spreadsheetName, String _defaultSheetName)
		throws IOException {
	// Criar uma nova planilha
	Spreadsheet spreadsheet = new Spreadsheet()
			.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));

	// Criar uma nova planilha
	Sheet sheet = new Sheet();
	sheet.setProperties(new SheetProperties());
	sheet.getProperties().setTitle(_defaultSheetName);

	// Adicionar folha à lista
	List<Sheet> sheetList = new ArrayList<Sheet>();
	sheetList.add(sheet);
	spreadsheet.setSheets(sheetList);

	// Executar solicitação
	spreadsheet = _service.spreadsheets().create(spreadsheet).setFields("spreadsheetId").execute();
	System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());

	return spreadsheet;
}
  1. Crie um método addSheet para adicionar uma nova planilha na planilha do Google.
private static void addSheet(Sheets _service, String _spreadSheetID, String _sheetName) {
	try {
		// Adicionar nova planilha
		AddSheetRequest addSheetRequest = new AddSheetRequest();
		addSheetRequest.setProperties(new SheetProperties());
		addSheetRequest.getProperties().setTitle(_sheetName);

		// Criar solicitação de atualização
		BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
		Request req = new Request();
		req.setAddSheet(addSheetRequest);
		batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
		batchUpdateSpreadsheetRequest.getRequests().add(req);

		// Executar solicitação
		_service.spreadsheets().batchUpdate(_spreadSheetID, batchUpdateSpreadsheetRequest).execute();
	} catch (Exception e) {
		System.out.println("Error in creating sheet: " + e.getMessage());
	}
}
  1. Agora, crie o método exportExcelToGoogle e, nesse método, inicialize o serviço Sheets.
// Crie um novo serviço 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. Em seguida, carregue o arquivo Excel XLS/XLSX usando Aspose.Cells para Java. Além disso, obtenha o nome da primeira planilha na pasta de trabalho.
// Carregar uma pasta de trabalho do Excel
Workbook wb = new Workbook(_excelFileName);

// Obter nome da primeira planilha
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();

// Obter todas as planilhas
WorksheetCollection collection = wb.getWorksheets();
  1. Chame o método createSpreadsheet para criar uma nova planilha no Google Sheets.
// Criar uma nova planilha do Google com planilha padrão
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
  1. Leia os dados de cada planilha e salve-os em uma lista.
String range;

// Percorrer planilhas
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
	// Obter referência da planilha
	Worksheet ws = collection.get(worksheetIndex);

	if (worksheetIndex == 0) {
		// A primeira planilha é criada por padrão, portanto, apenas defina o intervalo
		range = defaultWorksheetName + "!A:Y";
	} else {
		// Adicionar uma nova planilha
		addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
		range = ws.getName().trim() + "!A:Y";
	}

	// Obter número de linhas e colunas
	int rows = ws.getCells().getMaxDataRow();
	int cols = ws.getCells().getMaxDataColumn();

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

	// Percorrer as linhas
	for (int i = 0; i <= rows; i++) {
		List<Object> rowData = new ArrayList<Object>();

		// Percorrer cada coluna na linha selecionada
		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());
		}

		// Adicionar aos dados da planilha
		worksheetData.add(rowData);
	}
  
  // TO-DO: Executar solicitação para postar dados no Planilhas Google 
}
  1. Para cada planilha no arquivo Excel, crie uma solicitação para gravar dados na planilha no Planilhas Google.
// Definir intervalo
ValueRange body = new ValueRange();
body.setRange(range);

// Definir valores
body.setValues(worksheetData);

// Exportar valores para o Planilhas Google
UpdateValuesResponse result = service.spreadsheets().values()
		.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
		.execute();

// Saída de impressão
System.out.printf("%d cells updated.", result.getUpdatedCells());

O método completo para ler e exportar dados de um arquivo do Excel para uma planilha no Google Sheets é fornecido abaixo.

private static void exportExcelToGoogle(String _excelFileName) {
	try {
		// Crie um novo serviço 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();
		
		// Carregar uma pasta de trabalho do Excel
		Workbook wb = new Workbook(_excelFileName);
		
		// Obter nome da primeira planilha
		String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
		
		// Obter todas as planilhas
		WorksheetCollection collection = wb.getWorksheets();

		// Criar uma nova planilha do Google com planilha padrão
		Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);

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

		String range;

		// Percorrer planilhas
		for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
			// Obter referência da planilha
			Worksheet ws = collection.get(worksheetIndex);

			if (worksheetIndex == 0) {
				// A primeira planilha é criada por padrão, portanto, apenas defina o intervalo
				range = defaultWorksheetName + "!A:Y";
			} else {
				// Adicionar uma nova planilha
				addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
				range = ws.getName().trim() + "!A:Y";
			}

			// Obter número de linhas e colunas
			int rows = ws.getCells().getMaxDataRow();
			int cols = ws.getCells().getMaxDataColumn();

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

			// Percorrer as linhas
			for (int i = 0; i <= rows; i++) {
				List<Object> rowData = new ArrayList<Object>();

				// Percorrer cada coluna na linha selecionada
				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());
				}

				// Adicionar aos dados da planilha
				worksheetData.add(rowData);
			}

			// Definir intervalo
			ValueRange body = new ValueRange();
			body.setRange(range);

			// Definir valores
			body.setValues(worksheetData);

			// Exportar valores para o Planilhas Google
			UpdateValuesResponse result = service.spreadsheets().values()
					.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
					.execute();
			
			// Saída de impressão
			System.out.printf("%d cells updated.", result.getUpdatedCells());

		}

		// Abra a planilha do Google no 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 fonte completo

Veja a seguir o código-fonte completo para converter um arquivo XLSX do Excel para o Planilhas Google em 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 {

	/**
	 * Instância global dos escopos necessários. Se modificar esses escopos, exclua
	 * seus tokens/pasta salvos anteriormente.
	 */
	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 dados do Excel para o Planilhas Google
		exportExcelToGoogle("workbook.xlsx");
	}

	private static void exportExcelToGoogle(String _excelFileName) {
		try {
			// Crie um novo serviço 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();
			
			// Carregar uma pasta de trabalho do Excel
			Workbook wb = new Workbook(_excelFileName);
			
			// Obter nome da primeira planilha
			String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
			
			// Obter todas as planilhas
			WorksheetCollection collection = wb.getWorksheets();
	
			// Criar uma nova planilha do Google com planilha padrão
			Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
	
			String range;
	
			// Percorrer planilhas
			for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
				// Obter referência da planilha
				Worksheet ws = collection.get(worksheetIndex);
	
				if (worksheetIndex == 0) {
					// A primeira planilha é criada por padrão, portanto, apenas defina o intervalo
					range = defaultWorksheetName + "!A:Y";
				} else {
					// Adicionar uma nova planilha
					addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
					range = ws.getName().trim() + "!A:Y";
				}
	
				// Obter número de linhas e colunas
				int rows = ws.getCells().getMaxDataRow();
				int cols = ws.getCells().getMaxDataColumn();
	
				List<List<Object>> worksheetData = new ArrayList<List<Object>>();
	
				// Percorrer as linhas
				for (int i = 0; i <= rows; i++) {
					List<Object> rowData = new ArrayList<Object>();
	
					// Percorrer cada coluna na linha selecionada
					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());
					}
	
					// Adicionar aos dados da planilha
					worksheetData.add(rowData);
				}
	
				// Definir intervalo
				ValueRange body = new ValueRange();
				body.setRange(range);
	
				// Definir valores
				body.setValues(worksheetData);
	
				// Exportar valores para o Planilhas Google
				UpdateValuesResponse result = service.spreadsheets().values()
						.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
						.execute();
				
				// Saída de impressão
				System.out.printf("%d cells updated.", result.getUpdatedCells());
	
			}
	
			// Abra a planilha do Google no 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 {
		// Criar uma nova planilha
		Spreadsheet spreadsheet = new Spreadsheet()
				.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));
	
		// Criar uma nova planilha
		Sheet sheet = new Sheet();
		sheet.setProperties(new SheetProperties());
		sheet.getProperties().setTitle(_defaultSheetName);
	
		// Adicionar folha à lista
		List<Sheet> sheetList = new ArrayList<Sheet>();
		sheetList.add(sheet);
		spreadsheet.setSheets(sheetList);
	
		// Executar solicitação
		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 {
			// Adicionar nova planilha
			AddSheetRequest addSheetRequest = new AddSheetRequest();
			addSheetRequest.setProperties(new SheetProperties());
			addSheetRequest.getProperties().setTitle(_sheetName);
	
			// Criar solicitação de atualização
			BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
			Request req = new Request();
			req.setAddSheet(addSheetRequest);
			batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
			batchUpdateSpreadsheetRequest.getRequests().add(req);
	
			// Executar solicitação
			_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 {
		// Carregar segredos do cliente
		InputStream in = new FileInputStream(new File("credentials.json"));
		GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
	
		// Crie fluxo e acione a solicitação de autorização do usuário
		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 - Converta arquivos do Excel para o Google Sheets em Java

Obtenha uma licença gratuita do Aspose.Cells

Você pode obter uma licença temporária gratuita e usar o Aspose.Cells para Java sem limitações de avaliação.

Conclusão

Neste artigo, você aprendeu como converter arquivos Excel XLS ou XLSX em Planilhas Google programaticamente em Java. Fornecemos as diretrizes completas sobre como criar um projeto do Google Cloud, ativar a API do Planilhas Google, ler arquivos do Excel e exportar dados de arquivos do Excel para o Planilhas Google. Você também pode visitar a documentação para ler mais sobre Aspose.Cells for Java. Caso você tenha alguma dúvida ou pergunta, informe-nos através do nosso fórum.

Veja também