Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 让列表框填充myDrive中的每个文件夹_Google Apps Script - Fatal编程技术网

Google apps script 让列表框填充myDrive中的每个文件夹

Google apps script 让列表框填充myDrive中的每个文件夹,google-apps-script,Google Apps Script,我正在尝试定义文件要保存到的位置。我从最终用户开始,然后向内移动,这意味着UI的开始。我有标签和列表框,但是我在用我的谷歌驱动器中的文件夹和子文件夹填充列表框时遇到了问题。最终产品将是:单击下拉菜单->选择要保存文件的文件夹->单击“提交”并将其保存到文件夹中 以下是我到目前为止所拥有的:(不要介意我所有的笔记。我没有任何JS经验,也没有编程经验,所以我正在从我已经从原始模板生成器获得的代码中学习。如果您需要,这就是所有的代码:) //在此处查找有关显示文件夹的列表框的代码 setWidget(

我正在尝试定义文件要保存到的位置。我从最终用户开始,然后向内移动,这意味着UI的开始。我有标签和列表框,但是我在用我的谷歌驱动器中的文件夹和子文件夹填充列表框时遇到了问题。最终产品将是:单击下拉菜单->选择要保存文件的文件夹->单击“提交”并将其保存到文件夹中

以下是我到目前为止所拥有的:(不要介意我所有的笔记。我没有任何JS经验,也没有编程经验,所以我正在从我已经从原始模板生成器获得的代码中学习。如果您需要,这就是所有的代码:)

