Konvertera Excel XLS eller XLSX till Google Sheets i Java

Excel är ett populärt val för att skapa och hantera data, men det kanske inte alltid är det bästa alternativet för samarbete, särskilt när flera användare behöver arbeta med samma dokument samtidigt. Google Sheets, med sin molnbaserade karaktär och samarbetsfunktioner i realtid, är ett utmärkt alternativ. I det här blogginlägget kommer vi att utforska hur man konverterar Excel-filer till Google Sheets i en Java-applikation med Aspose.Cells for Java, ett kraftfullt och flexibelt Java-bibliotek för att arbeta med Excel-filer.

Förutsättningar - Konvertera Excel-fil till Google Sheets i Java

Google Cloud Project

Google Cloud är en cloud computing-plattform som tillhandahåller olika typer av tjänster som vi kan använda i våra applikationer. För att använda Google Sheets API måste vi skapa ett projekt på Google Cloud-konsolen och aktivera Google Sheets API. Du kan läsa steg-för-steg-guiden om hur man skapar ett Google Cloud-projekt och aktiverar Sheets API.

Java API:er för att konvertera Excel-data till Google Sheets

För att exportera data från Excel XLS/XLSX-filer till Google Sheets behöver vi följande API:er.

  • Aspose.Cells för Java - To read the data from Excel files.
  • Google Client API:er för Java - För att skapa och uppdatera kalkylark på Google Sheets.

För att installera dessa API:er kan du använda följande konfigurationer i din pom.xml-fil.

<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>23.8</version>
	</dependency>
</dependencies>

Konvertera Excel-fil till Google Sheets i Java

Följande är stegen för att läsa en Excel-fil och sedan exportera dess data till Google Sheets i en Java-konsolapplikation.

  1. Skapa ett nytt Java-program (skrivbord).

  2. Installera Aspose.Cells för Java och Google Client API i projektet, som nämnts i föregående avsnitt.

  3. Kopiera JSON-filen (den vi har laddat ner efter att ha skapat autentiseringsuppgifter i Google Cloud) och klistra in den i projektets katalog.

  4. Ange omfattningarna för programmet som definierar åtkomstbehörigheterna till arken. Skapa även variabler för sökvägen till tokenkatalogen och JSON-fabriken.

/**
 * Global instans av de omfång som krävs. Om du ändrar dessa omfång, ta bort
 * dina tidigare sparade tokens/mapp.
 */
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. Skapa en getCredentials-metod som auktoriserar användaren med hjälp av autentiseringsfilen.
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
	// Ladda klienthemligheter
	InputStream in = new FileInputStream(new File("credentials.json"));
	GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

	// Bygg flöde och utlös begäran om användarbehörighet
	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. Skapa createSpreadsheet-metoden för att skapa ett nytt kalkylark på Google Sheets och ange namnet på standardarket. Denna metod returnerar ett kalkylbladsobjekt.
private static Spreadsheet createSpreadsheet(Sheets _service, String spreadsheetName, String _defaultSheetName)
		throws IOException {
	// Skapa ett nytt kalkylblad
	Spreadsheet spreadsheet = new Spreadsheet()
			.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));

	// Skapa ett nytt ark
	Sheet sheet = new Sheet();
	sheet.setProperties(new SheetProperties());
	sheet.getProperties().setTitle(_defaultSheetName);

	// Lägg till ark i listan
	List<Sheet> sheetList = new ArrayList<Sheet>();
	sheetList.add(sheet);
	spreadsheet.setSheets(sheetList);

	// Utför begäran
	spreadsheet = _service.spreadsheets().create(spreadsheet).setFields("spreadsheetId").execute();
	System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());

	return spreadsheet;
}
  1. Skapa en addSheet-metod för att lägga till ett nytt ark i Googles kalkylark.
private static void addSheet(Sheets _service, String _spreadSheetID, String _sheetName) {
	try {
		// Lägg till nytt ark
		AddSheetRequest addSheetRequest = new AddSheetRequest();
		addSheetRequest.setProperties(new SheetProperties());
		addSheetRequest.getProperties().setTitle(_sheetName);

		// Skapa uppdateringsbegäran
		BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
		Request req = new Request();
		req.setAddSheet(addSheetRequest);
		batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
		batchUpdateSpreadsheetRequest.getRequests().add(req);

		// Utför begäran
		_service.spreadsheets().batchUpdate(_spreadSheetID, batchUpdateSpreadsheetRequest).execute();
	} catch (Exception e) {
		System.out.println("Error in creating sheet: " + e.getMessage());
	}
}
  1. Skapa nu exportExcelToGoogle-metoden och initiera Sheets-tjänsten med den här metoden.
