У цій статті показано, як програмно конвертувати MS Excel XLS або XLSX у Google Таблиці на Java.

Перетворіть Excel XLS або XLSX на Google Таблиці в Java

Google Таблиці – це популярна онлайн-програма, яка дозволяє створювати та керувати електронними таблицями. Крім того, це дозволяє ділитися електронними таблицями з кількома людьми в режимі реального часу. Тому часто доводиться програмно експортувати дані з робочих книг Excel в електронну таблицю в Google Таблицях. У цій статті ми розповімо, як експортувати дані Excel у Google Таблиці на Java.

Попередні умови – експортуйте дані Excel до Google Таблиць на Java

Проект Google Cloud

Google Cloud – це платформа хмарних обчислень, яка надає різні типи послуг, які ми можемо використовувати в наших програмах. Щоб використовувати Google Sheets API, нам потрібно буде створити проект на консолі Google Cloud і ввімкнути Google Sheets API. Ви можете прочитати покроковий посібник як створити проект Google Cloud і ввімкнути Sheets API.

Java API для експорту даних Excel до Google Таблиць

Щоб експортувати дані з файлів Excel XLS/XLSX у Google Таблиці, нам знадобляться такі API.

  • Aspose.Cells for Java - To read the data from Excel files.
  • API клієнта Google для Java – для створення та оновлення електронних таблиць у Google Таблицях.

Щоб установити ці API, ви можете використовувати наступні конфігурації у вашому файлі 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>

Експортуйте дані Excel у Google Таблиці на Java

Нижче наведено кроки, щоб прочитати файл Excel і потім експортувати його дані до Google Таблиць у консольній програмі Java.

  1. Створіть нову програму Java (десктоп).

  2. Встановіть Aspose.Cells for Java та API клієнта Google у проект, як зазначено в попередньому розділі.

  3. Скопіюйте файл JSON (той, який ми завантажили після створення облікових даних у Google Cloud) і вставте його в каталог проекту.

  4. Укажіть області програми, які визначають права доступу до аркушів. Крім того, створіть змінні для шляху до каталогу маркерів і фабрики JSON.

/**
 * Глобальний екземпляр необхідних областей. Якщо ви змінюєте ці області, видаліть
 * ваші раніше збережені токени/папка.
 */
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. Створіть метод getCredentials, який авторизує користувача за допомогою файлу облікових даних.
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
	// Завантажте секрети клієнта
	InputStream in = new FileInputStream(new File("credentials.json"));
	GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

	// Створення потоку та ініціювання запиту авторизації користувача
	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. Створіть метод createSpreadsheet, щоб створити нову електронну таблицю в Google Таблицях і встановити назву аркуша за замовчуванням. Цей метод повертає об’єкт Spreadsheet.
private static Spreadsheet createSpreadsheet(Sheets _service, String spreadsheetName, String _defaultSheetName)
		throws IOException {
	// Створіть нову електронну таблицю
	Spreadsheet spreadsheet = new Spreadsheet()
			.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));

	// Створіть новий аркуш
	Sheet sheet = new Sheet();
	sheet.setProperties(new SheetProperties());
	sheet.getProperties().setTitle(_defaultSheetName);

	// Додати аркуш до списку
	List<Sheet> sheetList = new ArrayList<Sheet>();
	sheetList.add(sheet);
	spreadsheet.setSheets(sheetList);

	// Виконати запит
	spreadsheet = _service.spreadsheets().create(spreadsheet).setFields("spreadsheetId").execute();
	System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());

	return spreadsheet;
}
  1. Створіть метод addSheet, щоб додати новий аркуш до електронної таблиці Google.
private static void addSheet(Sheets _service, String _spreadSheetID, String _sheetName) {
	try {
		// Додати новий аркуш
		AddSheetRequest addSheetRequest = new AddSheetRequest();
		addSheetRequest.setProperties(new SheetProperties());
		addSheetRequest.getProperties().setTitle(_sheetName);

		// Створити запит на оновлення
		BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
		Request req = new Request();
		req.setAddSheet(addSheetRequest);
		batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
		batchUpdateSpreadsheetRequest.getRequests().add(req);

		// Виконати запит
		_service.spreadsheets().batchUpdate(_spreadSheetID, batchUpdateSpreadsheetRequest).execute();
	} catch (Exception e) {
		System.out.println("Error in creating sheet: " + e.getMessage());
	}
}
  1. Тепер створіть метод exportExcelToGoogle і в цьому методі ініціалізуйте службу Таблиць.
