이 문서에서는 Java에서 프로그래밍 방식으로 MS Excel XLS 또는 XLSX를 Google 스프레드시트로 변환하는 방법을 보여줍니다.

Java에서 Excel XLS 또는 XLSX를 Google 스프레드시트로 변환

Google 스프레드시트는 스프레드시트 문서를 만들고 조작할 수 있는 인기 있는 온라인 애플리케이션입니다. 또한 실시간으로 여러 사람과 스프레드시트를 공유할 수 있습니다. 따라서 프로그래밍 방식으로 Excel 통합 문서의 데이터를 Google 스프레드시트의 스프레드시트로 내보내야 하는 경우가 많습니다. 이 기사에서는 Excel 데이터를 Java로 된 Google 스프레드시트의 스프레드시트로 내보내는 방법에 대한 완전한 설명을 제공합니다.

전제 조건 - Java에서 Excel 파일을 Google 스프레드시트로 변환

구글 클라우드 프로젝트

Google Cloud는 애플리케이션에서 활용할 수 있는 다양한 유형의 서비스를 제공하는 클라우드 컴퓨팅 플랫폼입니다. Google Sheets API를 사용하려면 Google Cloud 콘솔에서 프로젝트를 만들고 Google Sheets API를 활성화해야 합니다. Google Cloud 프로젝트를 만들고 Sheets API를 활성화하는 방법에 대한 단계별 가이드를 읽을 수 있습니다.

Excel에서 Google 스프레드시트로의 변환을 위한 Java API

Excel XLS/XLSX 파일에서 Google 스프레드시트로 데이터를 내보내려면 다음 API가 필요합니다.

  • 자바용 Aspose.Cells - To read the data from Excel files.
  • Java용 Google 클라이언트 API - Google 스프레드시트에서 스프레드시트를 만들고 업데이트합니다.

이러한 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>

Java에서 Excel 데이터를 Google 스프레드시트로 내보내기

다음은 Java 콘솔 애플리케이션에서 Excel 파일을 읽은 다음 해당 데이터를 Google 스프레드시트로 내보내는 단계입니다.

  1. 새 Java 응용 프로그램(데스크톱)을 만듭니다.

  2. 이전 섹션에서 언급한 대로 프로젝트에 Aspose.Cells for Java 및 Google Client API를 설치합니다.

  3. JSON 파일(Google Cloud에서 자격 증명을 생성한 후 다운로드한 파일)을 복사하여 프로젝트 디렉터리에 붙여넣습니다.

  4. 시트에 대한 액세스 권한을 정의하는 응용 프로그램의 범위를 지정합니다. 또한 토큰 디렉터리 경로 및 JSON 팩토리에 대한 변수를 생성합니다.

/**
 * 필요한 범위의 전역 인스턴스입니다. 이러한 범위를 수정하는 경우 삭제
 * 이전에 저장한 tokens/ 폴더.
 */
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 스프레드시트에 새 스프레드시트를 만들고 기본 시트의 이름을 설정합니다. 이 메서드는 Spreadsheet 개체를 반환합니다.
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. 그런 다음 Aspose.Cells for Java를 사용하여 Excel XLS/XLSX 파일을 로드합니다. 또한 통합 문서의 첫 번째 워크시트 이름을 가져옵니다.
// 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 파일을 Java의 Google 스프레드시트로 변환하는 전체 소스 코드입니다.

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 {

	/**
	 * 필요한 범위의 전역 인스턴스입니다. 이러한 범위를 수정하는 경우 삭제
	 * 이전에 저장한 tokens/ 폴더.
	 */
	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");
	}
}

데모 - Java에서 Excel 파일을 Google 스프레드시트로 변환

무료 Aspose.Cells 라이선스 받기

무료 임시 라이선스를 받고 평가 제한 없이 Aspose.Cells for Java를 사용할 수 있습니다.

결론

이 기사에서는 Java에서 프로그래밍 방식으로 Excel XLS 또는 XLSX 파일을 Google 스프레드시트로 변환하는 방법을 배웠습니다. Google Cloud 프로젝트를 만들고, Google Sheets API를 활성화하고, Excel 파일을 읽고, Excel 파일에서 Google Sheets로 데이터를 내보내는 방법에 대한 전체 지침을 제공했습니다. 문서를 방문하여 Java용 Aspose.Cells에 대한 자세한 내용을 읽을 수도 있습니다. 질문이나 질문이 있는 경우 포럼을 통해 알려주십시오.

또한보십시오