Dieser Artikel zeigt, wie Sie MS Excel XLS oder XLSX programmgesteuert in Java in Google Sheets konvertieren.
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.
Erstellen Sie eine neue Java-Anwendung (Desktop).
Installieren Sie Aspose.Cells für Java- und Google-Client-APIs im Projekt, wie im vorherigen Abschnitt erwähnt.
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.
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);
- 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");
}
- 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;
}
- 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());
}
}
- 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();
- 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();
- 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);
- 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
}
- 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.