// Bygg en ny auktoriserad API-klienttjänst.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
		.setApplicationName(APPLICATION_NAME).build();
  1. Ladda sedan Excel XLS/XLSX-filen med Aspose.Cells för Java. Få även namnet på det första kalkylbladet i arbetsboken.
// Ladda en Excel-arbetsbok
Workbook wb = new Workbook(_excelFileName);

// Hämta namnet på det första arbetsbladet
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();

// Få alla arbetsblad
WorksheetCollection collection = wb.getWorksheets();
  1. Anropa createSpreadsheet-metoden för att skapa ett nytt kalkylblad på Google Sheets.
// Skapa ett nytt Google-kalkylblad med standardkalkylblad
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
  1. Läs data från varje kalkylblad och spara dem i en lista.
String range;

// Bläddra igenom arbetsblad
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
	// Få referens till arbetsbladet
	Worksheet ws = collection.get(worksheetIndex);

	if (worksheetIndex == 0) {
		// Första arket skapas som standard, så ställ bara in intervall
		range = defaultWorksheetName + "!A:Y";
	} else {
		// Lägg till ett nytt ark
		addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
		range = ws.getName().trim() + "!A:Y";
	}

	// Få antal rader och kolumner
	int rows = ws.getCells().getMaxDataRow();
	int cols = ws.getCells().getMaxDataColumn();

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

	// Slinga genom rader
	for (int i = 0; i <= rows; i++) {
		List<Object> rowData = new ArrayList<Object>();

		// Gå igenom varje kolumn i den valda raden
		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());
		}

		// Lägg till i kalkylbladsdata
		worksheetData.add(rowData);
	}
  
  // ATT GÖRA: Utför begäran om att lägga upp data till Google Sheets 
}
  1. Skapa en begäran om att skriva data till kalkylarket i Google Sheets för varje kalkylblad i Excel-filen.
// Ställ in räckvidd
ValueRange body = new ValueRange();
body.setRange(range);

// Ställ in värden
body.setValues(worksheetData);

// Exportera värden till Google Kalkylark
UpdateValuesResponse result = service.spreadsheets().values()
		.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
		.execute();

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

Den fullständiga metoden för att läsa och exportera data från en Excel-fil till ett kalkylblad i Google Sheets ges nedan.

private static void exportExcelToGoogle(String _excelFileName) {
	try {
		// Bygg en ny auktoriserad API-klienttjänst.
		final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
		
		Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
				.setApplicationName(APPLICATION_NAME).build();
		
		// Ladda en Excel-arbetsbok
		Workbook wb = new Workbook(_excelFileName);
		
		// Hämta namnet på det första arbetsbladet
		String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
		
		// Få alla arbetsblad
		WorksheetCollection collection = wb.getWorksheets();

		// Skapa ett nytt Google-kalkylblad med standardkalkylblad
		Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);

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

		String range;

		// Bläddra igenom arbetsblad
		for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
			// Få referens till arbetsbladet
			Worksheet ws = collection.get(worksheetIndex);

			if (worksheetIndex == 0) {
				// Första arket skapas som standard, så ställ bara in intervall
				range = defaultWorksheetName + "!A:Y";
			} else {
				// Lägg till ett nytt ark
				addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
				range = ws.getName().trim() + "!A:Y";
			}

			// Få antal rader och kolumner
			int rows = ws.getCells().getMaxDataRow();
			int cols = ws.getCells().getMaxDataColumn();

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

			// Slinga genom rader
			for (int i = 0; i <= rows; i++) {
				List<Object> rowData = new ArrayList<Object>();

				// Gå igenom varje kolumn i den valda raden
				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());
				}

				// Lägg till i kalkylbladsdata
				worksheetData.add(rowData);
			}

			// Ställ in räckvidd
			ValueRange body = new ValueRange();
			body.setRange(range);

			// Ställ in värden
			body.setValues(worksheetData);

			// Exportera värden till Google Kalkylark
			UpdateValuesResponse result = service.spreadsheets().values()
					.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
					.execute();
			
			// Utskrift
			System.out.printf("%d cells updated.", result.getUpdatedCells());

		}

		// Öppna Google-kalkylark i webbläsaren
		Desktop desk = Desktop.getDesktop();
		desk.browse(new URI("https://docs.google.com/spreadsheets/d/" + spreadsheet.getSpreadsheetId()));
	} catch (Exception e) {
		System.out.println(e.getMessage());
	}
}

Komplett källkod

