背景
以下問題を解決するためにスクリプトを書きました
- ExcelファイルをGoogle Spreadsheetにインポートする際の問題点
- 既存のシートに直接データを上書きしてしまう
- 手動で行の調整が必要となるため、作業効率が悪い
使用技術
- Google Apps Script (GAS)
使用方法
-
Excelファイルをアップロード
- GoogleDriveにインポートしたいExcelファイル(またはスプレッドシート)をアップロードし、スプレッドシート形式で保存
-
ファイル名を記入
- スプレッドシートの"C1"セルに1で保存したファイル名を記入
-
GASの実行
実装コード
function importDataFromXlsx() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
// "C1"セルからインポートするファイル名を読み取る
var fileName = sheet.getRange('C1').getValue();
// ファイル名でドライブのファイルを検索
var files = DriveApp.getFilesByName(fileName);
if (!files.hasNext()) {
SpreadsheetApp.getUi().alert('ファイルが見つかりません: ' + fileName);
return;
}
var file = files.next();
var fileId = file.getId();
// ファイルを取得し、変換されたスプレッドシートへの参照を得る
var dataSpreadsheet = SpreadsheetApp.openById(fileId);
var dataSheet = dataSpreadsheet.getSheets()[0];
// 最初の行を除外してデータの範囲を取得
var range = dataSheet.getDataRange();
var values = range.getValues().slice(1);
// スタート位置である"B5"のセルを取得
var startCell = sheet.getRange('B5');
var numRows = values.length;
var numColumns = values[0].length;
// レコード分の行を追加
sheet.insertRowsAfter(startCell.getRow(), numRows - 1);
// データを貼り付ける範囲を設定してデータを挿入
var destinationRange = sheet.getRange(startCell.getRow(), startCell.getColumn(), numRows, numColumns);
destinationRange.setValues(values);
// 元のファイルをゴミ箱に移動
file.setTrashed(true);
}
あとがき
このスクリプトを通じて、ExcelファイルからGoogle Spreadsheetへのデータインポート作業を大幅に効率化できます。
ChatGPTを使えば、少ない工数で自動化スクリプトが書けるので、どんどん自動化して陳腐化したらどんどん捨てましょう・。・b