2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ファイル名変更不要!?Googleフォームで投稿されたPDFファイルのファイル名を自動変更!

Last updated at Posted at 2025-05-07

はじめに

お疲れさまです。
みなさまどんなGWをお過ごしでしたか。

私は全て仕事で終わりました😢
私のGWはいつやってくるのか・・・。

悲しい話はここまでにして
今回はGoogleAppsScript(GAS)ChatGPTを利用して
「Googleフォームに添付されたPDFファイル名の自動変換
をやってみました。
最後まで是非お付き合いください。

作成しようとした経緯

長くなったため読み飛ばしてOKです。
興味ないぜ!という方は作成手順からご覧ください。

背景説明

業務の一つに、全店舗を対象に棚卸を実施していただき
データの提出を依頼するというのがあります。

元々紙面の提出でしたが、現在はGoogle Foamで行っています。

手順はまず、各店舗にてデータを作成・入力いただき
PDFファイルへ変換。
その後、フォームにPDFデータを添付していただく、という運用です。

以前は全店舗から紙面で回収、確認を行っていたため
PDFファイルで提出という運用に変更してからは
デジタル化が進んだと思います。

しかし、新たな問題が発生します。
それはPDFファイルの「ファイル名がめちゃくちゃ」という問題です。

「店番+店舗名.pdf」のファイル名で投稿するよう案内していますが、
「dsfdsfhdskfjs.pdf]のような名称で投稿する店舗が多いです。

というのも、店舗の担当者の中にパソコンが苦手という人が多いです。
そのため、ファイル名の変更方法がわからずそのまま投稿。
なんてことがありがちです。

起こっていた問題点

ファイル名がめちゃくちゃになることで
以下の問題が発生していました。

  • ファイルの順番がバラバラになるためわかりにくい

  • どこの店舗のデータか、ファイルを開くまでわからない

  • ファイル名を修正する場合、手入力となるため時間がかかる

これらの問題を解決するために、
投稿したPDFデータを自動変換できないかな
と考えたのが今回のきっかけです。

作成手順

まずはChatGPTに聞いてみる

解決するためにまず頼ったものが「ChatGPT」です。
なんとかなれ-!そんな思いで質問してみました。

image.png

するとこんな回答が

image.png

前提条件となるGoogleフォームは以下のようGoogleスプレッドシートに保存しています。
(質問事項は一部変更しています)

image.png

さらにスクリプトが表示されました。

スクリプトを貼り付ける(例)
javascript

function renameUploadedFiles() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("フォームの回答 1"); // シート名を確認
  const data = sheet.getDataRange().getValues();

  // 1行目はヘッダー
  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    const timestamp = row[0];
    const storeCode = row[1]; // 店番列を確認
    const storeName = row[2]; // 店名列を確認
    const fileUrls = row[3];  // ファイルアップロード欄列を確認

    if (!fileUrls || fileUrls === '') continue;

    const urls = fileUrls.toString().split(', ');
    for (const url of urls) {
      const fileId = url.match(/[-\w]{25,}/)[0];
      const file = DriveApp.getFileById(fileId);
      const newFileName = `${storeCode}${storeName}${getFileExtension(file.getName())}`;
      file.setName(newFileName);
    }
  }
}

function getFileExtension(fileName) {
  const dotIndex = fileName.lastIndexOf('.');
  return dotIndex !== -1 ? fileName.substring(dotIndex) : '';
}

image.png

早速やってみましょう

ファイル名一括変更!スクリプト作成手順

スクリプトについては、GASに貼付を行います
手順については以下の通りです。

①拡張機能から「Apps Script」を選択

image.png

②上のスクリプトをそのまま貼付、保存をします(黄色マーカー)

image.png

その後row[]の中に数字を入力しますが、以下の点に注意です。

row[ ]の数字注意
A列は0となります。(スプレッドシートは0から数え始める)
この場合、店番は[2],店名は[3],ファイルは[6]になります

入力完了後、スクリプトを実行アイコンをクリックすると・・・

image.png

おお!思い描いたファイル名に変更できました!

さらに改良したい!もう一度相談してみた

しかし、上記のスクリプトは「既に投稿されているファイル名の変更」のみです。
せっかくだから、「新しい回答も自動で名前変更したい!」と考えたところ
ChatGPTが素敵な提案をしてくれました。

image.png

早速お願いしてみました。すると・・・

先ほどのスクリプトはそのままに、以下のトリガーを追加します
javascript
コピーする
編集する
function onFormSubmit(e) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("フォームの回答 1");
  const row = e.values; // 新しく追加された行のデータ

  const storeCode = row[2]; // C列店番
  const storeName = row[3]; // D列店名
  const fileUrls = row[6];  // G列ファイルURL

  if (!fileUrls || fileUrls === '') return;

  const urls = fileUrls.toString().split(', ');
  for (const url of urls) {
    const fileIdMatch = url.match(/[-\w]{25,}/);
    if (!fileIdMatch) continue;

    const fileId = fileIdMatch[0];
    const file = DriveApp.getFileById(fileId);
    const newFileName = `${storeCode}${storeName}${getFileExtension(file.getName())}`;
    file.setName(newFileName);
  }
}

上位で作成したスクリプトの下に張り付けを行い
以下のようにトリガーを設定する必要があるようです。

新しい回答を自動リネーム!トリガー設定手順

トリガーの設定は以下の通りです。

①左メニューからトリガーを選択

image.png

②右下「トリガーを追加」を選択

image.png

③以下のように設定!保存を選択

image.png

これで完了です!
Googleフォームから新規に登録したPDFデータが
自動でリネームされるようになりました!

これで業務課題を1つ解決できそうです!

感想

課題に関してどうしようと一人で考えるよりも
まずはChatGPTに聞いてみる!これが大事だと感じました。
これからのルーティンになりそうですね(笑)

GASは色々応用が利きそうなので、またいいスクリプトが作成できたら
記事にしたいなと思います。

それでは次回の記事でお会いしましょう!ありがとうございました!

おまけ ChatGPTにも不可能なことはある

制作後、更なる改善案として「投稿者のアドレス名をファイル名に表示したい」と
考えました。(店舗名+店名+実験太郎.pdf のイメージ)

ChatGPTに聞いてみたところ・・・

image.png

なんてことでしょう、不可能との回答でした。
しかし、代替案を用意してくれるのがChatGPTです。

image.png
(例で本名が表示されたためモザイク)

回答者名を入力する欄を作成し、上記のスクリプトを利用する・・・
これであれば解決できそうです。

多角的な視点で考えることが大切だとわかりますね・・・。
ここまで読んでいただきありがとうございます!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?