質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Q&A

解決済

1回答

1867閲覧

【GAS】Googleドライブのフォルダの中身をスプレッドシートにリンク付きで書き出し、ファイル名を名前順にソートしたい

TakahiroEndo

総合スコア5

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

0グッド

0クリップ

投稿2020/04/04 07:03

前提・実現したいこと

Googleドライブのフォルダの中身をスプレッドシートに反映させたいと思っています。

スプレッドシートには
・リンクのついたファイル名(A列に記載)
・更新日(B列に記載)

タイトルを名前順に並び替えたいのですが、
上手くできません。

エラーは出ないのですが、
並び替えのプログラムが反映されません。

試したこと

上手くできなかったので、
①フォルダの中身をスプレッドシートに反映させるプログラム
②名前順にするプログラム
2つに分けて、やってみたものの上と同様にうまくできませんでした。

ただ、①を手動で実行したのち、②を手動で実行するとうまくできました。

どちらも自動でできるようにしたいのですが、良い方法ございませんでしょうか。

発生している問題・エラーメッセージ

エラーメッセージはありません。

該当のソースコード

①フォルダの中身をスプレッドシートに反映させるプログラム

function getFileListInFolder() {
var folder_id = '1cP6b_-l●●0C_R5K●●';
var url = 'https://drive.google.com/drive/folders/' + folder_id, // URL of Google Drive folder.
paths = url.split('/'), // Separate URL into an array of strings by separating the string into substrings.
folderId = paths[paths.length - 1], // Get a last element of paths array.
folder = DriveApp.getFolderById(folderId),
files = folder.getFiles(),
list = [],
rowIndex = 1, // The starting row of a range.
colIndex = 1, // The starting row of a column.
ss, sheet,range,
sheetName = '1';

ss = SpreadsheetApp.getActive(); sheet = ss.getSheetByName(sheetName);

var num;
var lastRow = sheet.getLastRow();
var lastCol = sheet.getLastColumn();
num = 1;

// Creating a data array from a files iterator.
// Note: Latest file is the first.
while(files.hasNext()) {
var buff = files.next();
var url = buff.getUrl();
var name = buff.getName();

var hyperlink = '=Hyperlink("'+url+'","'+name+'")';

// sheet.getRange(num, 1).setFormula(hyperlink);
// list.push([buff.getName(),buff.getLastUpdated()]);

list.push([hyperlink,buff.getLastUpdated()]);
num = num + 1;

};

// folder.getFiles()では、ファイルは新しいものが最初に来ます
// 登録された順にしたいので、reverse() で調整します
list = list.reverse()

range = sheet.getRange(rowIndex, colIndex, list.length, list[0].length);

// 対象の範囲にまとめて書き出します
range.setValues(list);

}


②名前順にするプログラム

function sheetsort() {
var ss,sht,rng
ss = SpreadsheetApp.getActiveSpreadsheet();
sht = ss.getSheetByName("1");
rng = sht.getRange("A1:A20"); 

//1列目を降順に
rng.sort(1);
}


③ ①と②を実行するプログラム

function myFunction() {
getFileListInFolder();
sheetsort();
}

③を実行したのですが、並び替えができません。
A列にリンクのついたファイル名、B列に更新日の記載はあります。


上記方法を教えてください。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

リンク付きのものはなぜかソートできなく、
リンクなしのものはソートできた。
そのため、A列にリンクなし
B列にリンク付を設定し、
その後A列において、ソートをし全体が並べ替えられた後、
A列を削除することで解決

投稿2020/04/05 06:53

TakahiroEndo

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問