✨ アプリからGoogleスプレッドシートへ直接書き込み
ボタンを押すだけでGoogleドライブ上に新規スプレッドシートを自動生成し、全ファイル一覧を直接書き込み、さらに管理用GAS(マクロ)を仕込んで即座に開きます。URL入力やコピペは不要です!
── その他の出力・連携方法 ──
⚙️ 既存のスプレッドシートURLやWebhookを指定する場合(任意)
スプレッドシートを新規作成しデータを直接書き込んでいます...
お好みの形式でPCに即座にダウンロードします。
以下のGoogle Apps Scriptコードをスプレッドシートの「拡張機能 > Apps Script」に貼り付けて「ウェブアプリとしてデプロイ」してください。
function doPost(e) {
try {
if (!e || !e.postData || !e.postData.contents) {
throw new Error("POSTデータが受信できませんでした。");
}
const contents = JSON.parse(e.postData.contents);
let ss;
let isNew = false;
// スプレッドシートURL/IDが指定されていれば開く。空欄なら新規スプレッドシートを自動作成!
const inputUrlOrId = (contents.spreadsheetUrl || "").trim();
if (inputUrlOrId !== "") {
const match = inputUrlOrId.match(/\/d\/([a-zA-Z0-9-_]+)/);
const id = match ? match[1] : inputUrlOrId;
try {
ss = SpreadsheetApp.openById(id);
} catch (openErr) {
throw new Error("指定されたスプレッドシートを開けませんでした。URLと共有権限をご確認ください: " + openErr.message);
}
} else {
const timestamp = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd HH:mm");
ss = SpreadsheetApp.create("フォルダファイル一覧 (" + timestamp + ")");
isNew = true;
}
const sheetName = (contents.sheetName || "Files").trim();
let sheet = ss.getSheetByName(sheetName);
if (!sheet) {
if (isNew) {
sheet = ss.getSheets()[0];
sheet.setName(sheetName);
} else {
sheet = ss.insertSheet(sheetName);
}
}
if (contents.overwrite && !isNew) {
sheet.clearContents();
}
const headers = ["ファイル名", "相対パス", "拡張子", "カテゴリ", "サイズ(Bytes)", "サイズ(整形)", "更新日時", "階層"];
const files = contents.files || [];
const rows = [headers];
// undefined を絶対に混入させない安全ガード (setValues例外防止)
for (var i = 0; i < files.length; i++) {
var f = files[i];
rows.push([
String(f.name || ""),
String(f.relativePath || ""),
String(f.extension || ""),
String(f.category || ""),
Number(f.size || 0),
String(f.formattedSize || "0 B"),
String(f.lastModified || ""),
Number(f.depth || 0)
]);
}
const lastRow = (contents.overwrite || isNew) ? 1 : sheet.getLastRow() + 1;
sheet.getRange(lastRow, 1, rows.length, headers.length).setValues(rows);
// ヘッダーデザイン(太字・紫背景・白文字)
sheet.getRange(1, 1, 1, headers.length)
.setFontWeight("bold")
.setBackground("#4f46e5")
.setFontColor("#ffffff");
sheet.setFrozenRows(1);
const result = {
status: "success",
count: files.length,
spreadsheetUrl: ss.getUrl(),
spreadsheetName: ss.getName(),
sheetName: sheetName,
isNew: isNew
};
return ContentService.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
} catch (err) {
const errorResult = {
status: "error",
message: err.toString()
};
return ContentService.createTextOutput(JSON.stringify(errorResult))
.setMimeType(ContentService.MimeType.JSON);
}
}