この記事について
GASを使って複数のExcelファイルをスプレッドシートへ変換する方法についてのメモです。
変換すると、レイアウトが崩れたり、".xlsm"形式のファイルの変換の場合、マクロが使えなくなったりするので、ご利用は自己責任でお願いします。
フォルダとファイルを準備する。
下記のフォルダを用意します。excelfile変換前フォルダにテスト用にExcelをいくつか格納しておきます。
- excelfile変換前フォルダ
- 変換前のExcelファイルが保存してあるフォルダ
- excelfile変換済フォルダ
- スプレッドシート変換後のファイルをプログラムが格納するフォルダ
コード
/*
フォルダ単位でまとめて変換する。
*/
const sourceFolderId = 'フォルダID';
const destFolderId = 'フォルダID';
function myFunction() {
// Excelファイルが入っているフォルダをidによって取得
const sourceFolder = DriveApp.getFolderById(sourceFolderId);
// Excelファイルたちを変数に保存
const excelFiles = sourceFolder.getFiles();
// 変換されたファイルが格納されるフォルダをidによって取得
const destFolder = DriveApp.getFolderById(destFolderId);
// Excelファイルをイテレートして順にスプレッドシートに変換
while(excelFiles.hasNext()) {
var file = excelFiles.next();
convertToSpreadsheet(file, destFolder);
}
}
function convertToSpreadsheet(file, folder) {
// 各種オプションを設定
// mimeTypeをスプレッドシートにすることで変換される
options = {
title: file.getName(),
mimeType: MimeType.GOOGLE_SHEETS,
parents: [{id: folder.getId()}]
};
// Drive APIへfileをPOSTする
Drive.Files.insert(options, file.getBlob())
}
結果
excelfile変換済フォルダを見てみるとファイルが新しくできています。
拡張子は「.xlsm」となっていますが、ファイルアイコンはスプレッドシートのアイコンになっており、ファイルのプロパティを確認するとスプレッドシートとなっていることが確認出来ます。
ファイルを変換した後スプレッドシートとして操作したい。
変換後のファイルIDを取得して操作するには、ファイルを保存したところで変数に入れるとファイル情報のオブジェクトが返ってくるので、その中のidプロパティからファイルidを取得する。
var file = Drive.Files.insert(options, file.getBlob());
let sp = SpreadsheetApp.openById(file.id).getSheets();