Skip to content

Instantly share code, notes, and snippets.

@badboy99tw
Created April 26, 2019 04:41
Show Gist options
  • Select an option

  • Save badboy99tw/6a71d1bdf557d66af72001d733c1b246 to your computer and use it in GitHub Desktop.

Select an option

Save badboy99tw/6a71d1bdf557d66af72001d733c1b246 to your computer and use it in GitHub Desktop.
Update doc to list files in specific folder
function onOpen() {
var ui = DocumentApp.getUi();
ui.createMenu('工具')
.addItem('更新文件索引', 'updateHomePage')
.addToUi();
}
function updateHeader(body, title) {
body.insertParagraph(0, title)
.setHeading(DocumentApp.ParagraphHeading.HEADING1)
var lastUpdatedTime = Utilities.formatDate(new Date(), "Asia/Taipei", "yyyy-MM-dd HH:mm:ss")
body.insertParagraph(1, "最後更新時間:" + lastUpdatedTime + "(程式自動更新,請勿手動!)")
}
function compareFile(a, b){
var x = a.name.toLowerCase();
var y = b.name.toLowerCase();
if (x < y) {return -1;}
if (x > y) {return 1;}
return 0;
}
function appendFiles(body, files) {
files.sort(compareFile)
for (var i = 0; i < files.length; i++) {
var file = files[i]
body.appendListItem(file.name)
.setLinkUrl(file.url)
.setGlyphType(DocumentApp.GlyphType.BULLET)
}
}
function appendFolders(body, folders) {
folders.sort(compareFile)
for (var i = 0; i < folders.length; i++) {
var folder = folders[i]
body.appendParagraph(folder.name)
.setHeading(DocumentApp.ParagraphHeading.HEADING2);
appendFiles(body, folder.files)
}
}
function emptyDocument(doc) {
// var document = DocumentApp.getActiveDocument();
var body = doc.getBody();
// to be sure to delete the last paragraph in case it doesn't end with a cr/lf
body.appendParagraph('');
while (body.getNumChildren() > 1) {
body.removeChild(body.getChild(0))
}
}
function updateHomePage() {
objects = listdir("資料夾名稱")
var doc = DocumentApp.getActiveDocument();
emptyDocument(doc)
var body = doc.getBody()
// update header
updateHeader(body, "文件標題")
// update body
appendFiles(body, objects.filter(function(o){return o.type === "FILE"}))
appendFolders(body, objects.filter(function(o){return o.type === "FOLDER"}))
}
function listdir(folderName) {
var parent = DriveApp.getFoldersByName(folderName).next()
var result = []
// list files
var files = parent.getFiles()
while (files.hasNext()) {
file = files.next()
result.push({
"type": "FILE",
"name": file.getName(),
"url": file.getUrl()
})
}
// list folders
var childFolders = parent.getFolders();
while (childFolders.hasNext()) {
var childFolder = childFolders.next()
var name = childFolder.getName()
result.push({
"type": "FOLDER",
"name": childFolder.getName(),
"url": childFolder.getUrl(),
"files": listdir(childFolder)
})
}
return result
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment