概要
Google Drive に保存されている Excel ファイル(.xlsx)を、同じGoogle Drive上にGoogle スプレッドシート形式で複製するための GAS(Google Apps Script)です。
Excel ファイルはそのままでは IMPORTRANGE
関数や他の GAS から参照できないため、本スクリプトで「別のスプレッドシートへコピー」を自動化します。
なお、ネット上のサンプルコードを試したところ拡張子が .pdf
や .doc
に変わってしまう現象が起きたため、動作が安定する方法を改めて検討・実装しました。
Googleドライブ上のExcelファイル
Googleドライブ上のExcelファイルは緑色のラベルで「.XLSX」と表示されます。
DriveAPIを追加
Apps Script画面の「サービス」からDrive API V2を追加してください。
Script
以下のコードをApps Scriptに貼り付けて保存します。
const sourceFileId = 'XXXX'; // 元のExcelファイルのID
const existingSpreadsheetId = 'YYYY'; // 上書きしたいスプレッドシートのID
function excel_to_gsheet_converter() {
// Excelファイルを取得
const sourceFile = DriveApp.getFileById(sourceFileId);
// ExcelファイルをGoogleスプレッドシートに変換して上書き
overwriteSpreadsheet(sourceFile, existingSpreadsheetId);
}
function overwriteSpreadsheet(file, spreadsheetId) {
try {
// ExcelファイルをGoogleスプレッドシートに変換するためにバイナリデータを取得
const blob = file.getBlob();
// 既存のスプレッドシートに内容を上書き
const updatedFile = Drive.Files.update(
{
title: DriveApp.getFileById(spreadsheetId).getName(), // ファイル名は変更しない
mimeType: MimeType.GOOGLE_SHEETS // MIMEタイプはGoogleスプレッドシート
},
spreadsheetId,
blob
);
Logger.log(`ファイルを上書きしました: ${updatedFile.id}`);
} catch (e) {
Logger.log(`エラーが発生しました: ${e.message}`);
}
}
トリガーを設定
- エディタ右側の「トリガー」 から「+」をクリック
- 実行する関数に excelToGsheetConverter を選択
- イベントのソース:時間主導型
- 時間ベースのタイプ:時間ベースのタイマー
- 時間の間隔:例)1 時間おき
- 保存 をクリックして完了
以上です。
このスクリプトを有効にすると、指定した間隔でExcelファイルが自動的にGoogleスプレッドシートへ複製され、他のシートやGASから参照できるようになります。