Yanıtlar:
Bir belge potansiyel olarak birden fazla klasörde olabilir, ancak UI aracılığıyla bunların bir listesini alabilirsiniz.
Belge başlığının yanındaki klasör simgesini tıklayın. Belge tek bir klasördeyse, klasörü yeni bir sekmede açmak için bir simgeyle klasör adını gösteren tek bir klasöre, klasördeki diğer belgelere ve geçerli belgeyi taşıma seçeneklerini görüntüleyebilirsiniz:
Belge birden fazla klasördeyse, her birine köprü içeren klasörlerin listesini alırsınız.
Fare tıklamasıyla belgenin ana klasörüne gitmek için bir araç sağlayalım.
Aşağıdaki betiği belgenizin 'container-bağlı' komut dosyası düzenleyicisine yerleştirin. Bunu, belgenizi açarak ve ardından belge menü çubuğundan, Araçlar> Komut Dosyası düzenleyicisi ... öğesini seçin.
Bu belgenin komut dosyasını ilk kez düzenliyorsanız, varsayılan kod düzenleyicinin ekranını doldurur. Sadece script içeriğini aşağıdaki kodla değiştirin. Hem onOpen () hem de listParentFolders () işlevini aşağıda listelenenleri ekleyin.
Komut dosyasını düzenleyicide kaydedin ve ardından ilişkili belgeyi görüntüleyen göz atma penceresini 'yenileyin'. Utils adlı belge için yeni bir menü maddesi görünecektir. Utils Menü tuşunu tıkladığınızda, açılan menü, Yol Göster gösterilir. Bu komut dosyası, dizin yolunu köprüler listesi olarak görüntüler.
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
, ayarlayın source_folder = DriveApp.getFolderById(id)
ve kullanın source_folder.getFilesByType(MimeType.MICROSOFT_POWERPOINT)
veya ...MimeType.MICROSOFT_POWERPOINT_LEGACY
(veya sonraki bölümün değerlendirdiği gerçek mime tipi dizgiyi kullanabilirsiniz). Burada dokümanlar
2014-04-04 itibariyle, bir belgeden içerdiği klasöre ulaşmanın birkaç yolu var.
Açık belgeden, belgenin başlığının yanındaki klasör simgesini tıklayın. "Bu öğe içinde" ve içeren klasör adının bulunduğu bir iletişim kutusu görüntülenir. Klasör adı klasöre bağlanır. Bunun yerine "Taşı" iletişim kutusu görünürse, belgenin içeren klasörü köktür. Bu sizin belgeniz veya açık bir şekilde eklediyseniz, My Drive'dadır. Değilse, belge listesi görünümünün solundaki klasör listesinde Diğer> Tüm Öğeler'i deneyin.
Belge arama görünümünden öğeyi seçin. Diğer> Ayrıntılar ve etkinlik> Ayrıntılar> Klasörler. Listelenen herhangi bir klasör adı ilgili klasörlere bağlanır.
2014-12-03 tarihi itibariyle, ortak Google dokümanları olmayan dosyalar için artık bir dosya görünümünden içerdiği klasöre nasıl erişeceğimi çözemiyorum. Lütfen nasıl olduğunu biliyorsanız bu cevabı yorumlayın veya düzenleyin.
AFAIK hayır, bunu belge URL'sinden veya belgenin kendisinden yapmanın bir yolu yoktur. Dokümanın başlığını alıp Sürücü listesi görünümünde aramanız gerekir. Arama sonuçları size belge başlığını göstermeli, ayrıca ana klasörün adını gri olarak göstermelidir.
Belgenin anahtarına bağlı olarak ana klasörü alan küçük bir komut dosyası yazdım:
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
betiği kaydedin.Publish>Deploy as web app
ve basın güncellemesiYalnızca ana klasörden bahsedilir (tam olarak ne istediğinizi), ancak tam yolu açıklamaz.
GÜNCELLEME: Google, bu API’lerin emekli olduğu emekli olmuştur.
NOT: bu gerçekten yeni sürücü UI'sini kullanarak gerekli değildir ...
Bunun çoktan cevaplanmış olduğunu fark ettim, ancak insanların arama sırasında bulması durumunda (yaptım), bazılarını ekleyeceğim. Google App Script’te yeniyseniz bu bağlantıya bakın .
@Jocob Jan Tuinstra ve @Drawn'a senaryoları için teşekkürler, ama ikisi de ihtiyacım olan şey değildi, ben de ikisini de benimkileri için kullandım. Aşağıdaki komut dosyasının bir GApps komut dosyası düzenleyicisine yapıştırılması ve ardından bir web uygulaması olarak yayınlanması gerekir. Bağlantı daha sonra tekrar kullanılmak üzere kaydedilmeli / işaretlenmelidir:
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 şöyle gözüküyor:
Bir dosyanın kimliğinin URL'sinden geldiğini unutmayın; örneğin, aşağıdaki URL örneğindeki "<...>" bölümüne bakın:
https://docs.google.com/a/your_domain/spreadsheet/ccc?key=<...>&usp=drive_web#gid=0
İşte bu soruya bu cevaplarda ( birincisi ve birincisi ) iki betiğin daha eksiksiz ve güvenilir bir uygulaması . Bu komut dosyası, dosyanın tam URL'sini veya dosya kimliğini, iletişim kutusundaki ilk düzenleme kutusuna yapıştırmanıza olanak sağlar ve ardından yolun bir metin gösterimini ve ana dizine bir bağlantı döndürür. Kurulum talimatları yukarıda Jacob tarafından gösterilenlerle aynıdır , eksiksiz olmaları için bunları aşağıda kopyaladım.
NOT: Bu komut dosyalarının hepsinde kullanılan bazı API'ler artık kullanılmamaktadır. Onlar hala bu görev yapıldığı zamandan beri çalışıyorlar, ancak gelecekte çalışmayı bırakacaklar.
//
// 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;
}
Bu gibi görünüyor:
Yüklemek:
Google zaten buna bir çözüm sağladı:
Diyelim ki myreport.pdf adında bir pdf belgesi arıyoruz.
Raporumu araştırıyorsanız, kriterleri karşılayan belgelerin bir listesini alırsınız.
İçinde bulunduğu klasörü bilmek istiyorsanız, sağ tıklayın ve Sürücümde Bul'u tıklayın .