Google apps script 从Google Web App打开Google电子表格时,什么控制电子表格’;s的可见部分(在web浏览器中)?
下面的代码将打开一个电子表格。奇怪的是ss的可见部分。ss大约有430行(当脚本添加行时,我说“大约”,所以它在任何给定时间有多少行取决于我对脚本进行了多少测试,以及我删除了多少测试行)。但是,无论在我运行脚本之前ss有多少行,或者哪些行是可见的,或者在我运行脚本之前光标在ss上的什么位置;当脚本运行时,当ss第一次打开时,ss的顶部可见(如下图所示),然后当ss仍在加载(工作)时,页面会重新绘制,第396行(或397、398等,取决于我运行和/或删除了多少测试)始终是第一行可见(如图所示) 有一个影响ss(创建菜单)的“onOpen”脚本,为了排除这一因素,下面也重印了它 那么,是什么在控制这个重画过程,我如何让它给我我想要的,就是看到页面的底部呢?我希望这一行是可见的,因为用户在添加新歌后要做的下一件合乎逻辑的事情是添加该歌曲的数据 代码.gs Index.htmlGoogle apps script 从Google Web App打开Google电子表格时,什么控制电子表格’;s的可见部分(在web浏览器中)?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,下面的代码将打开一个电子表格。奇怪的是ss的可见部分。ss大约有430行(当脚本添加行时,我说“大约”,所以它在任何给定时间有多少行取决于我对脚本进行了多少测试,以及我删除了多少测试行)。但是,无论在我运行脚本之前ss有多少行,或者哪些行是可见的,或者在我运行脚本之前光标在ss上的什么位置;当脚本运行时,当ss第一次打开时,ss的顶部可见(如下图所示),然后当ss仍在加载(工作)时,页面会重新绘制,第396行(或397、398等,取决于我运行和/或删除了多少测试)始终是第一行可见(如图所示) 有
在下面的字段中填入歌曲标题。
然后单击按钮将新歌添加到目录中。
将歌曲添加到目录
window.saveUserInput=函数(){
var songTitle=document.getElementById('idSongTitle')。值;
console.log('songTitle:'+songTitle)
google.script.run
.withSuccessHandler(openCatalog)
.addSong({songTitle:songTitle})
}
函数openCatalog(url){
窗口打开(url);
}
装订稿
代码.gs
/*此菜单正在使用中。
此函数用于创建自定义菜单。注意:第3行抛出错误,但是这个脚本可以工作*/
函数onOpen(){
var ui=SpreadsheetApp.getUi();
ui.createMenu('SP')
.addItem('网站','开放网站')
.addItem('打开谷歌硬盘','打开硬盘')
.addItem('打开旧SP站点','打开旧SP')
.addItem('Create','openCreate')
.addItem('Perform','openPerform')
.addItem('Catalog','openCatalog')
.addItem('新歌词','新歌词')
.addItem('将歌曲添加到目录','添加歌曲')
.addToUi();
}
函数openSite(){
var selection=SpreadsheetApp.getActiveSheet();
var html=“”;
var userInterface=HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModalDialog(用户界面,'Open SP');
}
函数openDrive(){
var selection=SpreadsheetApp.getActiveSheet();
var html=“”;
var userInterface=HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModalDialog(用户界面,“打开我的谷歌硬盘”);
}
函数openOldSP(){
var selection=SpreadsheetApp.getActiveSheet();
var html=“”;
var userInterface=HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModalDialog(用户界面,“打开我的谷歌硬盘”);
}
函数openCreate(){
var selection=SpreadsheetApp.getActiveSheet();
var html=“”;
var userInterface=HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModalDialog(用户界面,“打开创建工作表”);
}
函数openPerform(){
var selection=SpreadsheetApp.getActiveSheet();
var html=“”;
var userInterface=HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModalDialog(用户界面,“打开执行表”);
}
函数newLyric(){
var html=HtmlService.createHtmlOutFromFile('索引')
.setTitle(“创建新的风景抒情词”)
.设置宽度(300);
SpreadsheetApp.getUi()
.showSidebar(html);
}
函数createNewLandscapeLyric(objArgs){
var docName=objArgs.docName;
var songTitle=objArgs.songTitle;
var词曲作者=objArgs.词曲作者;
Logger.log(歌曲标题)
var doc=DocumentApp.create(docName);
var url=doc.getUrl();
var body=doc.getBody();
var段落=正文。插入段落(0“”);
var text=段落附录文本(“”“+词曲作者);
text.setFontSize(8);
var rowsData=[[“在这里放第一首诗/合唱”,“在这里放第二首诗/下一首合唱/桥牌/等等];
var style={};
正文.插入段落(0,歌曲标题)
.设置标题(文件第页段落标题3);
table=body.appendTable(rowsData);
样式[DocumentApp.Attribute.BORDER\u WIDTH]=0;
表1.setAttributes(样式);
Logger.log(url)
返回{
url:url
};
}
函数addSong(){
var ss=SpreadsheetApp.getActive();
var sheet=ss.getActiveSheet();
var lastRow=sheet.getLastRow()
第页附录行([lastRow+1]);
SpreadsheetApp.flush();
var range=sheet.getRange(sheet.getLastRow(),1);
var songtTitle=Browser.inputBox('New Song','Enter the Song title',Browser.Buttons.OK\u CANCEL);
var namedRange=sheet.getRange(“标题”);
var range=sheet.getRange(sheet.getLastRow(),namedRange.getColumn())
range.setValue(歌曲标题);
SpreadsheetApp.setActiveRange(范围);
}
Index.html
填写以下字段以命名谷歌歌词文档,并添加歌曲标题和作者。然后单击按钮创建新的歌曲歌词文档。
创建新的歌词文档
window.saveUserInput=函数(){
var docName=document.getElementById('idNewDocName')。值;
var songTitle=document.getElementById('idNewSongTitle')。值;
var songWriters=document.getElementById('idNewSongWriters').value;
console.log('songTitle:'+songTitle)
google.script.run
.withSuccessHandler(openNewDoc)
.createNewLandscapeLyric({docName:docName,songTitle:songTitle,词曲作者:词曲作者})
}
函数openNewDoc(结果){
window.open(results.url,“_blank”).focus();
}
Spre
function doGet() {
return HtmlService
.createTemplateFromFile('Index')
.evaluate();
}
function addSong(objArgs) {
var id= "1-yN6yAGUuOp84apeN2Cwaq25rPD63qb_m2Oe-MSMaIM"
var ss = SpreadsheetApp.openById(id);
var url = ss.getUrl();
var sheet = ss.getActiveSheet();
var lastRow = sheet.getLastRow()
sheet.appendRow([lastRow+1]);
SpreadsheetApp.flush();
var range = sheet.getRange(sheet.getLastRow(), 1);
var songTitle = objArgs.songTitle;
var namedRange = sheet.getRange("Title");
var newRange = sheet.getRange(sheet.getLastRow(), namedRange.getColumn())
var newLastRow = lastRow+1
newRange.setValue(songTitle);
url = url + "#gid=1286827341" + "&range=" + newLastRow + ":" + newLastRow;
Logger.log('url: ' + url)
return url;
}
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<br>Fill in field below with Song Title.<br>
Then click button to add new song to Catalog.<br><br>
<input id="idSongTitle" type="text" placeholder="Song Title"><br><br>
<button onclick="saveUserInput()">Add song to Catalog</button>
<script>
window.saveUserInput = function() {
var songTitle = document.getElementById('idSongTitle').value;
console.log('songTitle: ' + songTitle)
google.script.run
.withSuccessHandler(openCatalog)
.addSong({songTitle:songTitle})
}
function openCatalog(url){
window.open(url);
}
</script>
</body>
</html>
/*This menu in use.
This function creates the custom menu. Note: Line 3 throws error, but this script works.*/
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('SP')
.addItem('Website', 'openSite')
.addItem('Open Google Drive', 'openDrive')
.addItem('Open Old SP Site', 'openOldSP')
.addItem('Create', 'openCreate')
.addItem('Perform', 'openPerform')
.addItem('Catalog', 'openCatalog')
.addItem('New Lyric', 'newLyric')
.addItem('Add Song to Catalog', 'addSong')
.addToUi();
}
function openSite() {
var selection = SpreadsheetApp.getActiveSheet();
var html = "<a href='https://sites.google.com/view/sp-site/catalog'; target='_blank'>Open SP</a>";
var userInterface = HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModalDialog(userInterface, 'Open SP');
}
function openDrive() {
var selection = SpreadsheetApp.getActiveSheet();
var html = "<a href='https://drive.google.com/drive/my-drive'; target='_blank'>Open My Google Drive</a>";
var userInterface = HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModalDialog(userInterface, 'Open My Google Drive');
}
function openOldSP() {
var selection = SpreadsheetApp.getActiveSheet();
var html = "<a href='url'; target='_blank'>Open Old SP Site</a>";
var userInterface = HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModalDialog(userInterface, 'Open My Google Drive');
}
function openCreate() {
var selection = SpreadsheetApp.getActiveSheet();
var html = "<a href='url'; target='_blank'>Open Create Spreadsheet</a>";
var userInterface = HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModalDialog(userInterface, 'Open Create Sheet');
}
function openPerform() {
var selection = SpreadsheetApp.getActiveSheet();
var html = "<a href= 'url'; target='_blank'>Open Perform Spreadsheet</a>";
var userInterface = HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModalDialog(userInterface, 'Open Perform Sheet');
}
function newLyric() {
var html = HtmlService.createHtmlOutputFromFile('Index')
.setTitle('Create New Landscape Lyric')
.setWidth(300);
SpreadsheetApp.getUi()
.showSidebar(html);
}
function createNewLandscapeLyric(objArgs) {
var docName = objArgs.docName;
var songTitle = objArgs.songTitle;
var songWriters = objArgs.songWriters;
Logger.log(songTitle)
var doc = DocumentApp.create(docName);
var url = doc.getUrl();
var body = doc.getBody();
var paragraph = body.insertParagraph(0, "");
var text = paragraph.appendText("© "+songWriters);
text.setFontSize(8);
var rowsData = [['PUT FIRST VERSE/CHORUS HERE.', 'PUT SECOND VERSE/NEXT CHORUS/BRIDGE/ETC HERE.']];
var style = {};
body.insertParagraph(0, songTitle)
.setHeading(DocumentApp.ParagraphHeading.HEADING3);
table = body.appendTable(rowsData);
style[DocumentApp.Attribute.BORDER_WIDTH] = 0;
table.setAttributes(style);
Logger.log(url)
return {
url: url
};
}
function addSong() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var lastRow = sheet.getLastRow()
sheet.appendRow([lastRow+1]);
SpreadsheetApp.flush();
var range = sheet.getRange(sheet.getLastRow(), 1);
var songTitle = Browser.inputBox('New Song', 'Enter the song title', Browser.Buttons.OK_CANCEL);
var namedRange = sheet.getRange("Title");
var range=sheet.getRange(sheet.getLastRow(), namedRange.getColumn())
range.setValue(songTitle);
SpreadsheetApp.setActiveRange(range);
}
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
Fill in fields below to name Google Lyric Document and add the song title and writers. Then click button to create new song lyric document.<br><br>
<input id="idNewDocName" type="text" placeholder="Google Doc Name"><br><br>
<input id="idNewSongTitle" type="text" placeholder="Song Title"><br><br>
<input id="idNewSongWriters" type="text" placeholder="Song Writers"><br><br>
<button onclick="saveUserInput()">Create New Lyric Doc</button>
<script>
window.saveUserInput = function() {
var docName = document.getElementById('idNewDocName').value;
var songTitle = document.getElementById('idNewSongTitle').value;
var songWriters = document.getElementById('idNewSongWriters').value;
console.log('songTitle: ' + songTitle)
google.script.run
.withSuccessHandler(openNewDoc)
.createNewLandscapeLyric({docName:docName,songTitle:songTitle, songWriters: songWriters})
}
function openNewDoc(results){
window.open(results.url, '_blank').focus();
}
</script>
</body>
</html>
function doGet() {
return HtmlService
.createTemplateFromFile('Index')
.evaluate();
}
function addSong(objArgs) {
var id= "1-yN6yAGUuOp84apeN2Cwaq25rPD63qb_m2Oe-MSMaIM";
var ss = SpreadsheetApp.openById(id);
var ssUrl = ss.getUrl();
var sheet = ss.getActiveSheet();
var sheetId = sheet.getSheetId();
var url = ssUrl + "#gid=" + sheetId;
var lastRow = sheet.getLastRow(); //this gets last row at this point in code. "Last row" is defined as last row with content.
sheet.appendRow([lastRow+1]); //gets prior number and adds 1 row
SpreadsheetApp.flush();
var songTitle = objArgs.songTitle; //this pulls the songTitle variable value from Index.html
var row = sheet.getLastRow(); //this gets row # after new row added
var colRange = sheet.getRange("Title"); //this gets the Title named column
var col = colRange.getColumn(); //this gets col # of Title column
var cell = sheet.getRange(row, col); //this gets the cell reference at the intersection of row and col
cell.setValue(songTitle);//this puts the songTitle variable value into cell
var newSongRow = lastRow+1;
var C1 = '!C1'; //gets the value in cell C1 calculated on the spreadsheet for the last empty row in column A.
var lastEmptyRow = sheet.getRange(C1).getValue();
var padsNeeded = 5; //minimum number of "padded" rows required to force browser window to display the new song row.
var dif = lastEmptyRow - newSongRow;
var padChange = padsNeeded-dif;
var padChangePos = Math.abs(padChange);
Logger.log("newSongRow = " + newSongRow);
Logger.log("lastEmptyRow = " + lastEmptyRow);
Logger.log("padsNeeded = " + padsNeeded);
Logger.log("dif = " + dif);
Logger.log("padChange = " + padChange);
Logger.log("padChangePos = " + padChangePos);
if(padChange > 0){
sheet.insertRowsAfter(newSongRow, padChangePos);
} else if (padChange < 0) {
sheet.deleteRows(newSongRow+1, padChangePos);
}
var catalogSongsSheet = url + "&range=" + newSongRow + ":" + newSongRow;
return catalogSongsSheet;
}
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<br><center>Fill in field below with Song Title.Then click button to add new song to Catalog.<br><br>
<input id="idSongTitle" type="text" placeholder="Song Title"><br><br>
<button onclick="saveUserInput()">Add song to Catalog</button> </center>
<script>
window.saveUserInput = function() {
var songTitle = document.getElementById('idSongTitle').value;
console.log('songTitle: ' + songTitle)
google.script.run
.withSuccessHandler(openCatalog)
.addSong({songTitle:songTitle})
}
function openCatalog(url){
window.open(url);
}
</script>
</body>
</html>