Bu makale, MS Excel XLS veya XLSX’in Java’da programlı olarak Google Sayfalarına nasıl dönüştürüleceğini gösterir.

Excel XLS veya XLSX'i Java'da Google Sayfalarına Dönüştürün

Google E-Tablolar, e-tablo belgeleri oluşturmanıza ve değiştirmenize olanak tanıyan popüler bir çevrimiçi uygulamadır. Ayrıca, elektronik tabloları gerçek zamanlı olarak birden fazla kişiyle paylaşmanıza olanak tanır. Bu nedenle, genellikle Excel çalışma kitaplarından Google E-Tablolar’daki bir elektronik tabloya programlı olarak veri aktarmanız gerekir. Bu makalede, Excel verilerinin Java’da bir Google E-Tablolarına nasıl aktarılacağına dair eksiksiz bir yol göstereceğiz.

Ön Koşullar - Java’da Excel Verilerini Google E-Tablolara Aktarın

Google Bulut Projesi

Google Cloud, uygulamalarımızda kullanabileceğimiz çeşitli hizmetler sağlayan bir bulut bilgi işlem platformudur. Google Sheets API’yi kullanmak için Google Cloud konsolunda bir proje oluşturmamız ve Google Sheets API’yi etkinleştirmemiz gerekecek. Google Cloud projesi oluşturma ve Sheets API’yi etkinleştirme ile ilgili adım adım kılavuzu okuyabilirsiniz.

Excel Verilerini Google Sayfalarına Aktarmak için Java API’leri

Excel XLS/XLSX dosyalarından Google E-Tablolar’a veri aktarmak için aşağıdaki API’lere ihtiyacımız olacak.

  • Java için Aspose.Cells - To read the data from Excel files.
  • Java için Google İstemci API’leri - Google E-Tablolar’da e-tablolar oluşturmak ve güncellemek için.

Bu API’leri yüklemek için pom.xml dosyanızda aşağıdaki yapılandırmaları kullanabilirsiniz.

<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 Verilerini Java’da Google E-Tablolara Aktarın

Aşağıda, bir Excel dosyasını okuma ve ardından verilerini bir Java konsolu uygulamasında Google E-Tablolar’a aktarma adımları yer almaktadır.

  1. Yeni bir Java uygulaması (masaüstü) oluşturun.

  2. Önceki bölümde bahsedildiği gibi Aspose.Cells for Java ve Google Client API’lerini projeye kurun.

  3. JSON dosyasını (Google Cloud’da kimlik bilgileri oluşturduktan sonra indirdiğimiz) kopyalayın ve projenin dizinine yapıştırın.

  4. Sayfalara erişim izinlerini tanımlayan uygulamanın kapsamlarını belirtin. Ayrıca belirteç dizini yolu ve JSON fabrikası için değişkenler oluşturun.

/**
 * Gerekli kapsamların global örneği. Bu kapsamları değiştiriyorsanız, silin
 * önceden kaydedilmiş belirteçleriniz/klasörünüz.
 */
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. Kullanıcıya kimlik bilgileri dosyasını kullanma yetkisi veren bir getCredentials yöntemi oluşturun.
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
	// İstemci sırlarını yükle
	InputStream in = new FileInputStream(new File("credentials.json"));
	GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

	// Akış oluşturun ve kullanıcı yetkilendirme isteğini tetikleyin
	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. Google E-Tablolar’da yeni bir e-tablo oluşturmak ve varsayılan sayfanın adını ayarlamak için createSpreadsheet yöntemi oluşturun. Bu yöntem bir Elektronik Tablo nesnesi döndürür.
private static Spreadsheet createSpreadsheet(Sheets _service, String spreadsheetName, String _defaultSheetName)
		throws IOException {
	// Yeni bir e-tablo oluştur
	Spreadsheet spreadsheet = new Spreadsheet()
			.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));

	// Yeni bir sayfa oluştur
	Sheet sheet = new Sheet();
	sheet.setProperties(new SheetProperties());
	sheet.getProperties().setTitle(_defaultSheetName);

	// Listeye sayfa ekle
	List<Sheet> sheetList = new ArrayList<Sheet>();
	sheetList.add(sheet);
	spreadsheet.setSheets(sheetList);

	// İsteği yürüt
	spreadsheet = _service.spreadsheets().create(spreadsheet).setFields("spreadsheetId").execute();
	System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());

	return spreadsheet;
}
  1. Google e-tablosuna yeni bir sayfa eklemek için bir addSheet yöntemi oluşturun.
private static void addSheet(Sheets _service, String _spreadSheetID, String _sheetName) {
	try {
		// Yeni Sayfa ekle
		AddSheetRequest addSheetRequest = new AddSheetRequest();
		addSheetRequest.setProperties(new SheetProperties());
		addSheetRequest.getProperties().setTitle(_sheetName);

		// Güncelleme isteği oluştur
		BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
		Request req = new Request();
		req.setAddSheet(addSheetRequest);
		batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
		batchUpdateSpreadsheetRequest.getRequests().add(req);

		// İsteği yürüt
		_service.spreadsheets().batchUpdate(_spreadSheetID, batchUpdateSpreadsheetRequest).execute();
	} catch (Exception e) {
		System.out.println("Error in creating sheet: " + e.getMessage());
	}
}
  1. Şimdi, exportExcelToGoogle yöntemini oluşturun ve bu yöntemde E-Tablolar hizmetini başlatın.
