Dieser Artikel zeigt, wie Sie MS Excel XLS oder XLSX programmgesteuert in Java in Google Sheets konvertieren.

Konvertieren Sie Excel XLS oder XLSX in Google Sheets in Java

Google Sheets ist eine beliebte Onlineanwendung, mit der Sie Tabellenkalkulationsdokumente erstellen und bearbeiten können. Darüber hinaus können Sie die Tabellenkalkulationen in Echtzeit mit mehreren Personen teilen. Daher müssen Sie häufig Daten aus Excel-Arbeitsmappen programmgesteuert in eine Tabelle in Google Sheets exportieren. In diesem Artikel geben wir eine vollständige Anleitung zum Exportieren von Excel-Daten in eine Google Sheets-Tabelle in Java.

Voraussetzungen - Konvertieren Sie eine Excel-Datei in Google Sheets in Java

Google Cloud-Projekt

Google Cloud ist eine Cloud-Computing-Plattform, die verschiedene Arten von Diensten bereitstellt, die wir in unseren Anwendungen nutzen können. Um die Google Sheets-API zu verwenden, müssen wir ein Projekt in der Google Cloud-Konsole erstellen und die Google Sheets-API aktivieren. Sie können die Schritt-für-Schritt-Anleitung zum Erstellen eines Google Cloud-Projekts und Aktivieren der Sheets-API lesen.

Java-APIs für die Konvertierung von Excel in Google Sheets

Um Daten aus Excel XLS/XLSX-Dateien in Google Sheets zu exportieren, benötigen wir die folgenden APIs.

  • Aspose.Cells für Java - To read the data from Excel files.
  • Google-Client-APIs für Java – Zum Erstellen und Aktualisieren von Tabellenkalkulationen in Google Sheets.

Um diese APIs zu installieren, können Sie die folgenden Konfigurationen in Ihrer pom.xml-Datei verwenden.

<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>

Exportieren Sie Excel-Daten in Google Sheets in Java

Im Folgenden finden Sie die Schritte zum Lesen einer Excel-Datei und zum anschließenden Exportieren ihrer Daten in Google Sheets in einer Java-Konsolenanwendung.

  1. Erstellen Sie eine neue Java-Anwendung (Desktop).

  2. Installieren Sie Aspose.Cells für Java- und Google-Client-APIs im Projekt, wie im vorherigen Abschnitt erwähnt.

  3. Kopieren Sie die JSON-Datei (die wir nach dem Erstellen der Anmeldeinformationen in Google Cloud heruntergeladen haben) und fügen Sie sie in das Verzeichnis des Projekts ein.

  4. Geben Sie die Bereiche der Anwendung an, die die Zugriffsberechtigungen für die Blätter definieren. Erstellen Sie außerdem Variablen für den Token-Verzeichnispfad und die JSON-Factory.

/**
 * Globale Instanz der erforderlichen Bereiche. Wenn Sie diese Bereiche ändern, löschen Sie sie
 * Ihre zuvor gespeicherten Token/Ordner.
 */
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. Erstellen Sie eine getCredentials-Methode, die den Benutzer mit der Anmeldeinformationsdatei autorisiert.
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
	// Client-Secrets laden
	InputStream in = new FileInputStream(new File("credentials.json"));
	GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

	// Erstellen Sie einen Ablauf und lösen Sie eine Benutzerautorisierungsanforderung aus
	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. Erstellen Sie die createSpreadsheet-Methode, um eine neue Tabelle in Google Tabellen zu erstellen und den Namen der Standardtabelle festzulegen. Diese Methode gibt ein Spreadsheet-Objekt zurück.
