2013-05-16 44 views
3

我在Google文档中有一个电子表格,每天都有一个小企业的股票。我写了一个脚本,它创建了脚本的副本,然后将最终库存复制到开盘库存中,然后将各个字段(收到的现金等)清零。有没有办法从Google文档应用程序脚本中打开新文档?

问题是,似乎没有办法更改用户当前正在查看的文档,因此他们必须运行该脚本,然后返回到该文件夹​​并打开新的日文件并对其进行编辑。

代码看起来像..

/** 
* Setup the spreadsheet for a new day 
*/ 
function newDay(date) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 

    /* Generate localtime version 
    * Do this instead? 
    * newSs.setSpreadsheetTimeZone('Australia/Adelaide'); */ 
    var calTimeZone = 'Australia/Adelaide'; 
    var timeStamp = Utilities.formatDate(date, calTimeZone, 'yyyy/M/d'); 

    var newName = Utilities.formatDate(date, calTimeZone, 'yyyyMMdd'); 

    /* Save new version and set ss to that new spreadsheet */ 
    var newSs = ss.copy(newName); 
    Logger.log("Saved to " + newName + ", URL " + newSs.getUrl()); 
    var id = newSs.getId(); 

    /* Get file ID for the new spreadsheet */ 
    var file = DocsList.getFileById(id); 

    /* Get handle for Java Drive folder */ 
    var folder = DocsList.getFolderById('xxxxxx'); 

    /* Remove new file from all its parents */ 
    Logger.log("parents - " + file.getParents()); 
    var parents = file.getParents(); 
    for (var i in parents) { 
    file.removeFromFolder(parents[i]); 
    } 

    /* Add file into the Java Drive folder */ 
    file.addToFolder(folder); 

    var dateRange = newSs.getRangeByName('date'); 
    dateRange.setValue(timeStamp); 

    // Munge other ranges as needed 

    Logger.log("Done"); 

    var app = UiApp.createApplication().setTitle('All done'); 
    var dialog = app.createDialogBox(false, true); 
    var label = app.createLabel('The new file has been created named ' + newName + ' and is ready to edit. This file is unmodified, please close it and open the new one', true); 
    dialog.add(label); 
    dialog.show(); 
    ss.show(app); 
}; 

/* Draw the date picker and setup hooks */ 
function drawUI() { 
    var app = UiApp.createApplication().setTitle('Select date'); 
    var panel = app.createVerticalPanel(); 
    var datePicker = app.createDatePicker(); 
    var submit = app.createButton('Submit'); 
    datePicker.setId('datePicker'); 
    var clickHandler = app.createServerHandler('handleSubmit'); 
    clickHandler.addCallbackElement(panel); 
    submit.addClickHandler(clickHandler); 
    panel.add(datePicker); 
    panel.add(submit); 
    app.add(panel); 
    var d = Date(); 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    ss.show(app); 

} 

/* Run newDay in response to the user clicking submit */ 
function handleSubmit(e) { 
    var app = UiApp.getActiveApplication(); 
    var date = e.parameter.datePicker; 
    newDay(date); 
    return app.close(); 
} 

/** 
* Adds a custom menu to the active spreadsheet, containing a single menu item 
* for invoking the newDay() function specified above. 
* The onOpen() function, when defined, is automatically invoked whenever the 
* spreadsheet is opened. 
* For more information on using the Spreadsheet API, see 
* https://developers.google.com/apps-script/service_spreadsheet 
*/ 
function onOpen() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var entries = [{ 
    name : "New Day", 
    functionName : "drawUI" 
    }]; 
    sheet.addMenu("Scripts", entries); 

    //drawUI(); 
}; 
+0

这个问题需要一些澄清。您的脚本容器绑定,电子表格中,还是独立?你确定你的意思是“......创建脚本的副本......”?包含一些可能给你带来问题的代码将大大改善你可以获得的帮助。 (完全可以在电子表格正在使用时对其进行修改 - 很可能只需对当前脚本进行调整就可以了......如果不知道更多关于它的信息,则无法分辨) – Mogsdad

+0

根据我的理解,您可能会对此感兴趣在这个答案:http://stackoverflow.com/questions/10744760/google-apps-script-to-open-a-url/10745403#10745403 –

+0

它在电子表格。 – Darius

回答

1

大流士,就没有办法你的谷歌应用程序脚本可以浏览到其他网址。 您可以做的最多的是在单元格中显示超链接,以便用户可以单击它:它将在其他选项卡中打开,当然,它需要用户操作才能这样做。 (我不想带HTML服务的主题,这是超出范围。)

这些脚本运行在谷歌服务器。当脚本打开文档或电子表格时,它会这样做以访问其数据,但不会在浏览器上显示它。

只有“容器绑定脚本”(您从文档或电子表格中编写的脚本)才能轻松地与用户界面交互,例如添加菜单或面板。

如果你想显示一些数据,你可以“range.setValues”它,或者你可以用一个独立的脚本做一个网页,使用HTML服务来显示从电子表格中获得的数据。

+1

谢谢,我结束了使用UI显示链接(在用户输入新工作表的日期之后)。 – Darius

相关问题