توضح هذه المقالة كيفية تحويل MS Excel XLS أو XLSX إلى جداول بيانات Google برمجيًا في Java.

قم بتحويل Excel XLS أو XLSX إلى جداول بيانات Google في Java

Google Sheets هو تطبيق شائع عبر الإنترنت يتيح لك إنشاء مستندات جداول البيانات ومعالجتها. علاوة على ذلك ، يسمح لك بمشاركة جداول البيانات مع عدة أشخاص في الوقت الفعلي. لذلك ، غالبًا ما يتعين عليك تصدير البيانات من مصنفات Excel إلى جدول بيانات في جداول بيانات Google برمجيًا. في هذه المقالة ، سنقدم جولة كاملة حول كيفية تصدير بيانات Excel إلى جداول بيانات Google في Java.

المتطلبات الأساسية - تصدير بيانات Excel إلى جداول بيانات Google في Java

مشروع جوجل كلاود

Google Cloud عبارة عن نظام أساسي للحوسبة السحابية يوفر أنواعًا مختلفة من الخدمات التي يمكننا الاستفادة منها في تطبيقاتنا. لاستخدام Google Sheets API ، سيتعين علينا إنشاء مشروع على وحدة تحكم Google Cloud وتمكين Google Sheets API. يمكنك قراءة الدليل المفصل خطوة بخطوة حول كيفية إنشاء مشروع Google Cloud وتمكين Sheets API.

Java APIs لتصدير بيانات Excel إلى جداول بيانات Google

لتصدير البيانات من ملفات Excel XLS / XLSX إلى جداول بيانات Google ، سنحتاج إلى واجهات برمجة التطبيقات التالية.

  • Aspose.Cells لجافا - To read the data from Excel files.
  • Google Client APIs for Java - لإنشاء وتحديث جداول البيانات على جداول بيانات Google.

لتثبيت واجهات برمجة التطبيقات هذه ، يمكنك استخدام التكوينات التالية في ملف pom.xml الخاص بك.

<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 إلى جداول بيانات Google في Java

فيما يلي خطوات قراءة ملف Excel ثم تصدير بياناته إلى جداول بيانات Google في تطبيق وحدة تحكم Java.

  1. قم بإنشاء تطبيق Java جديد (سطح المكتب).

  2. قم بتثبيت Aspose.Cells لـ Java و Google Client APIs في المشروع ، كما هو مذكور في القسم السابق.

  3. انسخ ملف JSON (الملف الذي قمنا بتنزيله بعد إنشاء بيانات الاعتماد في Google Cloud) والصقه في دليل المشروع.

  4. حدد نطاقات التطبيق التي تحدد أذونات الوصول إلى الأوراق. أيضًا ، قم بإنشاء متغيرات لمسار دليل الرمز المميز ومصنع JSON.

/**
 * مثيل عالمي للنطاقات المطلوبة. في حالة تعديل هذه النطاقات ، احذفها
 * الرموز / المجلد المحفوظ مسبقًا.
 */
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. قم بإنشاء أسلوب getCredentials الذي يصرح للمستخدم باستخدام ملف بيانات الاعتماد.
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
	// تحميل أسرار العميل
	InputStream in = new FileInputStream(new File("credentials.json"));
	GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

	// إنشاء التدفق وتشغيل طلب إذن المستخدم
	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 وتعيين اسم الورقة الافتراضية. تقوم هذه الطريقة بإرجاع كائن جدول بيانات.
