要添加菜单并运行代码,我创建了以下代码和说明:
添加一个在电子表格打开时运行的函数:
选择TOOLS、SCRIPT EDITOR,代码编辑器将打开。粘贴到这个onOpen() 函数中。
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Custom Menu')
.addItem('Display User Dialog', 'displayUserDialog')
.addToUi();
};
当您打开电子表格时,该代码将运行。您将看到一个新的菜单项。
该代码设置为在您从自定义菜单中选择“显示用户对话框”时触发更多代码。您需要添加更多代码。添加此功能:
function displayUserDialog() {
//Logger.log('displayUserDialog ran: ');
var html = HtmlService.createTemplateFromFile('Dialog Copy Choices')
.evaluate()
.setSandboxMode(HtmlService.SandboxMode.NATIVE)
.setWidth(500)
.setHeight(300);
SpreadsheetApp.getUi()
.showModalDialog(html, 'My custom dialog');
};
上述两个函数进入一个gs 脚本文件。我认为通常会自动创建一个新的脚本文件名称:Code.gs
创建一个新的 HTML 文件:
从文件菜单中,选择新建 - HTML
名为“对话框复制选择”的 HTML 文件
<div id="outer" style="padding:1;"/>
<div>
<br>Sheet To Copy To:<br>
<select id="idSheetNames">
<?!= getSheetNames(); ?>
</select>
<br>
<br>
<div>Copy To:</div>
<input id="idToCol" type='text' placeholder='Column To Copy to:'>
<br>
<input id="idToRow" type='text' placeholder='Row To Copy to:'>
<br>
<br>
<div>Copy From:</div>
<input id="idFromStart" type='text' placeholder='A1'>
<br>
<input id="idFromEnd" type='text' placeholder='D20:'>
<br>
<br>
<input type="button" value="Copy Cells" id="idCopyBtn" onclick="myFunction()">
</div>
<script>
function myFunction() {
var sheetToGetData = document.getElementById("idSheetNames").value;
var copyToRow = document.getElementById("idToRow").value;
var copyToCol = document.getElementById("idToCol").value;
var copyFromStart = document.getElementById("idFromStart").value;
var copyFromEnd = document.getElementById("idFromEnd").value;
//console.log("values of variables: " + sheetToGetData + " : " + copyToCol + " : " + copyToRow + " : " + copyFromStart + " : " + copyFromEnd);
google.script.run.gsCopyData(sheetToGetData, copyToCol, copyToRow, copyFromStart, copyFromEnd);
google.script.host.close();
};
</script>
添加所有代码后刷新电子表格,应该会出现一个新的自定义菜单。使用自定义菜单显示对话框。
自定义对话框在下拉字段中显示电子表格中的所有工作表。下拉菜单允许您选择要将数据复制到的工作表:
获取工作表名称的 gs 代码
function getSheetNames() {
var allSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var howManySheets = allSheets.length;
var sheetNames = [];
var htmlSelectOptions = "";
var thisName = "";
for (var i = 0;i < howManySheets; i++) {
thisName = allSheets[i].getName();
htmlSelectOptions += '<option value="' + thisName + '">' + thisName + '</option>';
};
return htmlSelectOptions;
};
gs 代码复制数据
function gsCopyData(sheetToGetData, copyToCol, copyToRow, copyFromStart, copyFromEnd) {
//Logger.log(sheetToGetData + " : " + copyToCol + " : " + copyToRow + " : " + copyFromStart + " : " + copyFromEnd);
//Logger.log("gsCopyData ran");
var alphaBet = 'abcdefghijklmnopqrstuvwxyz';
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var rowStartCopy = Number(copyFromStart.slice(1));
var colStartCopy = copyFromStart.slice(0,1);
colStartCopy = 1 + alphaBet.indexOf(colStartCopy.toLowerCase());
var rowEndCopy = Number(copyFromEnd.slice(1));
var colEndCopy = copyFromEnd.slice(0,1);
colEndCopy = 1 + alphaBet.indexOf(colEndCopy.toLowerCase());
var numRows = rowEndCopy - rowStartCopy + 1;
var numColumns = colEndCopy - colStartCopy + 1;
var rangeToCopy = sheet.getRange(rowStartCopy, colStartCopy, numRows, numColumns);
copyToCol = alphaBet.indexOf(copyToCol.toLowerCase()) + 1;
var destinationSheet = ss.getSheetByName(sheetToGetData);
//Logger.log(destinationSheet + copyToCol + numColumns + copyToRow + numRows);
rangeToCopy.copyValuesToRange(destinationSheet, copyToCol, numColumns, copyToRow, numRows);
};