private static Spreadsheet createSpreadsheet(Sheets _service, String spreadsheetName, String _defaultSheetName)
		throws IOException {
	// Erstellen Sie eine neue Tabelle
	Spreadsheet spreadsheet = new Spreadsheet()
			.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));

	// Erstellen Sie ein neues Blatt
	Sheet sheet = new Sheet();
	sheet.setProperties(new SheetProperties());
	sheet.getProperties().setTitle(_defaultSheetName);

	// Blatt zur Liste hinzufügen
	List<Sheet> sheetList = new ArrayList<Sheet>();
	sheetList.add(sheet);
	spreadsheet.setSheets(sheetList);

	// Anfrage ausführen
	spreadsheet = _service.spreadsheets().create(spreadsheet).setFields("spreadsheetId").execute();
	System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());

	return spreadsheet;
}
  1. Erstellen Sie eine addSheet-Methode, um ein neues Blatt in der Google-Tabelle hinzuzufügen.
private static void addSheet(Sheets _service, String _spreadSheetID, String _sheetName) {
	try {
		// Neues Blatt hinzufügen
		AddSheetRequest addSheetRequest = new AddSheetRequest();
		addSheetRequest.setProperties(new SheetProperties());
		addSheetRequest.getProperties().setTitle(_sheetName);

		// Updateanfrage erstellen
		BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
		Request req = new Request();
		req.setAddSheet(addSheetRequest);
		batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
		batchUpdateSpreadsheetRequest.getRequests().add(req);

		// Anfrage ausführen
		_service.spreadsheets().batchUpdate(_spreadSheetID, batchUpdateSpreadsheetRequest).execute();
	} catch (Exception e) {
		System.out.println("Error in creating sheet: " + e.getMessage());
	}
}
  1. Erstellen Sie nun die exportExcelToGoogle-Methode und initialisieren Sie in dieser Methode den Sheets-Dienst.
// Erstellen Sie einen neuen autorisierten API-Clientdienst.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
		.setApplicationName(APPLICATION_NAME).build();
  1. Laden Sie dann die Excel-XLS/XLSX-Datei mit Aspose.Cells for Java. Rufen Sie außerdem den Namen des ersten Arbeitsblatts in der Arbeitsmappe ab.
// Laden Sie eine Excel-Arbeitsmappe
Workbook wb = new Workbook(_excelFileName);

// Rufen Sie den Namen des ersten Arbeitsblatts ab
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();

// Holen Sie sich alle Arbeitsblätter
WorksheetCollection collection = wb.getWorksheets();
  1. Rufen Sie die createSpreadsheet-Methode auf, um eine neue Tabelle in Google Sheets zu erstellen.
// Erstellen Sie eine neue Google-Tabelle mit dem Standardarbeitsblatt
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
  1. Daten aus jedem Arbeitsblatt lesen und in einer Liste speichern.
String range;

// Arbeitsblätter durchlaufen
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
	// Holen Sie sich die Referenz des Arbeitsblatts
	Worksheet ws = collection.get(worksheetIndex);

	if (worksheetIndex == 0) {
		// Das erste Blatt wird standardmäßig erstellt, also nur den Bereich festlegen
		range = defaultWorksheetName + "!A:Y";
	} else {
		// Fügen Sie ein neues Blatt hinzu
		addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
		range = ws.getName().trim() + "!A:Y";
	}

	// Holen Sie sich die Anzahl der Zeilen und Spalten
	int rows = ws.getCells().getMaxDataRow();
	int cols = ws.getCells().getMaxDataColumn();

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

	// Schleife durch die Reihen
	for (int i = 0; i <= rows; i++) {
		List<Object> rowData = new ArrayList<Object>();

		// Durchlaufen Sie jede Spalte in der ausgewählten Zeile
		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());
		}

		// Zu Arbeitsblattdaten hinzufügen
		worksheetData.add(rowData);
	}
  
  // TO-DO: Ausführen der Anforderung zum Posten von Daten in Google Sheets 
}
  1. Erstellen Sie für jedes Arbeitsblatt in der Excel-Datei eine Anfrage, um Daten in die Tabelle in Google Sheets zu schreiben.
