SANANEBLOG
Excel PR

Google Driveでスプレッドシート⇔Excelの変換をワンクリックで自動化する【GAS】

記事内に商品プロモーションを含む場合があります

はじめに

今回の記事では、Google Apps Script (GAS)を使って、Googleドライブ上のスプレッドシートをExcelファイルに一括で変換する方法、そしてその逆、ExcelファイルをGoogleスプレッドシートに一括変換する方法について説明します。

GASを使うと、一度に多数のファイル変換が可能となります。

GAS(Google Apps Script)とは?

GASはGoogleの提供するスクリプト環境で、Googleのサービス(ドキュメント、スプレッドシート、ドライブなど)を操作することができます。GASを利用することで、手作業で行うと時間がかかるような作業を自動化することが可能となります。

スプレッドシートからExcelに変換する

動作イメージ

Google Drive上にテストファイルとして「test1」「test2」「test3」というスプレッドシートを作成します。

これをGASから実行すると同じフォルダにエクセルファイルが作成されます。

2023/08/06更新:作成したエクセルファイルとスプレッドシートが入れ違いになって見にくいため、一度フォルダを作成しその中にエクセルファイルを格納するコードに変更しました。

作成方法

まずGoogle Driveにアクセスし、新規でフォルダを作成します。

作成後、作成したフォルダをクリックして移動し、アドレスバーのURLからフォルダのIDをコピーして控えておきます。

フォルダのIDは以下の「ここをコピー」の箇所になります。

https://drive.google.com/drive/u/0/folders/ここをコピー

コピーしたら次はGASにアクセスします。

ホーム画面右上に[新しいプロジェクト]をクリックします。

[サービス]>[Drive API]>[作成]をクリックします。作成が完了するとサービスの下に[Drive]と表示されます。

次に、実際にコードを記載していきます。もともと記載してある、

function myFunction() {

}

は削除して、新たに下記のコードをコピペしてください。

function convertAllSpreadsheetsToExcel() {
  var parentFolderId = 'YOUR_FOLDER_ID'; // ここに変換したいフォルダのIDを入れてください
  var parentFolder = DriveApp.getFolderById(parentFolderId);
  var files = parentFolder.getFilesByType(MimeType.GOOGLE_SHEETS);

  // 子フォルダを作成(名前は "ConvertedExcelFiles")
  var childFolder = parentFolder.createFolder('ConvertedExcelFiles');
  
  while (files.hasNext()) {
    var file = files.next();
    var url = 'https://docs.google.com/spreadsheets/d/' + file.getId() + '/export?format=xlsx';
    var options = {
      headers: {
        'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(),
      },
      muteHttpExceptions : true // エラーが発生してもスクリプトを続行する
    };
    var response = UrlFetchApp.fetch(url, options);
    var blob = response.getBlob().setName(file.getName() + '.xlsx');
    childFolder.createFile(blob);
  }
}

コピぺしたら、2行目の YOUR_FOLDER_ID に先ほど控えておいたGoogle DriveのフォルダIDを入力します。

最後に「Ctrl + S」を押すか上部バーにある[プロジェクトを保存]をクリックするとスクリプトが保存されます。

実行方法

Google Driveに変換したいスプレッドシートを格納します。

格納後、GASの[▶実行]ボタンをクリックします。

最初の関数の実行には権限が必要となるため、[承認が必要です]というモーダルが表示されたら、

[権限を確認]>[表示されているGoogleアカウント]>[詳細]>[無題のプロジェクト(安全ではないページ)に移動]>[許可]まで移動します。クリック後GASが実行されます。

Excelからスプレッドシートに変換する

続いて、Excelからスプレッドシートへの変換方法になります。

動作イメージ

Google Drive上に「test1.xlsx」「test2.xlsx」「test3.xlsx」というスプレッドシートを作成します。

これをGASから実行すると同じフォルダにスプレッドシートが作成されます。

2023/08/06更新:上の画像では作成したエクセルファイルとスプレッドシートが入れ違いになって見にくいため、一度フォルダを作成しその中にスプレッドシートを格納するコードに変更しました。

作成方法

まず、Google Drive上にエクセルファイルを格納するフォルダを作成します。

作成後、作成したフォルダのアドレスバーのURLからフォルダのIDをコピーして控えておきます。

フォルダのIDは以下の「ここをコピー」の箇所になります。

https://drive.google.com/drive/u/0/folders/ここをコピー

コピーしたら次はGASに移動します。

ホーム画面右上に[新しいプロジェクト]をクリックします。

[サービス]>[Drive API]>[作成]をクリックします。作成が完了するとサービスの下に[Drive]と表示されます。

次に、実際にコードを記載していきます。もともと記載してある、

function myFunction() {}

は削除して、新たにしたのコードをコピペしてください。

function convertAllExcelToSpreadsheets() {
  var parentFolderId = 'YOUR_FOLDER_ID'; // ここに変換したいフォルダのIDを入れてください
  var parentFolder = DriveApp.getFolderById(parentFolderId);
  var files = parentFolder.getFilesByType(MimeType.MICROSOFT_EXCEL);

  // 子フォルダを作成(名前は "ConvertedSheets")
  var childFolder = parentFolder.createFolder('ConvertedSheets');
  
  while (files.hasNext()) {
    var file = files.next();
    var convertedFile = Drive.Files.insert(
      {
        title: file.getName().replace('.xlsx', ''),
        parents: [{id: childFolder.getId()}],
        mimeType: MimeType.GOOGLE_SHEETS,
      }, 
      file.getBlob()
    );
  }
}

コピーしたら、2行目の YOUR_FOLDER_ID に先ほど控えておいたGoogle DriveのフォルダIDを入力します。

最後に「Ctrl + S」を押すか上部バーにある[プロジェクトを保存]をクリックするとスクリプトが保存されます。

実行方法

Google Driveに変換したいスプレッドシートを格納します。

格納後、GASの[▶実行]ボタンをクリックします。

最初の関数の実行には権限が必要となるため、[承認が必要です]というモーダルが表示されたら、

[権限を確認]>[表示されているGoogleアカウント]>[詳細]>[無題のプロジェクト(安全ではないページ)に移動]>[許可]まで移動します。クリック後GASが実行されます。

さいごに

以上が、Google Apps Scriptを使ってExcelとスプレッドシートを相互に変換する方法です。これらのコードを使用することで、一括でのファイル変換を簡単に行うことができます。

今回のスクリプトは手動で実行することで動作しますが、トリガーを指定することで定期的に実行することも可能になります。

ただし、これらのコードはGoogleドライブ上のファイルを変更しますので、必ず適用前にデータのバックアップを取るか、テストファイルで試してから本番のデータに適用してください。