Следующий код открывает электронную таблицу.Что странно, это та часть сс, которая видна.У ss есть около 430 строк (я говорю «около», так как скрипт добавляет строки, поэтому, сколько он имеет в любой момент времени, зависит от того, сколько тестов я выполнил для скрипта и сколько из этих тестовых строк я удалил).Но, независимо от того, сколько строк имеет ss или какие строки видны до того, как я запустил скрипт, или где курсор находится на ss, прежде чем я запустил скрипт;когда скрипт запускается, когда открывается первый ss, верхняя часть ss видна (на рисунке ниже), а затем, когда ss все еще загружается (работает), страница перерисовывается и строка 396 (или 397, 398 и т. д.,в зависимости от того, сколько тестов я выполнил и / или удалил) всегда первая видимая строка (также на рисунке).
Существует сценарий «onOpen», который влияет на ss (создает меню), и в порядкечтобы исключить это как фактор в ваших умах, это также перепечатано ниже.
Итак, что контролирует этот процесс перерисовки и как мне получить его, чтобы дать мне то, что я хочу, то есть увидеть дностраница?Я хочу, чтобы эта строка была видимой, поскольку следующая логическая вещь, которую пользователь должен сделать после добавления новой песни, - это добавить данные для этой песни.
Code.gs
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;
}
Index.html
<!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>
Связанный скрипт
Code.gs
/*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);
}
Index.html
<!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>
Окно браузера электронной таблицы при ssсначала открывается
[! [введите описание изображения здесь] [1]] [1]
Окно браузера окончательной таблицы
[! [8] [2]] [2]
Нижняя часть электронной таблицы (и, кстати, часть сс, которую я хотел бы видеть в окне браузера, когда веб-приложение работает).
(изображения удалены)