// Bereich einstellen
ValueRange body = new ValueRange();
body.setRange(range);

// Werte einstellen
body.setValues(worksheetData);

// Werte in Google Sheets exportieren
UpdateValuesResponse result = service.spreadsheets().values()
		.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
		.execute();

// Druckausgabe
System.out.printf("%d cells updated.", result.getUpdatedCells());

Die vollständige Methode zum Lesen und Exportieren von Daten aus einer Excel-Datei in eine Tabelle in Google Sheets ist unten angegeben.

private static void exportExcelToGoogle(String _excelFileName) {
	try {
		// Erstellen Sie einen neuen autorisierten API-Clientdienst.
		final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
		
		Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
				.setApplicationName(APPLICATION_NAME).build();
		
		// Laden Sie eine Excel-Arbeitsmappe
		Workbook wb = new Workbook(_excelFileName);
		
		// Rufen Sie den Namen des ersten Arbeitsblatts ab
		String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
		
		// Holen Sie sich alle Arbeitsblätter
		WorksheetCollection collection = wb.getWorksheets();

		// Erstellen Sie eine neue Google-Tabelle mit dem Standardarbeitsblatt
		Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);

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

		String range;

		// Arbeitsblätter durchlaufen
		for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
			// Holen Sie sich die Referenz des Arbeitsblatts
			Worksheet ws = collection.get(worksheetIndex);

			if (worksheetIndex == 0) {
				// Das erste Blatt wird standardmäßig erstellt, also nur den Bereich festlegen
				range = defaultWorksheetName + "!A:Y";
			} else {
				// Fügen Sie ein neues Blatt hinzu
				addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
				range = ws.getName().trim() + "!A:Y";
			}

			// Holen Sie sich die Anzahl der Zeilen und Spalten
			int rows = ws.getCells().getMaxDataRow();
			int cols = ws.getCells().getMaxDataColumn();

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

			// Schleife durch die Reihen
			for (int i = 0; i <= rows; i++) {
				List<Object> rowData = new ArrayList<Object>();

				// Durchlaufen Sie jede Spalte in der ausgewählten Zeile
				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());
				}

				// Zu Arbeitsblattdaten hinzufügen
				worksheetData.add(rowData);
			}

			// Bereich einstellen
			ValueRange body = new ValueRange();
			body.setRange(range);

			// Werte einstellen
			body.setValues(worksheetData);

			// Werte in Google Sheets exportieren
			UpdateValuesResponse result = service.spreadsheets().values()
					.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
					.execute();
			
			// Druckausgabe
			System.out.printf("%d cells updated.", result.getUpdatedCells());

		}

		// Öffnen Sie die Google-Tabelle im 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());
	}
}

Vollständiger Quellcode

