บ่อยครั้งที่ฉันมีลิงก์โดยตรงไปยัง Google Document (ของฉันหรือขององค์กรที่แชร์) และต้องการค้นหาเอกสารที่เก็บไว้ในโฟลเดอร์เดียวกัน หากต้องการทำเช่นนั้นฉันจะต้องกำหนดโฟลเดอร์ที่เอกสารนั้นมีอยู่
มีวิธีทำเช่นนั้นหรือไม่?
บ่อยครั้งที่ฉันมีลิงก์โดยตรงไปยัง Google Document (ของฉันหรือขององค์กรที่แชร์) และต้องการค้นหาเอกสารที่เก็บไว้ในโฟลเดอร์เดียวกัน หากต้องการทำเช่นนั้นฉันจะต้องกำหนดโฟลเดอร์ที่เอกสารนั้นมีอยู่
มีวิธีทำเช่นนั้นหรือไม่?
คำตอบ:
เอกสารอาจอยู่ในหลาย ๆ โฟลเดอร์ แต่คุณสามารถรับรายการได้จาก UI
คลิกที่ไอคอนโฟลเดอร์ถัดจากชื่อเอกสาร หากเอกสารอยู่ในโฟลเดอร์เดียวคุณจะได้รับมุมมองในโฟลเดอร์เดียวนั้นซึ่งแสดงชื่อโฟลเดอร์พร้อมไอคอนเพื่อเปิดโฟลเดอร์ในแท็บใหม่เอกสารอื่น ๆ ในโฟลเดอร์และตัวเลือกเพื่อย้ายเอกสารปัจจุบัน:
หากเอกสารอยู่ในโฟลเดอร์มากกว่าหนึ่งโฟลเดอร์คุณจะได้รับรายการโฟลเดอร์ที่มีไฮเปอร์ลิงก์ไปยังแต่ละโฟลเดอร์
ไอคอนโฟลเดอร์หายไปหรือไม่
หากคุณพบว่ามีโฟลเดอร์เล็ก ๆ ที่หายไปทางด้านขวาของชื่อไฟล์คุณสามารถเลือกที่File > Document details...
จะเห็นชื่อไดเรกทอรีหลักอย่างน้อย เช่น:
มาเตรียมวิธีการไปยังโฟลเดอร์หลักของเอกสารด้วยการคลิกเมาส์
วางสคริปต์ด้านล่างลงในเครื่องมือแก้ไขสคริปต์ 'ผูกกับคอนเทนเนอร์' ของเอกสารของคุณ ทำได้โดยเปิดเอกสารของคุณจากแถบเมนูเอกสารให้เลือกเครื่องมือ> เครื่องมือแก้ไขสคริปต์ ...
หากนี่เป็นครั้งแรกที่คุณแก้ไขสคริปต์ของเอกสารรหัสเริ่มต้นจะเติมหน้าจอของตัวแก้ไข เพียงแทนที่เนื้อหาของสคริปต์ด้วยรหัสด้านล่าง รวมทั้งฟังก์ชั่น onOpen () และ listParentFolders () ตามรายการด้านล่าง
บันทึกสคริปต์ในเครื่องมือแก้ไขจากนั้น 'รีเฟรช' หน้าต่างเรียกดูที่แสดงเอกสารที่เกี่ยวข้อง รายการเมนูใหม่จะปรากฏขึ้นสำหรับเอกสารที่ชื่อ Utils การคลิกที่แถบเมนู Utils จะแสดงป๊อปอัพเมนูแสดงเส้นทาง สคริปต์นี้จะแสดงเส้นทางไดเรกทอรีเป็นรายการเชื่อมโยงหลายมิติ
function onOpen() {
// Add a menu with some items, some separators, and a sub-menu.
DocumentApp.getUi().createMenu('Utils')
.addItem('Show Path', 'listParentFolders')
.addToUi();
}
function listParentFolders() {
var theDocument = DocumentApp.getActiveDocument();
var docID = theDocument.getId();
var theFile = DocsList.getFileById(docID);
var parents = theFile.getParents();
// No folders
if ( parents == null ) return;
var folder = parents[0];
var folderName = folder.getName();
var folderURL = folder.getUrl();
var folders = [[folderName,folderURL]];
while (folderName != "Root"){
parents = folder.getParents();
folder = parents[0];
folderName = folder.getName();
folderURL = folder.getUrl();
folders.unshift([folderName,folderURL]);
}
var app = UiApp.createApplication().setTitle("Folder Hierarchy").setHeight(250).setWidth(300);
var grid = app.createGrid(folders.length, 1).setStyleAttribute(0, 0, "width", "300px").setCellPadding(5);
var indentNum = 0, link;
for (var fldCntr = 0; fldCntr < folders.length; fldCntr++){
folderName = folders[fldCntr][0];
folderURL = folders[fldCntr][1];
link = app.createAnchor(folderName, folderURL).setId("id_" + fldCntr).setStyleAttribute("font-size", "10px");
grid.setWidget(indentNum, 0, link);
indentNum += 1;
}
app.add(grid);
DocumentApp.getUi().showSidebar(app);
}
id
ตั้งค่าsource_folder = DriveApp.getFolderById(id)
และใช้source_folder.getFilesByType(MimeType.MICROSOFT_POWERPOINT)
หรือ...MimeType.MICROSOFT_POWERPOINT_LEGACY
(หรือคุณสามารถใช้สตริงชนิด mime จริงส่วนหลังประเมินเป็น) ดูเอกสารได้ที่นี่
ตั้งแต่วันที่ 2014-04-04 มีสองวิธีในการรับจากเอกสารไปยังโฟลเดอร์ที่มี
จากเอกสารที่เปิดอยู่ให้คลิกไอคอนโฟลเดอร์ถัดจากชื่อของเอกสาร กล่องโต้ตอบปรากฏขึ้นพร้อมกับ "รายการนี้อยู่ใน" และชื่อโฟลเดอร์ที่มี ชื่อโฟลเดอร์ถูกเชื่อมโยงไปยังโฟลเดอร์หากกล่องโต้ตอบ "ย้ายไปที่" ปรากฏขึ้นแทนโฟลเดอร์ที่มีเอกสารนั้นเป็นรูท หากเป็นเอกสารของคุณหรือคุณได้เพิ่มเอกสารไว้ใน My Drive ถ้าไม่ลองเพิ่มเติม> รายการทั้งหมดในรายการโฟลเดอร์ทางด้านซ้ายของมุมมองรายการเอกสาร
จากมุมมองค้นหาเอกสารให้เลือกรายการ เพิ่มเติม> รายละเอียดและกิจกรรม> รายละเอียด> โฟลเดอร์ ชื่อโฟลเดอร์ใด ๆ ที่ระบุไว้จะถูกลิงค์ไปยังโฟลเดอร์ที่เกี่ยวข้อง
ตั้งแต่วันที่ 2014-12-03, ฉันไม่สามารถหาวิธีการรับมุมมองไฟล์ aa ไปยังโฟลเดอร์ที่เก็บไฟล์นั้นได้อีกต่อไปสำหรับไฟล์ที่ไม่ใช่เอกสาร Google ที่ทำงานร่วมกัน โปรดแสดงความคิดเห็นหรือแก้ไขคำตอบนี้หากคุณรู้วิธี
AFAIK ไม่ไม่มีวิธีการทำเช่นนี้จาก URL เอกสารหรือเอกสารเอง คุณจะต้องคว้าชื่อเอกสารและค้นหาในมุมมองรายการไดรฟ์ของคุณ ผลลัพธ์การค้นหาควรแสดงชื่อเอกสารจากนั้นแสดงชื่อโฟลเดอร์หลักเป็นสีเทา
ฉันเขียนสคริปต์เล็กน้อยที่ดึงข้อมูลโฟลเดอร์พาเรนต์ตามคีย์ของเอกสาร:
function doGet() {
// create app and grid
var app = UiApp.createApplication();
var grid = app.createGrid(4,2);
// set labels for first column
grid.setWidget(0, 0, app.createLabel("Add document key: ")
.setStyleAttribute('fontWeight', 'bold'));
grid.setWidget(2, 0, app.createLabel("Parent Folder: ")
.setStyleAttribute('fontWeight', 'bold'));
// set text boxes for second column
grid.setWidget(0, 1, app.createTextBox().setId("key")
.setName("key").setWidth(500));
grid.setWidget(2, 1, app.createTextBox().setId("path")
.setName("path").setWidth(500));
// create button and handler
grid.setWidget(3, 0, app.createButton("PATH")
.addClickHandler(app.createServerHandler("getPath")
.addCallbackElement(grid)));
// add grid to application and show app
app.add(grid);
return app;
}
function getPath(e) {
// get active application and key
var app = UiApp.getActiveApplication();
var key = e.parameter.key;
// Get file and path
var path;
try {
var file = DocsList.getFileById(key);
path = file.getParents()[0].getName();
} catch(e) {
path = "file not found";
}
// add path to application and update app
app.getElementById("path").setValue(path);
return app;
}
file>menaged version
บันทึกสคริปต์Publish>Deploy as web app
และกดอัปเดตเฉพาะโฟลเดอร์หลักเท่านั้นที่ถูกกล่าวถึง (สิ่งที่คุณต้องการ) แต่จะไม่เปิดเผยเส้นทางแบบเต็ม
อัปเดต: Google ได้ยกเลิก API ดังนั้นโปรดระวัง
หมายเหตุ: ไม่จำเป็นต้องใช้ UI ไดรฟ์ใหม่อีกต่อไป
ฉันรู้ว่านี่ได้รับคำตอบแล้ว แต่ในกรณีที่ผู้คนค้นพบมันในขณะที่กำลังค้นหา (ฉัน) ฉันจะเพิ่มบางอย่างเข้าไป หากคุณยังใหม่กับ Google App Script โปรดดูที่ลิงก์นี้
ขอบคุณ @Jacob Jan Tuinstra และ @Drawn สำหรับสคริปต์ของพวกเขา แต่ก็ไม่ได้เป็นสิ่งที่ฉันต้องการดังนั้นฉันจึงใช้ทั้งสองอย่างเพื่อสร้างของฉัน สคริปต์ด้านล่างจะต้องวางลงในโปรแกรมแก้ไขสคริปต์ GApps จากนั้นเผยแพร่เป็นเว็บแอป ลิงก์ควรถูกบันทึก / คั่นไว้เพื่อใช้ในภายหลัง:
function doGet() {
// create app and grid
var app = UiApp.createApplication();
var grid = app.createGrid(4,2);
// set labels for first column
grid.setWidget(1, 0, app.createLabel("Document's key: ")
.setStyleAttribute('fontWeight', 'bold'));
grid.setWidget(2, 0, app.createLabel("Folder Path: ")
.setStyleAttribute('fontWeight', 'bold'));
// set text boxes for second column
grid.setWidget(1, 1, app.createTextBox().setId("key")
.setName("key").setWidth(500));
grid.setWidget(2, 1, app.createTextBox().setId("path")
.setName("path").setWidth(500));
// create button and handler
grid.setWidget(3, 0, app.createButton("Find")
.addClickHandler(app.createServerHandler("listParentFolders")
.addCallbackElement(grid)));
// add grid to application and show app
app.add(grid);
return app;
}
function listParentFolders(e) {
var app = UiApp.createApplication();
var path = '';
var key = e.parameter.key;
var theFile = DocsList.getFileById(key);
var parents = theFile.getParents();
// No folders
if ( parents == null ) {
app.getElementById("path").setValue('unknown');
return app;
}
var folder = parents[0];
var folderName = folder.getName();
var folders = [[folderName]];
try {
folderName = parents[0].getName();
}
catch(error)
{
app.getElementById("path").setValue('(unknown - shared document)');
return app;
}
while (folderName != "Root"){
parents = folder.getParents();
folder = parents[0];
folderName = folder.getName();
// we are going in reverse - build list in other direction
folders.unshift([folderName]);
}
// built path list
var indentNum = 0;
for (var fldrCntr = 0; fldrCntr < folders.length; fldrCntr++){
folderName = folders[fldrCntr][0];
if(fldrCntr == 0) {
path = 'My Drive'; // ...instead of 'Root'
} else {
path += ' / ' + folderName;
}
indentNum += 1;
}
app.getElementById("path").setValue(path);
return app;
}
UI มีลักษณะดังนี้:
โปรดทราบว่า ID ของไฟล์มาจาก URL ของมัน - เช่นดู "<... >" ในตัวอย่าง URL ด้านล่าง:
https://docs.google.com/a/your_domain/spreadsheet/ccc?key=<...>&usp=drive_web#gid=0
นี่คือการใช้งานที่สมบูรณ์และเชื่อถือได้มากขึ้นของสคริปต์ทั้งสองในคำตอบเหล่านี้ (ตัวแรกและตัวที่สอง ) สำหรับคำถามนี้ สคริปต์นี้อนุญาตให้คุณวาง URL แบบเต็มของไฟล์หรือ ID ไฟล์ลงในกล่องแก้ไขแรกในกล่องโต้ตอบจากนั้นส่งคืนการแสดงข้อความของพา ธ รวมถึงลิงก์ไปยังไดเรกทอรีหลัก คำแนะนำในการติดตั้งเหมือนกับยาโคบที่แสดงไว้ด้านบนฉันคัดลอกไว้ด้านล่างเพื่อความสมบูรณ์
หมายเหตุ: APIs บางตัวที่ใช้ในสคริปต์เหล่านี้ทั้งหมดล้าสมัยแล้ว พวกเขายังคงทำงานเหมือนเมื่อโพสต์นี้ถูกสร้างขึ้น แต่อาจจะหยุดทำงานในอนาคต
//
// Take a Google Drive file URL or ID and output a string representation of the path as well as a link
// to the parent folder
//
// Based on https://webapps.stackexchange.com/questions/43881/how-to-view-the-parent-folder-of-a-google-document
function doGet() {
// create app and grid
var app = UiApp.createApplication();
var grid = app.createGrid(5,2);
// set labels for first column
grid.setWidget(1, 0, app.createLabel("URL or file ID: ").setStyleAttribute('fontWeight', 'bold'));
grid.setWidget(2, 0, app.createLabel("Folder Path: ").setStyleAttribute('fontWeight', 'bold'));
grid.setWidget(3, 0, app.createLabel("Folder URL: ").setStyleAttribute('fontWeight', 'bold'));
// set text boxes for second column
grid.setWidget(1, 1, app.createTextBox().setId("key").setName("key").setWidth(1000));
grid.setWidget(2, 1, app.createTextBox().setId("path").setName("path").setWidth(1000));
grid.setWidget(3, 1, app.createAnchor("","").setId("url").setName("url").setWidth(1000));
// create button and handler
grid.setWidget(4, 0, app.createSubmitButton("Find")
.addClickHandler(app.createServerHandler("listParentFolders")
.addCallbackElement(grid)));
// add grid to application and show app
app.add(grid);
return app;
}
//
// getIdFromUrl - Get the file id portion of the url. If the file id itself is passed in it will match as well
//
// From http://stackoverflow.com/questions/16840038/easiest-way-to-get-file-id-from-url-on-google-apps-script
// This regex works for any google url I've tried: Drive url for folders and files, Fusion Tables, Spreadsheets,
// Docs, Presentations, etc. It just looks for anything in a string that "looks like" a Google key. That is, any
// big enough string that has only (google key) valid characters in it.
//
// Also, it works even if it receives the ID directly, instead of the URL. Which is useful when you're asking
// the link from the user, as some may paste the id directly instead of the url and it still works.
function getIdFromUrl(url) {
return url.match(/[-\w]{25,}/);
}
function listParentFolders(e) {
var app = UiApp.createApplication();
var key = getIdFromUrl(e.parameter.key);
var theFile = DriveApp.getFileById(key);
var parents = theFile.getParents();
var fileName = theFile.getName();
// no folders
if ( parents == null ) {
app.getElementById("path").setValue('Unknown file');
return app;
}
var url;
var folder;
var folderName;
var path;
// traverse the list of parents of folders to build the path
while (parents.hasNext()){
folder = parents.next();
folderName = folder.getName();
// on the first pass get the URL of the folder which is the parent folder of the file
if (url == null)
url = folder.getUrl();
// build up a string version of the path
if (path == null)
path = folderName;
else
path = folderName + ' / ' + path;
// get the parent of the current folder
parents = folder.getParents();
}
app.getElementById("path").setValue(path);
app.getElementById("url").setHref(url).setText(url);
return app;
}
ดูเหมือนว่านี้:
ติดตั้ง:
Google ได้เสนอวิธีแก้ไขปัญหาดังกล่าวแล้ว:
สมมติว่าคุณกำลังมองหาเอกสาร PDF ชื่อ myreport.pdf
คุณค้นหา myreport คุณจะได้รับรายการเอกสารที่ตรงตามเกณฑ์
หากคุณต้องการที่จะรู้ว่าโฟลเดอร์มันมีอยู่ในเพียงแค่คลิกขวาและคลิกที่ค้นหาในไดรฟ์ของฉัน