// Створіть нову авторизовану клієнтську службу API.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
		.setApplicationName(APPLICATION_NAME).build();
  1. Потім завантажте файл Excel XLS/XLSX за допомогою Aspose.Cells for Java. Також отримайте назву першого робочого аркуша в робочій книзі.
// Завантажте книгу Excel
Workbook wb = new Workbook(_excelFileName);

// Отримайте назву першого аркуша
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();

// Отримати всі аркуші
WorksheetCollection collection = wb.getWorksheets();
  1. Викличте метод createSpreadsheet, щоб створити нову електронну таблицю в Google Sheets.
// Створіть нову електронну таблицю Google із аркушем за умовчанням
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
  1. Прочитайте дані з кожного аркуша та збережіть їх у списку.
String range;

// Перегляньте робочі аркуші
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
	// Отримайте посилання на аркуш
	Worksheet ws = collection.get(worksheetIndex);

	if (worksheetIndex == 0) {
		// Перший аркуш створюється за замовчуванням, тому встановлюється лише діапазон
		range = defaultWorksheetName + "!A:Y";
	} else {
		// Додайте новий аркуш
		addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
		range = ws.getName().trim() + "!A:Y";
	}

	// Отримати кількість рядків і стовпців
	int rows = ws.getCells().getMaxDataRow();
	int cols = ws.getCells().getMaxDataColumn();

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

	// Перебирайте ряди
	for (int i = 0; i <= rows; i++) {
		List<Object> rowData = new ArrayList<Object>();

		// Прокрутіть кожен стовпець у вибраному рядку
		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());
		}

		// Додайте дані до аркуша
		worksheetData.add(rowData);
	}
  
  // ЗАВДАННЯ: виконати запит на публікацію даних у Google Таблицях 
}
  1. Для кожного робочого аркуша у файлі Excel створіть запит на запис даних до електронної таблиці в Google Таблицях.
// Встановити діапазон
ValueRange body = new ValueRange();
body.setRange(range);

// Встановити значення
body.setValues(worksheetData);

// Експортуйте значення в Google Таблиці
UpdateValuesResponse result = service.spreadsheets().values()
		.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
		.execute();

// Вихід на друк
System.out.printf("%d cells updated.", result.getUpdatedCells());

Нижче наведено повний спосіб читання та експорту даних із файлу Excel до електронної таблиці в Google Таблицях.

private static void exportExcelToGoogle(String _excelFileName) {
	try {
		// Створіть нову авторизовану клієнтську службу API.
		final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
		
		Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
				.setApplicationName(APPLICATION_NAME).build();
		
		// Завантажте книгу Excel
		Workbook wb = new Workbook(_excelFileName);
		
		// Отримайте назву першого аркуша
		String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
		
		// Отримати всі аркуші
		WorksheetCollection collection = wb.getWorksheets();

		// Створіть нову електронну таблицю Google із аркушем за умовчанням
		Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);

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

		String range;

		// Перегляньте робочі аркуші
		for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
			// Отримайте посилання на аркуш
			Worksheet ws = collection.get(worksheetIndex);

			if (worksheetIndex == 0) {
				// Перший аркуш створюється за замовчуванням, тому встановлюється лише діапазон
				range = defaultWorksheetName + "!A:Y";
			} else {
				// Додайте новий аркуш
				addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
				range = ws.getName().trim() + "!A:Y";
			}

			// Отримати кількість рядків і стовпців
			int rows = ws.getCells().getMaxDataRow();
			int cols = ws.getCells().getMaxDataColumn();

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

			// Перебирайте ряди
			for (int i = 0; i <= rows; i++) {
				List<Object> rowData = new ArrayList<Object>();

				// Прокрутіть кожен стовпець у вибраному рядку
				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());
				}

				// Додайте дані до аркуша
				worksheetData.add(rowData);
			}

			// Встановити діапазон
			ValueRange body = new ValueRange();
			body.setRange(range);

			// Встановити значення
			body.setValues(worksheetData);

			// Експортуйте значення в Google Таблиці
			UpdateValuesResponse result = service.spreadsheets().values()
					.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
					.execute();
			
			// Вихід на друк
			System.out.printf("%d cells updated.", result.getUpdatedCells());

		}

		// Відкрийте електронну таблицю Google у браузері
		Desktop desk = Desktop.getDesktop();
		desk.browse(new URI("https://docs.google.com/spreadsheets/d/" + spreadsheet.getSpreadsheetId()));
	} catch (Exception e) {
		System.out.println(e.getMessage());
	}
}

