javascript - 使 google docs 脚本适应 google 表格
问题描述
我有一个函数“myFunk()”在谷歌文档中运行良好。它基本上在工作表中搜索带有## 的字段并用用户输入替换它们。但是,当我在更改函数后尝试在工作表中运行它时,我得到“无法在对象中找到函数 replaceText”。我错过了什么?
function myFunk() {
// Display a dialog box for each field you need information for.
var documentProperties = PropertiesService.getDocumentProperties();
var ui = SpreadsheetApp.getUi();
//var response = ui.prompt('Enter Name', 'Enter owners person's name', ui.ButtonSet.OK);
var nameResponse = ui.prompt("Enter the name of the document OWNER");
var salesperson = nameResponse.getResponseText();
var documentProperties = PropertiesService.getDocumentProperties();
var date = new Date();
var htmlDlg = HtmlService.createHtmlOutputFromFile("HTML_myHtml")
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setWidth(200)
.setHeight(150);
var modal = SpreadsheetApp.getUi();
modal.showModalDialog(htmlDlg, "Document Classification");
//Get Current Document ID
var documentId = SpreadsheetApp.getActiveSpreadsheet().getId();
console.log(documentId);
//Get the document body as a variable
var body = SpreadsheetApp.openById(documentId).getDataRange().getValues();
console.log(body);
//Insert the entries into the document
body.replaceText("##OWNER##", nameResponse.getResponseText());
//AddValuesFromModal();
}
<form id="docType">
<select id="selectDocumentType" name="documentClass">
<option value="PUBLIC">Public</option>
<option value="INTERNAL">Internal</option>
<option value="CONFIDENTIAL">Confidential</option>
<option value="SECRET">Secret</option>
</select>
<hr/>
<input type="button" onClick="formSubmit();" value="Submit" />
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script>a
function formSubmit(){
Submit();
}
function Submit() {
var selectedValue = $('#selectDocumentType').val();
console.log(selectedValue);
google.script.run
.withSuccessHandler(closeIt)
.AddValuesFromModal(selectedValue);
};
function closeIt(){
google.script.host.close();
};
</script>
解决方案
电子表格没有正文部分,如在文档中发现的那样,而是具有范围,它们是表示您希望操作的电子表格中的单元格的数据网格。您可以使用 Range 对象本身,而不是像在当前代码中那样尝试使用 Range 的值。
解决办法是用getDataRange()选择相关的Range,但不要调用getValues()。相反,创建一个可以搜索和替换 Range 内数据的 TextFinder 对象。
它应该看起来像这样:
var range = SpreadsheetApp.openById(documentId).getDataRange();
var finder = range.createTextFinder('##OWNER##');
finder.replaceAllWith(nameResponse.getResponseText());
这可能会缩短为单行:
SpreadsheetApp.openById(documentId).getDataRange().createTextFinder('##OWNER##').replaceAllWith(nameResponse.getResponseText());
看:
https://developers.google.com/apps-script/reference/spreadsheet/range#createTextFinder(String)
https://developers.google.com/apps-script/reference/spreadsheet/text-finder#replaceWith(String)
推荐阅读
- node.js - 如何忽略“firebase-admin 似乎已安装在不受支持的环境中。”?
- jquery - 从 .each 方法中缓存好吗?
- java - 如何避免静态方法中的长 switch/case 块
- php - Laravel Blade 使用不同的循环进行迭代
- php - 如何在特定产品的 woocommerce 产品库下方添加内容?
- shell - 使用 shell/awk 脚本添加时间戳
- ios - React-native 函数在调试模式下工作但不在发布模式下
- python-3.x - 使用 lambda 从输入中获取函数
- google-cloud-platform - 在为 Google Bigquery 使用联合/外部表时,我们如何处理数据类型 INTEGER 的空值?
- r - 如何使用 R 通过 FTP 推送 .csv 文件?