2016-04-11 8 views
0

私は、スプレッドシートに行き、私は私のドライブにいくつかの項目からファイルまたはフォルダ名を持ちたい機能グーグル・アプリケーション・スクリプトグーグル・スプレッドシートのカスタム関数許可回避策

=index(MYCustomFunctionThatReturnsAnArrayWithTheFolderAndFileNamesFromMyDrive(),1,0). 

を使用するwhant。

MYCustomFunctionThatReturnsAnArrayWithTheFolderAndFileNamesFromMyDrive() 

は次のようになります。

function MYCustomFunctionThatReturnsAnArrayWithTheFolderAndFileNamesFromMyDrive(){ 

     var data= []; 
    var j =0 , i = 0; 

    // Method: getRootFolder() Return type: Folder 
    var rootfolders = DriveApp.getRootFolder().getFolders(); 

    while (rootfolders.hasNext()) { 
    var folder = rootfolders.next(); 
    var folderName = folder.getName(); 
    data[j] = folderName; 
    j++; 
    } 

    var files = DriveApp.getRootFolder().getFiles(); 

    while (files.hasNext()) { 
    var file = files.next(); 
    var fileName = file.getName(); 
    data[j+i] = [file]; 
    i++; 
    } 
    return data; 
} 

そして、私はそれを行う時点で、私は次のエラーメッセージが表示されます:「あなたはgetRootFolder(7行目)をコールする権限がありません。」

私は検索しましたが、これはカスタム機能によるものであることを理解しています。ユーザーレスで、権利はありません。

回避策がありますか?

事前に感謝いたします。

よろしく、

答えて

1

このlinkをチェックして、添付のスクリーンショットを参照してください。

enter image description here

カスタムメニューオプションを使用する必要があります。

0

それは魅力的に機能しました!ページの下部にある小さな文字を指摘してくれてありがとう、私はしばらく見ているがcouldnt見つける。

ここに私の作業進捗コードがあります。

function onOpen() { 
    SpreadsheetApp.getUi() // Or DocumentApp or FormApp. 
    .createMenu('LerDRIVE') 
    .addItem('Export Drive', 'exportFromDrive') 
    .addToUi(); 
} 

function driveRootList() { 

    var data= []; 
    var j =0 , i = 0; 

    var rootfolders = DriveApp.getRootFolder().getFolders(); 

    while (rootfolders.hasNext()) { 
    var folder = rootfolders.next(); 
    var folderName = folder.getName(); 
    data[j] = folderName; 
    j++; 
    } 
    var files = DriveApp.getRootFolder().getFiles(); 

    while (files.hasNext()) { 
    var file = files.next(); 
    var fileName = file.getName(); 
    data[j+i] = fileName; 
    i++; 
    } 
// Logger.log(data[4]); 
    return data; 
} 


/** 
* Export Array Data from Drive Folder 
*/ 
function exportFromDrive() { 
    var ui = SpreadsheetApp.getUi(); // Same variations. 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var driveData = driveRootList(); 
    // The code below will set range A1 in the first sheet as the active range 
    var range = sheet.getRange("B6:B18"); 
    var data = []; 
    for (i=0; i<driveData.length; i++) { 
    data[i] = [driveData[i]]; 
    } 
    // Logger.log('data height = '+data.length+', data width = '+data[0].length+' and range height is '+range.getHeight()+', range width is '+range.getWidth()+' ... does it fit ?'); 
    // Record all array data to spreadsheet 
    range.setValues(data); 
} 
+0

それはあなたがあなたの解決策を見つけると一緒に入れ助けグラッド(てmanualyに範囲を設定することを忘れてはいけません)! – Gerneio