Метод Range.copyTo не работает, если исходный диапазон имеет формулы, заданные в предыдущем выражении - PullRequest
0 голосов
/ 10 февраля 2019

Я просто разбираюсь со сценарием Google Sheets, и мне немного трудно разобраться в проблеме.Код, очевидно, копирует пустые значения из столбца 4 в столбец 3, когда я использую Range.setFormulaR1C1 в строке чуть выше оператора Range.copyTo.

function cleanUpNames() {

var currentSheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
var currentSheetLastRow = currentSheet.getLastRow();

//Range of cells in the third column, that are just names
var firstNames = currentSheet.getRange('C2:C' + currentSheetLastRow);

//Range of cells in the fourth column
var newFirstNames = currentSheet.getRange('D2:D' + currentSheetLastRow);

//Using the fourth column to replace period character(.) with empty string
var formulaString = '=SUBSTITUTE(R[0]C[-1],".","")';
newFirstNames.setFormulaR1C1(formulaString);

//This line is giving empty values on the third column, instead of pasting the actual formula results
newFirstNames.copyTo(firstNames, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

};

Однако, когда я покончу с кодом, который устанавливает формулы и ввожу соответствующую формулу из пользовательского интерфейса, а затем запускаю следующий код, он работает просто отлично.Я действительно не уверен, где я понимаю это неправильно.Любая помощь будет принята с благодарностью.

function cleanUpNames() {

var currentSheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
var currentSheetLastRow = currentSheet.getLastRow();

//Range of cells in the third column, that are just names
var firstNames = currentSheet.getRange('C2:C' + currentSheetLastRow);

//Range of cells in the fourth column
var newFirstNames = currentSheet.getRange('D2:D' + currentSheetLastRow);

//This line is giving empty values on the third column, instead of pasting the actual formula results
newFirstNames.copyTo(firstNames, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

};

1 Ответ

0 голосов
/ 11 февраля 2019

Перед строкой кода copyTo добавьте следующее

SpreadsheetApp.flush();

Связанные

ПРИМЕЧАНИЕ. AFAIK setFormulaR1C1(formula), где формула представляет собой строку, следует использовать для установки формулыодиночная клеткаЧтобы установить формулу ячеек с несколькими ячейками, вместо этого используйте setFormulasR1C1(formulas), где формула - это массив строк.Для подробностей ознакомьтесь с примером в официальной документации: https://developers.google.com/apps-script/reference/spreadsheet/range#setformulasr1c1formulas

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