Повний вихідний код

Нижче наведено повний вихідний код для перетворення файлу Excel XLSX у Google Таблиці на 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 {

	/**
	 * Глобальний екземпляр необхідних областей. Якщо ви змінюєте ці області, видаліть
	 * ваші раніше збережені токени/папка.
	 */
	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 {		
		// Експортуйте дані Excel у Google Таблиці
		exportExcelToGoogle("workbook.xlsx");
	}

	private static void exportExcelToGoogle(String _excelFileName) {
		try {
			// Створіть нову авторизовану клієнтську службу API.
			final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
			
			Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
					.setApplicationName(APPLICATION_NAME).build();
			
			// Завантажте книгу Excel
			Workbook wb = new Workbook(_excelFileName);
			
			// Отримайте назву першого аркуша
			String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
			
			// Отримати всі аркуші
			WorksheetCollection collection = wb.getWorksheets();
	
			// Створіть нову електронну таблицю Google із аркушем за умовчанням
			Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
	
			String range;
	
			// Перегляньте робочі аркуші
			for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
				// Отримайте посилання на аркуш
				Worksheet ws = collection.get(worksheetIndex);
	
				if (worksheetIndex == 0) {
					// Перший аркуш створюється за замовчуванням, тому встановлюється лише діапазон
					range = defaultWorksheetName + "!A:Y";
				} else {
					// Додайте новий аркуш
					addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
					range = ws.getName().trim() + "!A:Y";
				}
	
				// Отримати кількість рядків і стовпців
				int rows = ws.getCells().getMaxDataRow();
				int cols = ws.getCells().getMaxDataColumn();
	
				List<List<Object>> worksheetData = new ArrayList<List<Object>>();
	
				// Перебирайте ряди
				for (int i = 0; i <= rows; i++) {
					List<Object> rowData = new ArrayList<Object>();
	
					// Прокрутіть кожен стовпець у вибраному рядку
					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());
					}
	
					// Додайте дані до аркуша
					worksheetData.add(rowData);
				}
	
				// Встановити діапазон
				ValueRange body = new ValueRange();
				body.setRange(range);
	
				// Встановити значення
				body.setValues(worksheetData);
	
				// Експортуйте значення в Google Таблиці
				UpdateValuesResponse result = service.spreadsheets().values()
						.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
						.execute();
				
				// Вихід на друк
				System.out.printf("%d cells updated.", result.getUpdatedCells());
	
			}
	
			// Відкрийте електронну таблицю Google у браузері
			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 {
		// Створіть нову електронну таблицю
		Spreadsheet spreadsheet = new Spreadsheet()
				.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));
	
		// Створіть новий аркуш
		Sheet sheet = new Sheet();
		sheet.setProperties(new SheetProperties());
		sheet.getProperties().setTitle(_defaultSheetName);
	
		// Додати аркуш до списку
		List<Sheet> sheetList = new ArrayList<Sheet>();
		sheetList.add(sheet);
		spreadsheet.setSheets(sheetList);
	
		// Виконати запит
		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 {
			// Додати новий аркуш
			AddSheetRequest addSheetRequest = new AddSheetRequest();
			addSheetRequest.setProperties(new SheetProperties());
			addSheetRequest.getProperties().setTitle(_sheetName);
	
			// Створити запит на оновлення
			BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
			Request req = new Request();
			req.setAddSheet(addSheetRequest);
			batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
			batchUpdateSpreadsheetRequest.getRequests().add(req);
	
			// Виконати запит
			_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 {
		// Завантажте секрети клієнта
		InputStream in = new FileInputStream(new File("credentials.json"));
		GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
	
		// Створення потоку та ініціювання запиту авторизації користувача
		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");
	}
}

Демонстрація – перетворення Excel у таблиці Google у Java

API Java Excel для Google Таблиць – отримайте безкоштовну ліцензію

Ви можете отримати безкоштовну тимчасову ліцензію і використовувати Aspose.Cells for Java без оціночних обмежень.

Висновок

У цій статті ви дізналися, як програмно експортувати файли Excel XLS або XLSX у Google Таблиці на Java. Ми надали повні вказівки щодо того, як створити проект Google Cloud, увімкнути API Google Sheets, читати файли Excel і експортувати дані з файлів Excel у Google Sheets. Ви також можете відвідати документацію, щоб дізнатися більше про Aspose.Cells for Java. Якщо у вас виникнуть запитання чи запити, повідомте нам про це через наш форум.

Дивись також