Адаптируйте скрипт Google Docs для Google листов - PullRequest
0 голосов
/ 09 января 2020

У меня есть функция "myFunk ()", которая прекрасно работает в Google Docs. Он в основном ищет на листе поля с ## и заменяет их пользовательским вводом. Но когда я пытаюсь запустить его в листах после изменения функций, я получаю «Не удается найти функцию 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>

1 Ответ

3 голосов
/ 09 января 2020

Электронная таблица не имеет раздела тела, как в документе, вместо этого она имеет Диапазоны, которые представляют собой сетки данных, представляющих ячейки в электронной таблице, с которой вы будете работать sh. Вместо того чтобы пытаться работать с значениями диапазона, как в текущем коде, вы можете работать с самим объектом Range.

Решение состоит в том, чтобы выбрать соответствующий диапазон с помощью getDataRange ( ), но не вызывайте getValues ​​(). Вместо этого создайте объект 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 (строка)

https://developers.google.com/apps-script/reference/spreadsheet/text-finder#replaceWith (строка)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...