実現したいこと
フォルダ内に複数のファイルがあり、予め名前はわかっています
それぞれの名前のファイルのIDを取得したいのですが
与える条件によってうまく取得できません
発生している問題・分からないこと
フォルダ内のファイルは
Form01
Form02
SS01
SS02
があります(実際にはこれが50ずつあります)
ファイル名(FILENAME)を指定する際
Form+番号 の場合はForm01しか拾って来ません
しかし SS + 番号の場合はきちんと2つ拾ってきます
ファイル名には間違いはありません(前後の空白や数字等の
全角半角の違い等も確認した)
理由がわからず沼にはまっています
該当のソースコード
function 指定フォルダー内FormID取得() { const folder = DriveApp.getFolderById(FoldaID); const files = folder.getFiles(); const LstRow = MyshSet.getRange(6,5).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); for (let i= 1;i<=LstRow-6;i++){ let FILENAME = 'Form' + String(MyshSet.getRange(i+6,4).getValue()); Logger.log(FILENAME) while (files.hasNext()) { let file = files.next(); let fileName = file.getName(); Logger.log(fileName) if (FILENAME==fileName){ let fileId = file.getId(); let url = file.getUrl(); MyshSet.getRange(i+6,3).setValue(fileId); Logger.log('ヒット') break; } } } }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
フォルダ内ファイルのID取得は
いずれも同じものだった
補足
特になし
例えば「Form01」を検索した時にLogger.log(fileName) の出力が
「Form02」と「Form01」と出力されていたりしませんか?
回答ありがとうございます
whileのループに入る前に
Form01とForm02はLogger.logにて出力されています
しかし
if (FILENAME==fileName){
にて ヒットするのは
Form01だけなのです・・
ループの外で
const files = folder.getFiles()
としているので
1回目のループ時(Form01を検索する際)に
Logger.log(fileName)に「Form2」が出力されているとすれば
2回目のループ時(Form02を検索する際)にはすでに1回目のループで列挙済みなので再度列挙されません。
なので「Form01」の検索時に「Form02」が出力されるかを質問しました。
単純にこのようなことを防ぎたいのであれば
const files = folder.getFiles();
をfor文の中に入れればいいのではないでしょうか。
ありがとうございます!!
ばっちりでした
感謝です!!
すみません
自己解決欄に入れてしまいました
自己解決ではなく
お助け頂いた上の解決です
回答1件
あなたの回答
tips
プレビュー