//在此处查找有关显示文件夹的列表框的代码
setWidget(2,0,app.createLabel('Folder:')//使标签“文件夹”位于列表框旁边
var list=app.createListBox()//定义我说列表时要做的事情
setWidget(2,1,list)//将列表框置于标签的右侧
var folder=DocsList.getAllFolders()[0]//定义当我说“文件夹”时,它应该获取所有文件夹
对于(变量i=0;i

谢谢大家的帮助,我真的很感激

下面是一个似乎有效的测试代码。我没有彻底测试它,但它似乎做了它必须做的

我让ID可见的文本框更容易调试,但您应该在最终代码中将其设置为不可见

可能有一些改进需要添加,但它给出了总体思路

function doGet(){
  var app = UiApp.createApplication();
  var curFN = app.createTextBox().setText('MyDrive/').setName('curFN').setId('curFN').setWidth('400');
  var curFID = app.createTextBox().setText('x').setName('curFID').setId('curFID').setWidth('400');
  var list = app.createListBox().setName('list').setId('list').addItem('please select a folder','x');
  var grid = app.createGrid(3,2).setText(0,0,'Choose a folder in your drive').setWidget(0,1,curFN).setWidget(2,1,curFID).setWidget(1,1,list);
  var folders = DocsList.getRootFolder().getFolders();
  for (var i = 0; i < folders.length; i++) {
    list.addItem(folders[i].getName(),folders[i].getId())
  } 
  var handler = app.createServerHandler('folderSelect').addCallbackElement(grid);
  list.addChangeHandler(handler);
  app.add(grid);
  return app;
}


function folderSelect(e){
  var app = UiApp.getActiveApplication();
  var currentFN = e.parameter.curFN;
  var currentFID = e.parameter.list;
  Logger.log(currentFID);
  var list = app.getElementById('list');
  var curFN = app.getElementById('curFN');
  var curFID = app.getElementById('curFID');
  if(currentFID=='x'){currentFID=DocsList.getRootFolder().getId() ; curFN.setText('MyDrive/')};
  var startFolder = DocsList.getFolderById(currentFID);
  var folders = startFolder.getFolders();
  list.clear().addItem('no other subFolder','x').addItem('Go back to Root','x');
  if(folders.length>0){list.clear(); list.addItem('please select a subFolder','x')};
  for (var i = 0; i < folders.length; i++) {
    list.addItem(folders[i].getName(),folders[i].getId())
  } 
  curFN.setText(currentFN+DocsList.getFolderById(currentFID).getName()+'/');
  if(currentFID==DocsList.getRootFolder().getId()){curFN.setText('MyDrive/')};
  curFID.setText(currentFID);
  return app;
}
函数doGet(){
var app=UiApp.createApplication();
var curFN=app.createTextBox().setText('MyDrive/')).setName('curFN').setId('curFN').setWidth('400');
var curFID=app.createTextBox().setText('x').setName('curFID').setId('curFID').setWidth('400');
var list=app.createListBox().setName('list').setId('list').addItem('please select a folder','x');
var grid=app.createGrid(3,2).setText(0,0,“选择驱动器中的文件夹”).setWidget(0,1,curFN).setWidget(2,1,curFID).setWidget(1,1,列表);
var folders=DocsList.getRootFolder().getFolders();
对于(var i=0;i0){list.clear();list.addItem('请选择子文件夹','x')};
对于(var i=0;i

应用程序,需要文档列表服务的授权

您的代码看起来不错,但您应该决定如何处理子文件夹…您可以将它们包含在显示完整路径的同一列表中,或者显示用户选择文件夹时显示的辅助列表框。。。根据您必须深入的程度,此解决方案可能会变得非常复杂,并且很难正确显示。您最初的想法是什么?另一种可能是使用相同的列表框小部件,但根据每个用户的选择更改其内容,同时在单独的标签中显示父树。这可能是最简单的方法:-)旁边有一个显示子文件夹的文本框就可以了。或者在下面显示一个文本框,该文本框将列出上面框中所选文件夹的子文件夹。文件夹系统确实变得有些复杂,因为我确实需要深入4个文件夹,不包括根目录。例如:根目录(我的驱动器)->调查->被调查的人->被调查的年->被调查的月感谢你Serge Insas那太好了!天哪,我想我有超过1000个文件夹-那将是一个强大的下拉列表…
function doGet(){
  var app = UiApp.createApplication();
  var curFN = app.createTextBox().setText('MyDrive/').setName('curFN').setId('curFN').setWidth('400');
  var curFID = app.createTextBox().setText('x').setName('curFID').setId('curFID').setWidth('400');
  var list = app.createListBox().setName('list').setId('list').addItem('please select a folder','x');
  var grid = app.createGrid(3,2).setText(0,0,'Choose a folder in your drive').setWidget(0,1,curFN).setWidget(2,1,curFID).setWidget(1,1,list);
  var folders = DocsList.getRootFolder().getFolders();
  for (var i = 0; i < folders.length; i++) {
    list.addItem(folders[i].getName(),folders[i].getId())
  } 
  var handler = app.createServerHandler('folderSelect').addCallbackElement(grid);
  list.addChangeHandler(handler);
  app.add(grid);
  return app;
}


function folderSelect(e){
  var app = UiApp.getActiveApplication();
  var currentFN = e.parameter.curFN;
  var currentFID = e.parameter.list;
  Logger.log(currentFID);
  var list = app.getElementById('list');
  var curFN = app.getElementById('curFN');
  var curFID = app.getElementById('curFID');
  if(currentFID=='x'){currentFID=DocsList.getRootFolder().getId() ; curFN.setText('MyDrive/')};
  var startFolder = DocsList.getFolderById(currentFID);
  var folders = startFolder.getFolders();
  list.clear().addItem('no other subFolder','x').addItem('Go back to Root','x');
  if(folders.length>0){list.clear(); list.addItem('please select a subFolder','x')};
  for (var i = 0; i < folders.length; i++) {
    list.addItem(folders[i].getName(),folders[i].getId())
  } 
  curFN.setText(currentFN+DocsList.getFolderById(currentFID).getName()+'/');
  if(currentFID==DocsList.getRootFolder().getId()){curFN.setText('MyDrive/')};
  curFID.setText(currentFID);
  return app;
}