// Yeni bir yetkili API istemci hizmeti oluşturun.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
		.setApplicationName(APPLICATION_NAME).build();
  1. Ardından Aspose.Cells for Java’yı kullanarak Excel XLS/XLSX dosyasını yükleyin. Ayrıca çalışma kitabındaki ilk çalışma sayfasının adını da alın.
// Excel çalışma kitabı yükleme
Workbook wb = new Workbook(_excelFileName);

// İlk çalışma sayfasının adını al
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();

// Tüm çalışma sayfalarını al
WorksheetCollection collection = wb.getWorksheets();
  1. Google E-Tablolar’da yeni bir e-tablo oluşturmak için createSpreadsheet yöntemini çağırın.
// Varsayılan çalışma sayfasıyla yeni bir Google e-tablosu oluşturun
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
  1. Her çalışma sayfasındaki verileri okuyun ve bir listeye kaydedin.
String range;

// Çalışma sayfaları arasında döngü
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
	// Çalışma sayfasının referansını alın
	Worksheet ws = collection.get(worksheetIndex);

	if (worksheetIndex == 0) {
		// İlk sayfa varsayılan olarak oluşturulur, bu nedenle yalnızca aralığı ayarlayın
		range = defaultWorksheetName + "!A:Y";
	} else {
		// yeni bir sayfa ekle
		addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
		range = ws.getName().trim() + "!A:Y";
	}

	// Satır ve sütun sayısını al
	int rows = ws.getCells().getMaxDataRow();
	int cols = ws.getCells().getMaxDataColumn();

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

	// Satırlarda döngü
	for (int i = 0; i <= rows; i++) {
		List<Object> rowData = new ArrayList<Object>();

		// Seçilen satırdaki her sütunda döngü yapın
		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());
		}

		// Çalışma sayfası verilerine ekle
		worksheetData.add(rowData);
	}
  
  // YAPILACAKLAR: Google E-Tablolar'a veri gönderme isteğini yürütün 
}
  1. Excel dosyasındaki her çalışma sayfası için, Google E-Tablolar’daki elektronik tabloya veri yazmak için bir istek oluşturun.
// Aralığı ayarla
ValueRange body = new ValueRange();
body.setRange(range);

// Değerleri ayarla
body.setValues(worksheetData);

// Değerleri Google E-Tablolar'a aktarın
UpdateValuesResponse result = service.spreadsheets().values()
		.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
		.execute();

// Baskı çıktısı
System.out.printf("%d cells updated.", result.getUpdatedCells());

Verileri bir Excel dosyasından Google E-Tablolar’da bir e-tabloya okumak ve dışa aktarmak için eksiksiz yöntem aşağıda verilmiştir.

private static void exportExcelToGoogle(String _excelFileName) {
	try {
		// Yeni bir yetkili API istemci hizmeti oluşturun.
		final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
		
		Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
				.setApplicationName(APPLICATION_NAME).build();
		
		// Excel çalışma kitabı yükleme
		Workbook wb = new Workbook(_excelFileName);
		
		// İlk çalışma sayfasının adını al
		String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
		
		// Tüm çalışma sayfalarını al
		WorksheetCollection collection = wb.getWorksheets();

		// Varsayılan çalışma sayfasıyla yeni bir Google e-tablosu oluşturun
		Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);

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

		String range;

		// Çalışma sayfaları arasında döngü
		for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
			// Çalışma sayfasının referansını alın
			Worksheet ws = collection.get(worksheetIndex);

			if (worksheetIndex == 0) {
				// İlk sayfa varsayılan olarak oluşturulur, bu nedenle yalnızca aralığı ayarlayın
				range = defaultWorksheetName + "!A:Y";
			} else {
				// yeni bir sayfa ekle
				addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
				range = ws.getName().trim() + "!A:Y";
			}

			// Satır ve sütun sayısını al
			int rows = ws.getCells().getMaxDataRow();
			int cols = ws.getCells().getMaxDataColumn();

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

			// Satırlarda döngü
			for (int i = 0; i <= rows; i++) {
				List<Object> rowData = new ArrayList<Object>();

				// Seçilen satırdaki her sütunda döngü yapın
				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());
				}

				// Çalışma sayfası verilerine ekle
				worksheetData.add(rowData);
			}

			// Aralığı ayarla
			ValueRange body = new ValueRange();
			body.setRange(range);

			// Değerleri ayarla
			body.setValues(worksheetData);

			// Değerleri Google E-Tablolar'a aktarın
			UpdateValuesResponse result = service.spreadsheets().values()
					.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
					.execute();
			
			// Baskı çıktısı
			System.out.printf("%d cells updated.", result.getUpdatedCells());

		}

		// Google e-tablosunu tarayıcıda aç
		Desktop desk = Desktop.getDesktop();
		desk.browse(new URI("https://docs.google.com/spreadsheets/d/" + spreadsheet.getSpreadsheetId()));
	} catch (Exception e) {
		System.out.println(e.getMessage());
	}
}