private static Spreadsheet createSpreadsheet(Sheets _service, String spreadsheetName, String _defaultSheetName)
		throws IOException {
	// قم بإنشاء جدول بيانات جديد
	Spreadsheet spreadsheet = new Spreadsheet()
			.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));

	// قم بإنشاء ورقة جديدة
	Sheet sheet = new Sheet();
	sheet.setProperties(new SheetProperties());
	sheet.getProperties().setTitle(_defaultSheetName);

	// إضافة ورقة إلى القائمة
	List<Sheet> sheetList = new ArrayList<Sheet>();
	sheetList.add(sheet);
	spreadsheet.setSheets(sheetList);

	// تنفيذ الطلب
	spreadsheet = _service.spreadsheets().create(spreadsheet).setFields("spreadsheetId").execute();
	System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());

	return spreadsheet;
}
  1. قم بإنشاء طريقة addSheet لإضافة ورقة جديدة في جدول بيانات Google.
private static void addSheet(Sheets _service, String _spreadSheetID, String _sheetName) {
	try {
		// أضف ورقة جديدة
		AddSheetRequest addSheetRequest = new AddSheetRequest();
		addSheetRequest.setProperties(new SheetProperties());
		addSheetRequest.getProperties().setTitle(_sheetName);

		// إنشاء طلب تحديث
		BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
		Request req = new Request();
		req.setAddSheet(addSheetRequest);
		batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
		batchUpdateSpreadsheetRequest.getRequests().add(req);

		// تنفيذ الطلب
		_service.spreadsheets().batchUpdate(_spreadSheetID, batchUpdateSpreadsheetRequest).execute();
	} catch (Exception e) {
		System.out.println("Error in creating sheet: " + e.getMessage());
	}
}
  1. الآن ، قم بإنشاء طريقة exportExcelToGoogle ، وبهذه الطريقة ، قم بتهيئة خدمة جداول البيانات.
// إنشاء خدمة عميل API معتمدة جديدة.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
		.setApplicationName(APPLICATION_NAME).build();
  1. بعد ذلك ، قم بتحميل ملف Excel XLS / XLSX باستخدام Aspose.Cells لـ Java. أيضًا ، احصل على اسم ورقة العمل الأولى في المصنف.
// قم بتحميل مصنف Excel
Workbook wb = new Workbook(_excelFileName);

// احصل على اسم ورقة العمل الأولى
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();

// احصل على جميع أوراق العمل
WorksheetCollection collection = wb.getWorksheets();
  1. قم باستدعاء طريقة createSpreadsheet لإنشاء جدول بيانات جديد على جداول بيانات Google.
// قم بإنشاء جدول بيانات Google جديد بورقة عمل افتراضية
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
  1. اقرأ البيانات من كل ورقة عمل واحفظها في قائمة.
String range;

// حلقة من خلال أوراق العمل
for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
	// احصل على مرجع من ورقة العمل
	Worksheet ws = collection.get(worksheetIndex);

	if (worksheetIndex == 0) {
		// يتم إنشاء الورقة الأولى افتراضيًا ، لذلك يتم تعيين النطاق فقط
		range = defaultWorksheetName + "!A:Y";
	} else {
		// أضف ورقة جديدة
		addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
		range = ws.getName().trim() + "!A:Y";
	}

	// احصل على عدد الصفوف والأعمدة
	int rows = ws.getCells().getMaxDataRow();
	int cols = ws.getCells().getMaxDataColumn();

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

	// التكرار خلال الصفوف
	for (int i = 0; i <= rows; i++) {
		List<Object> rowData = new ArrayList<Object>();

		// تكرار خلال كل عمود في الصف المحدد
		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());
		}

		// أضف إلى بيانات ورقة العمل
		worksheetData.add(rowData);
	}
  
  // TO-DO: تنفيذ طلب لنشر البيانات على جداول بيانات Google 
}
  1. لكل ورقة عمل في ملف Excel ، قم بإنشاء طلب لكتابة البيانات إلى جدول البيانات في جداول بيانات Google.
// مجموعة مجموعة
ValueRange body = new ValueRange();
body.setRange(range);

// قم بتعيين القيم
body.setValues(worksheetData);

// قم بتصدير القيم إلى جداول بيانات Google
UpdateValuesResponse result = service.spreadsheets().values()
		.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
		.execute();