Das Folgende ist der vollständige Quellcode zum Konvertieren einer Excel-XLSX-Datei in Google Sheets 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 {

	/**
	 * Globale Instanz der erforderlichen Bereiche. Wenn Sie diese Bereiche ändern, löschen Sie sie
	 * Ihre zuvor gespeicherten Token/Ordner.
	 */
	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 {		
		// Exportieren Sie Excel-Daten in Google Sheets
		exportExcelToGoogle("workbook.xlsx");
	}

	private static void exportExcelToGoogle(String _excelFileName) {
		try {
			// Erstellen Sie einen neuen autorisierten API-Clientdienst.
			final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
			
			Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
					.setApplicationName(APPLICATION_NAME).build();
			
			// Laden Sie eine Excel-Arbeitsmappe
			Workbook wb = new Workbook(_excelFileName);
			
			// Rufen Sie den Namen des ersten Arbeitsblatts ab
			String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
			
			// Holen Sie sich alle Arbeitsblätter
			WorksheetCollection collection = wb.getWorksheets();
	
			// Erstellen Sie eine neue Google-Tabelle mit dem Standardarbeitsblatt
			Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
	
			String range;
	
			// Arbeitsblätter durchlaufen
			for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
				// Holen Sie sich die Referenz des Arbeitsblatts
				Worksheet ws = collection.get(worksheetIndex);
	
				if (worksheetIndex == 0) {
					// Das erste Blatt wird standardmäßig erstellt, also nur den Bereich festlegen
					range = defaultWorksheetName + "!A:Y";
				} else {
					// Fügen Sie ein neues Blatt hinzu
					addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
					range = ws.getName().trim() + "!A:Y";
				}
	
				// Holen Sie sich die Anzahl der Zeilen und Spalten
				int rows = ws.getCells().getMaxDataRow();
				int cols = ws.getCells().getMaxDataColumn();
	
				List<List<Object>> worksheetData = new ArrayList<List<Object>>();
	
				// Schleife durch die Reihen
				for (int i = 0; i <= rows; i++) {
					List<Object> rowData = new ArrayList<Object>();
	
					// Durchlaufen Sie jede Spalte in der ausgewählten Zeile
					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());
					}
	
					// Zu Arbeitsblattdaten hinzufügen
					worksheetData.add(rowData);
				}
	
				// Bereich einstellen
				ValueRange body = new ValueRange();
				body.setRange(range);
	
				// Werte einstellen
				body.setValues(worksheetData);
	
				// Werte in Google Sheets exportieren
				UpdateValuesResponse result = service.spreadsheets().values()
						.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
						.execute();
				
				// Druckausgabe
				System.out.printf("%d cells updated.", result.getUpdatedCells());
	
			}
	
			// Öffnen Sie die Google-Tabelle im 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 {
		// Erstellen Sie eine neue Tabelle
		Spreadsheet spreadsheet = new Spreadsheet()
				.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));
	
		// Erstellen Sie ein neues Blatt
		Sheet sheet = new Sheet();
		sheet.setProperties(new SheetProperties());
		sheet.getProperties().setTitle(_defaultSheetName);
	
		// Blatt zur Liste hinzufügen
		List<Sheet> sheetList = new ArrayList<Sheet>();
		sheetList.add(sheet);
		spreadsheet.setSheets(sheetList);
	
		// Anfrage ausführen
		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 {
			// Neues Blatt hinzufügen
			AddSheetRequest addSheetRequest = new AddSheetRequest();
			addSheetRequest.setProperties(new SheetProperties());
			addSheetRequest.getProperties().setTitle(_sheetName);
	
			// Updateanfrage erstellen
			BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
			Request req = new Request();
			req.setAddSheet(addSheetRequest);
			batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
			batchUpdateSpreadsheetRequest.getRequests().add(req);
	
			// Anfrage ausführen
			_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 {
		// Client-Secrets laden
		InputStream in = new FileInputStream(new File("credentials.json"));
		GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
	
		// Erstellen Sie einen Ablauf und lösen Sie eine Benutzerautorisierungsanforderung aus
		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 - Konvertieren Sie Excel-Dateien in Google Sheets in Java

Holen Sie sich eine kostenlose Aspose.Cells-Lizenz

Sie können eine kostenlose temporäre Lizenz erhalten und Aspose.Cells für Java ohne Evaluierungseinschränkungen verwenden.

Fazit

In diesem Artikel haben Sie gelernt, wie Sie Excel XLS- oder XLSX-Dateien programmgesteuert in Java in Google Sheets konvertieren. Wir haben die vollständigen Richtlinien zum Erstellen eines Google Cloud-Projekts, zum Aktivieren der Google Sheets-API, zum Lesen von Excel-Dateien und zum Exportieren von Daten aus Excel-Dateien in Google Sheets bereitgestellt. Sie können auch die Dokumentation besuchen, um mehr über Aspose.Cells für Java zu erfahren. Falls Sie Fragen oder Anregungen haben, lassen Sie es uns über unser Forum wissen.

Siehe auch