Kaynak Kodunu Tamamlayın

Aşağıda, bir Excel XLSX dosyasını Java’da Google E-Tablolara dönüştürmek için eksiksiz kaynak kodu verilmiştir.

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 {

	/**
	 * Gerekli kapsamların global örneği. Bu kapsamları değiştiriyorsanız, silin
	 * önceden kaydedilmiş belirteçleriniz/klasörünüz.
	 */
	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 verilerini Google E-Tablolar'a aktarın
		exportExcelToGoogle("workbook.xlsx");
	}

	private static void exportExcelToGoogle(String _excelFileName) {
		try {
			// Yeni bir yetkili API istemci hizmeti oluşturun.
			final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
			
			Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
					.setApplicationName(APPLICATION_NAME).build();
			
			// Excel çalışma kitabı yükleme
			Workbook wb = new Workbook(_excelFileName);
			
			// İlk çalışma sayfasının adını al
			String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
			
			// Tüm çalışma sayfalarını al
			WorksheetCollection collection = wb.getWorksheets();
	
			// Varsayılan çalışma sayfasıyla yeni bir Google e-tablosu oluşturun
			Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
	
			String range;
	
			// Çalışma sayfaları arasında döngü
			for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
				// Çalışma sayfasının referansını alın
				Worksheet ws = collection.get(worksheetIndex);
	
				if (worksheetIndex == 0) {
					// İlk sayfa varsayılan olarak oluşturulur, bu nedenle yalnızca aralığı ayarlayın
					range = defaultWorksheetName + "!A:Y";
				} else {
					// yeni bir sayfa ekle
					addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
					range = ws.getName().trim() + "!A:Y";
				}
	
				// Satır ve sütun sayısını al
				int rows = ws.getCells().getMaxDataRow();
				int cols = ws.getCells().getMaxDataColumn();
	
				List<List<Object>> worksheetData = new ArrayList<List<Object>>();
	
				// Satırlarda döngü
				for (int i = 0; i <= rows; i++) {
					List<Object> rowData = new ArrayList<Object>();
	
					// Seçilen satırdaki her sütunda döngü yapın
					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());
					}
	
					// Çalışma sayfası verilerine ekle
					worksheetData.add(rowData);
				}
	
				// Aralığı ayarla
				ValueRange body = new ValueRange();
				body.setRange(range);
	
				// Değerleri ayarla
				body.setValues(worksheetData);
	
				// Değerleri Google E-Tablolar'a aktarın
				UpdateValuesResponse result = service.spreadsheets().values()
						.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
						.execute();
				
				// Baskı çıktısı
				System.out.printf("%d cells updated.", result.getUpdatedCells());
	
			}
	
			// Google e-tablosunu tarayıcıda aç
			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 {
		// Yeni bir e-tablo oluştur
		Spreadsheet spreadsheet = new Spreadsheet()
				.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));
	
		// Yeni bir sayfa oluştur
		Sheet sheet = new Sheet();
		sheet.setProperties(new SheetProperties());
		sheet.getProperties().setTitle(_defaultSheetName);
	
		// Listeye sayfa ekle
		List<Sheet> sheetList = new ArrayList<Sheet>();
		sheetList.add(sheet);
		spreadsheet.setSheets(sheetList);
	
		// İsteği yürüt
		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 {
			// Yeni Sayfa ekle
			AddSheetRequest addSheetRequest = new AddSheetRequest();
			addSheetRequest.setProperties(new SheetProperties());
			addSheetRequest.getProperties().setTitle(_sheetName);
	
			// Güncelleme isteği oluştur
			BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
			Request req = new Request();
			req.setAddSheet(addSheetRequest);
			batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
			batchUpdateSpreadsheetRequest.getRequests().add(req);
	
			// İsteği yürüt
			_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 {
		// İstemci sırlarını yükle
		InputStream in = new FileInputStream(new File("credentials.json"));
		GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
	
		// Akış oluşturun ve kullanıcı yetkilendirme isteğini tetikleyin
		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 - Java’da Excel’den Google Sayfalarına Dönüştürme

Java Excel to Google Sheets API - Ücretsiz Lisans Alın

Ücretsiz bir geçici lisans alabilir ve Aspose.Cells for Java’yı değerlendirme sınırlamaları olmaksızın kullanabilirsiniz.

Çözüm

Bu makalede, Excel XLS veya XLSX dosyalarını Java’da programlı olarak Google E-Tablolar’a nasıl aktaracağınızı öğrendiniz. Google Cloud projesi oluşturmaya, Google Sheets API’yi etkinleştirmeye, Excel dosyalarını okumaya ve Excel dosyalarından Google Sheets’e veri aktarmaya ilişkin tüm yönergeleri sağladık. Ayrıca Aspose.Cells for Java hakkında daha fazlasını okumak için belgeleri de ziyaret edebilirsiniz. Herhangi bir sorunuz veya sorunuz olması durumunda forumumuz aracılığıyla bize bildirin.

Ayrıca bakınız