// إخراج الطباعة
System.out.printf("%d cells updated.", result.getUpdatedCells());

فيما يلي الطريقة الكاملة لقراءة البيانات وتصديرها من ملف Excel إلى جدول بيانات في جداول بيانات Google.

private static void exportExcelToGoogle(String _excelFileName) {
	try {
		// إنشاء خدمة عميل API معتمدة جديدة.
		final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
		
		Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
				.setApplicationName(APPLICATION_NAME).build();
		
		// قم بتحميل مصنف Excel
		Workbook wb = new Workbook(_excelFileName);
		
		// احصل على اسم ورقة العمل الأولى
		String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
		
		// احصل على جميع أوراق العمل
		WorksheetCollection collection = wb.getWorksheets();

		// قم بإنشاء جدول بيانات Google جديد بورقة عمل افتراضية
		Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);

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

		String range;

		// حلقة من خلال أوراق العمل
		for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
			// احصل على مرجع من ورقة العمل
			Worksheet ws = collection.get(worksheetIndex);

			if (worksheetIndex == 0) {
				// يتم إنشاء الورقة الأولى افتراضيًا ، لذلك يتم تعيين النطاق فقط
				range = defaultWorksheetName + "!A:Y";
			} else {
				// أضف ورقة جديدة
				addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
				range = ws.getName().trim() + "!A:Y";
			}

			// احصل على عدد الصفوف والأعمدة
			int rows = ws.getCells().getMaxDataRow();
			int cols = ws.getCells().getMaxDataColumn();

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

			// التكرار خلال الصفوف
			for (int i = 0; i <= rows; i++) {
				List<Object> rowData = new ArrayList<Object>();

				// تكرار خلال كل عمود في الصف المحدد
				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());
				}

				// أضف إلى بيانات ورقة العمل
				worksheetData.add(rowData);
			}

			// مجموعة مجموعة
			ValueRange body = new ValueRange();
			body.setRange(range);

			// قم بتعيين القيم
			body.setValues(worksheetData);

			// قم بتصدير القيم إلى جداول بيانات Google
			UpdateValuesResponse result = service.spreadsheets().values()
					.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
					.execute();
			
			// إخراج الطباعة
			System.out.printf("%d cells updated.", result.getUpdatedCells());

		}

		// افتح جدول بيانات Google في المتصفح
		Desktop desk = Desktop.getDesktop();
		desk.browse(new URI("https://docs.google.com/spreadsheets/d/" + spreadsheet.getSpreadsheetId()));
	} catch (Exception e) {
		System.out.println(e.getMessage());
	}
}

أكمل كود المصدر

