この記事では、JavaでMSExcelXLSまたはXLSXをプログラムでGoogleスプレッドシートに変換する方法を示します。
Google Sheetsは、スプレッドシートドキュメントを作成および操作できる人気のあるオンラインアプリケーションです。さらに、スプレッドシートを複数の人とリアルタイムで共有できます。そのため、多くの場合、ExcelワークブックからプログラムでGoogleスプレッドシートのスプレッドシートにデータをエクスポートする必要があります。この記事では、ExcelデータをJavaでGoogleスプレッドシートのスプレッドシートにエクスポートする方法の完全なウォークスルーを提供します。
前提条件-JavaでExcelファイルをGoogleスプレッドシートに変換する
Google Cloud Project
Google Cloudは、アプリケーションで利用できるさまざまな種類のサービスを提供するクラウドコンピューティングプラットフォームです。 Google Sheets APIを使用するには、Google Cloudコンソールでプロジェクトを作成し、GoogleSheetsAPIを有効にする必要があります。 GoogleCloudプロジェクトを作成してSheetsAPIを有効にする方法のステップバイステップガイドを読むことができます。
ExcelからGoogleスプレッドシートへの変換用のJavaAPI
Excel XLS / XLSXファイルからGoogleスプレッドシートにデータをエクスポートするには、次のAPIが必要です。
- Aspose.Cells for Java - 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>
ExcelデータをJavaでGoogleスプレッドシートにエクスポートする
以下は、Excelファイルを読み取り、そのデータをJavaコンソールアプリケーションのGoogleスプレッドシートにエクスポートする手順です。
1.新しいJavaアプリケーション(デスクトップ)を作成します。
2.前のセクションで説明したように、プロジェクトにAspose.Cells for JavaおよびGoogleClientAPIをインストールします。
- 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);
5.資格情報ファイルを使用してユーザーを承認する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");
}
- 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;
}
- 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());
}
}
8.次に、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();
9.次に、Aspose.Cells for Javaを使用してExcelXLS/XLSXファイルをロードします。また、ブックの最初のワークシートの名前を取得します。
// Excelブックをロードする
Workbook wb = new Workbook(_excelFileName);
// 最初のワークシートの名前を取得します
String defaultWorksheetName = wb.getWorksheets().get(0).getName().trim();
// すべてのワークシートを取得する
WorksheetCollection collection = wb.getWorksheets();
- createSpreadsheetメソッドを呼び出して、Googleスプレッドシートに新しいスプレッドシートを作成します。
// デフォルトのワークシートで新しいGoogleスプレッドシートを作成する
Spreadsheet spreadsheet = createSpreadsheet(service, wb.getFileName(), defaultWorksheetName);
11.各ワークシートからデータを読み取り、リストに保存します。
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スプレッドシートにデータを投稿するリクエストを実行します
}
- 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());
}
}
完全なソースコード
以下は、ExcelXLSXファイルを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でExcelXLSまたはXLSXファイルをプログラムでGoogleスプレッドシートに変換する方法を学習しました。 Google Cloudプロジェクトの作成、Google Sheets APIの有効化、Excelファイルの読み取り、ExcelファイルからGoogleSheetsへのデータのエクスポートの方法に関する完全なガイドラインを提供しました。 ドキュメントにアクセスして、Aspose.Cells for Javaの詳細を読むこともできます。ご不明な点やご質問がございましたら、フォーラムからお知らせください。