מאמר זה מראה כיצד להמיר MS Excel XLS או XLSX ל-Google Sheets באופן תכנותי ב-Java.

המר את Excel XLS או XLSX ל-Google Sheets ב-Java

Google Sheets הוא יישום מקוון פופולרי המאפשר ליצור ולתפעל מסמכים בגיליון אלקטרוני. יתר על כן, זה מאפשר לך לשתף את הגיליונות האלקטרוניים עם מספר אנשים בזמן אמת. לכן, לעתים קרובות אתה צריך לייצא נתונים מחוברות עבודה Excel לגיליון אלקטרוני ב-Google Sheets באופן פרוגרמטי. במאמר זה, אנו נותנים הדרכה מלאה כיצד לייצא נתוני Excel ל-Google Sheets ב-Java.

דרישות מוקדמות - ייצוא נתוני Excel ל-Google Sheets ב-Java

Google Cloud Project

Google Cloud היא פלטפורמת מחשוב ענן, המספקת סוגים שונים של שירותים שאנו יכולים להשתמש בהם באפליקציות שלנו. כדי להשתמש ב-Google Sheets API, נצטרך ליצור פרויקט במסוף Google Cloud ולהפעיל את Google Sheets API. אתה יכול לקרוא את המדריך המפורט בנושא כיצד ליצור פרויקט של Google Cloud ולהפעיל את Sheets API.

ממשקי API של Java לייצוא נתוני Excel ל-Google Sheets

כדי לייצא נתונים מקובצי Excel XLS/XLSX ל-Google Sheets, נצטרך את ממשקי ה-API הבאים.

  • Aspose.Cells עבור Java - To read the data from Excel files.
  • ממשקי API של Google Client עבור Java - כדי ליצור ולעדכן גיליונות אלקטרוניים ב-Google Sheets.

כדי להתקין ממשקי API אלה, אתה יכול להשתמש בתצורות הבאות בקובץ 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 Sheets ב-Java

להלן השלבים לקריאת קובץ Excel ולאחר מכן לייצא את הנתונים שלו ל-Google Sheets ביישום מסוף 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. צור שיטת createSpreadsheet כדי ליצור גיליון אלקטרוני חדש ב-Google Sheets והגדר את השם של גיליון ברירת המחדל. שיטה זו מחזירה אובייקט של גיליון אלקטרוני.
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, ובשיטה זו, אתחול שירות Sheets.
// בניית שירות לקוחות 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 Sheets.
// צור גיליון אלקטרוני חדש של 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);
	}
  
  // מטלה: בצע בקשה לפרסום נתונים ב-Google Sheets 
}
  1. עבור כל גליון עבודה בקובץ האקסל, צור בקשה לכתיבת נתונים לגיליון האלקטרוני ב-Google Sheets.
// הגדר טווח
ValueRange body = new ValueRange();
body.setRange(range);

// הגדר ערכים
body.setValues(worksheetData);

// ייצא ערכים ל-Google Sheets
UpdateValuesResponse result = service.spreadsheets().values()
		.update(spreadsheet.getSpreadsheetId(), range, body).setValueInputOption("USER_ENTERED")
		.execute();

// פלט הדפסה
System.out.printf("%d cells updated.", result.getUpdatedCells());

השיטה המלאה לקרוא ולייצא נתונים מקובץ Excel לגיליון אלקטרוני ב-Google Sheets ניתנת להלן.

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 Sheets
			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 Sheets ב-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 Sheets
		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 Sheets
				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 ל-Google Sheets API - קבל רישיון חינם

אתה יכול לקבל רישיון זמני בחינם ולהשתמש ב-Aspose.Cells עבור Java ללא מגבלות הערכה.

סיכום

במאמר זה, למדת כיצד לייצא קבצי Excel XLS או XLSX ל-Google Sheets באופן תכנותי ב-Java. סיפקנו את ההנחיות המלאות כיצד ליצור פרויקט Google Cloud, להפעיל את Google Sheets API, לקרוא קובצי Excel ולייצא נתונים מקובצי Excel ל-Google Sheets. אתה יכול גם לבקר בתיעוד כדי לקרוא עוד על Aspose.Cells עבור Java. למקרה שיש לך שאלות או שאילתות כלשהן, הודע לנו דרך הפורום שלנו.

ראה גם