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.

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.
Yeni bir Java uygulaması (masaüstü) oluşturun.
Önceki bölümde bahsedildiği gibi Aspose.Cells for Java ve Google Client API’lerini projeye kurun.
JSON dosyasını (Google Cloud’da kimlik bilgileri oluşturduktan sonra indirdiğimiz) kopyalayın ve projenin dizinine yapıştırın.
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);
- 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");
}
- 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;
}
- 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());
}
}
- Ş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();
- 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();
- 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);
- 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
}
- 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.