Följande är den fullständiga källkoden för att konvertera en Excel XLSX-fil till Google Sheets i 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 {

	/**
	 * Global instans av de omfång som krävs. Om du ändrar dessa omfång, ta bort
	 * dina tidigare sparade tokens/mapp.
	 */
	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 {		
		// Exportera Excel-data till Google Sheets
		exportExcelToGoogle("workbook.xlsx");
	}

	private static void exportExcelToGoogle(String _excelFileName) {
		try {
			// Bygg en ny auktoriserad API-klienttjänst.
			final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
			
			Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
					.setApplicationName(APPLICATION_NAME).build();
			
			// Ladda en Excel-arbetsbok
			Workbook wb = new Workbook(_excelFileName);
			
			// Hämta namnet på det första arbetsbladet
			String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
			
			// Få alla arbetsblad
			WorksheetCollection collection = wb.getWorksheets();
	
			// Skapa ett nytt Google-kalkylblad med standardkalkylblad
			Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
	
			String range;
	
			// Bläddra igenom arbetsblad
			for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
				// Få referens till arbetsbladet
				Worksheet ws = collection.get(worksheetIndex);
	
				if (worksheetIndex == 0) {
					// Första arket skapas som standard, så ställ bara in intervall
					range = defaultWorksheetName + "!A:Y";
				} else {
					// Lägg till ett nytt ark
					addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
					range = ws.getName().trim() + "!A:Y";
				}
	
				// Få antal rader och kolumner
				int rows = ws.getCells().getMaxDataRow();
				int cols = ws.getCells().getMaxDataColumn();
	
				List<List<Object>> worksheetData = new ArrayList<List<Object>>();
	
				// Slinga genom rader
				for (int i = 0; i <= rows; i++) {
					List<Object> rowData = new ArrayList<Object>();
	
					// Gå igenom varje kolumn i den valda raden
					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());
					}
	
					// Lägg till kalkylbladsdata
					worksheetData.add(rowData);
				}
	
				// Ställ in räckvidd
				ValueRange body = new ValueRange();
				body.setRange(range);
	
				// Ställ in värden
				body.setValues(worksheetData);
	
				// Exportera värden till Google Kalkylark
				UpdateValuesResponse result = service.spreadsheets().values()
						.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
						.execute();
				
				// Utskrift
				System.out.printf("%d cells updated.", result.getUpdatedCells());
	
			}
	
			// Öppna Google-kalkylark i webbläsaren
			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 {
		// Skapa ett nytt kalkylblad
		Spreadsheet spreadsheet = new Spreadsheet()
				.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));
	
		// Skapa ett nytt ark
		Sheet sheet = new Sheet();
		sheet.setProperties(new SheetProperties());
		sheet.getProperties().setTitle(_defaultSheetName);
	
		// Lägg till ark i listan
		List<Sheet> sheetList = new ArrayList<Sheet>();
		sheetList.add(sheet);
		spreadsheet.setSheets(sheetList);
	
		// Utför begäran
		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 {
			// Lägg till nytt ark
			AddSheetRequest addSheetRequest = new AddSheetRequest();
			addSheetRequest.setProperties(new SheetProperties());
			addSheetRequest.getProperties().setTitle(_sheetName);
	
			// Skapa uppdateringsbegäran
			BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
			Request req = new Request();
			req.setAddSheet(addSheetRequest);
			batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
			batchUpdateSpreadsheetRequest.getRequests().add(req);
	
			// Utför begäran
			_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 {
		// Ladda klienthemligheter
		InputStream in = new FileInputStream(new File("credentials.json"));
		GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
	
		// Bygg flöde och utlös begäran om användarbehörighet
		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");
	}
}

Skaffa en gratis licens

Du kan få en gratis tillfällig licens och använda Aspose.Cells för Java utan utvärderingsbegränsningar.

Slutsats

Att konvertera Excel-filer till Google Sheets med Aspose.Cells för Java är en enkel process. Med detta kraftfulla Java-bibliotek kan du automatisera konverteringen och enkelt dela din data med medarbetare med hjälp av Google Sheets samarbetsfunktioner i realtid. Den här metoden är särskilt värdefull när du behöver arbeta med andra på kalkylbladsdata och vill dra nytta av Google Sheets molnbaserade möjligheter.

Genom att följa stegen som beskrivs i det här blogginlägget kan du effektivisera ditt arbetsflöde och förbättra dina samarbetsinsatser, vilket gör det enklare än någonsin att arbeta med Excel-data på ett samarbetande och dynamiskt sätt.

Du kan också besöka dokumentationen för att läsa mer om Aspose.Cells för Java. Om du skulle ha några frågor eller funderingar, låt oss veta via vårt forum.

Se även