فيما يلي رمز المصدر الكامل لتحويل ملف Excel XLSX إلى جداول بيانات Google في 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 {

	/**
	 * مثيل عالمي للنطاقات المطلوبة. في حالة تعديل هذه النطاقات ، احذفها
	 * الرموز / المجلد المحفوظ مسبقًا.
	 */
	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 إلى جداول بيانات Google
		exportExcelToGoogle("workbook.xlsx");
	}

	private static void exportExcelToGoogle(String _excelFileName) {
		try {
			// إنشاء خدمة عميل API معتمدة جديدة.
			final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
			
			Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
					.setApplicationName(APPLICATION_NAME).build();
			
			// قم بتحميل مصنف Excel
			Workbook wb = new Workbook(_excelFileName);
			
			// احصل على اسم ورقة العمل الأولى
			String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
			
			// احصل على جميع أوراق العمل
			WorksheetCollection collection = wb.getWorksheets();
	
			// قم بإنشاء جدول بيانات Google جديد بورقة عمل افتراضية
			Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
	
			String range;
	
			// حلقة من خلال أوراق العمل
			for (int worksheetIndex = 0; worksheetIndex < collection.getCount(); worksheetIndex++) {
				// احصل على مرجع من ورقة العمل
				Worksheet ws = collection.get(worksheetIndex);
	
				if (worksheetIndex == 0) {
					// يتم إنشاء الورقة الأولى افتراضيًا ، لذلك يتم تعيين النطاق فقط
					range = defaultWorksheetName + "!A:Y";
				} else {
					// أضف ورقة جديدة
					addSheet(service, spreadsheet.getSpreadsheetId(), ws.getName().trim());
					range = ws.getName().trim() + "!A:Y";
				}
	
				// احصل على عدد الصفوف والأعمدة
				int rows = ws.getCells().getMaxDataRow();
				int cols = ws.getCells().getMaxDataColumn();
	
				List<List<Object>> worksheetData = new ArrayList<List<Object>>();
	
				// التكرار خلال الصفوف
				for (int i = 0; i <= rows; i++) {
					List<Object> rowData = new ArrayList<Object>();
	
					// تكرار خلال كل عمود في الصف المحدد
					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());
					}
	
					// أضف إلى بيانات ورقة العمل
					worksheetData.add(rowData);
				}
	
				// مجموعة مجموعة
				ValueRange body = new ValueRange();
				body.setRange(range);
	
				// قم بتعيين القيم
				body.setValues(worksheetData);
	
				// قم بتصدير القيم إلى جداول بيانات Google
				UpdateValuesResponse result = service.spreadsheets().values()
						.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
						.execute();
				
				// إخراج الطباعة
				System.out.printf("%d cells updated.", result.getUpdatedCells());
	
			}
	
			// افتح جدول بيانات Google في المتصفح
			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 {
		// قم بإنشاء جدول بيانات جديد
		Spreadsheet spreadsheet = new Spreadsheet()
				.setProperties(new SpreadsheetProperties().setTitle(spreadsheetName));
	
		// قم بإنشاء ورقة جديدة
		Sheet sheet = new Sheet();
		sheet.setProperties(new SheetProperties());
		sheet.getProperties().setTitle(_defaultSheetName);
	
		// إضافة ورقة إلى القائمة
		List<Sheet> sheetList = new ArrayList<Sheet>();
		sheetList.add(sheet);
		spreadsheet.setSheets(sheetList);
	
		// تنفيذ الطلب
		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 {
			// أضف ورقة جديدة
			AddSheetRequest addSheetRequest = new AddSheetRequest();
			addSheetRequest.setProperties(new SheetProperties());
			addSheetRequest.getProperties().setTitle(_sheetName);
	
			// إنشاء طلب تحديث
			BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
			Request req = new Request();
			req.setAddSheet(addSheetRequest);
			batchUpdateSpreadsheetRequest.setRequests(new ArrayList<Request>());
			batchUpdateSpreadsheetRequest.getRequests().add(req);
	
			// تنفيذ الطلب
			_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 {
		// تحميل أسرار العميل
		InputStream in = new FileInputStream(new File("credentials.json"));
		GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
	
		// إنشاء التدفق وتشغيل طلب إذن المستخدم
		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");
	}
}

عرض توضيحي - تحويل Excel إلى Google Sheets في Java

Java Excel to Google Sheets API - احصل على ترخيص مجاني

يمكنك الحصول على ترخيص مؤقت مجاني واستخدام Aspose.Cells لـ Java بدون قيود تقييم.

استنتاج

في هذه المقالة ، تعلمت كيفية تصدير ملفات Excel XLS أو XLSX إلى جداول بيانات Google برمجيًا في Java. لقد قدمنا الإرشادات الكاملة حول كيفية إنشاء مشروع Google Cloud ، وتمكين Google Sheets API ، وقراءة ملفات Excel ، وتصدير البيانات من ملفات Excel إلى جداول بيانات Google. يمكنك أيضًا زيارة التوثيق لقراءة المزيد عن Aspose.Cells for Java. في حال كان لديك أي أسئلة أو استفسارات ، أخبرنا عبر المنتدى.

أنظر أيضا