我已经为这个问题困惑了好几个小时了。
这就是我想要实现的目标。最终目标是能够使用 Google 表格中的侧边栏修改作业名称。侧边栏可以通过自定义菜单打开。在侧边栏中,我有一个下拉字段,可以从特定范围中提取所有作业名称。在下面的字段中,用户可以输入更新的名称。
然后,使用
textFinder()
功能,我希望找到在下拉字段中选择的原始名称并将其替换为新名称。
这是我的代码:
代码.gs
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Manager Menu')
.addItem('Rename Job', 'showNewJobSidebar')
.addToUi();
SpreadsheetApp.getUi();
}
function showNewJobSidebar() {
var html = HtmlService
.createTemplateFromFile('sidebar');
// Add the dropdown lists to the template
html.dropdown = SpreadsheetApp.getActiveSheet().getRange("C6:C").getValues().filter(String);
html = html.evaluate()
.setTitle('Change Job Position Name')
SpreadsheetApp.getUi().showSidebar(html);
}
function updateJobName(form) {
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getActiveSheet();
let value1 = form.Current_Job;
let value2 = form.New_Job;
sheet.getRange("C6:C").createTextFinder(value1).replaceAllWith(value2);
}
html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<link
rel="stylesheet"
href="https://ssl.gstatic.com/docs/script/css/add-ons1.css"
/>
<style>
.container {
margin: 5px 5px 5px 5px;
}
.input-Dropdown {
width: 50%;
text-align: left;
float: left;
padding: 5px 5px 5px 5px;
}
.input-Text {
width: 50%;
text-align: left;
float: left;
padding: 5px 5px 5px 5px;
}
.custom-heading {
font-weight: bold;
}
</style>
<script>
function submitForm() {
google.script.run.updateJobName(document.getElementById("jobForm"));
}
</script>
</head>
<body>
<div class="container">
<h1 class="custom-heading"><center>Rename Job</center></h1><br><br>
<form id ="jobForm " onkeydown="return event.key != 'Enter'">
<!-- Create input fields to accept values from the user -->
Current Job Name:<br><br>
<select class="input-Dropdown" id="Current_Job"/>
<? for (let i in dropdown) { ?>
<option value="<?=dropdown[i]?>"><?=dropdown[i]?></option>
<? } ?>
</select>
<br>
<br>
<br>
New Job Name:<br><br>
<input class="input-Text" type="text" id="New_Job"/>
<br>
<br>
<br>
<button class="action" onclick="submitForm();">Save</button>
<button onclick="google.script.host.close();">Close</button>
</form>
</div>
</body>
</html>
菜单和侧边栏功能。这是带有侧边栏的工作表的屏幕截图:
已从活动工作表中的 C6:C 成功创建下拉列表。但是,当我单击“保存”时,尽管按钮发生更改以指示已按下该按钮,但电子表格不会更新,将原始作业名称更改为更新后的作业名称。有人可以指出我做错了什么吗?
这是我收到的错误:
您不需要搜索文本。您只需要与第一列中的文本关联的行号。
gs:
function getCol1() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
const vs = sh.getRange(2, 1, sh.getLastRow() - 1).getValues().map((r, i) => [r[0], i + 2]);
return vs;
}
function changeMyData1(obj) {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
sh.getRange(obj.row,obj.col).setValue((obj.val))
}
function launchsidebar() {
let ui = SpreadsheetApp.getUi();
ui.showSidebar(HtmlService.createHtmlOutputFromFile('ah4'));
}
html:
<!doctype html>
<html lang="en">
<head>
<title>Title</title>
</head>
<body>
<select id="sel1"></select>
<input type="text" id="txt1" > Change to:<br>
<input type="button" value="Edit" onClick="changeData()">
<script>
window.onload = () => {
google.script.run
.withSuccessHandler( (vs) => {
updateSelect(vs);
})
.getCol1();
}
function updateSelect(vA){
var id='sel1';
vA.unshift(["Select",""])
var select = document.getElementById(id);
select.options.length = 0;
for(var i=0;i<vA.length;i++) {
select.options[i]=new Option(vA[i][0],vA[i][1]);//second value is the row number and it gets assigned to the option value
}
}
function changeData() {
let r = document.getElementById("sel1").value;
google.script.run.changeMyData1({row:r,col:1,val:document.getElementById("txt1").value});
}
</script>
</body>
</html>
function changeMyData1(obj) {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
sh.getRange(obj.row,obj.col).setValue((obj.val))
}
function launchsidebar() {
let ui = SpreadsheetApp.getUi();
ui.showSidebar(HtmlService.createHtmlOutputFromFile('ah4'));
}