짧은 답변
사용자 정의 함수를 사용하여 셀 수식 안에 인용 된 문자열을 가져옵니다.
암호
Yisroel Tech 의 의견 에 공유 된 외부 게시물 에는 활성 범위의 각 공식을 해당 공식의 첫 번째 인용 문자열로 바꾸는 스크립트가 포함되어 있습니다. 다음은 해당 스크립트의 사용자 정의 기능으로 채택한 것입니다.
/**
* Extracts the first text string in double quotes in the formula
* of the referred cell
* @param {"A1"} address Cell address.
* @customfunction
*/
function FirstQuotedTextStringInFormula(address) {
// Checks if the cell address contains a formula, and if so, returns the first
// text string in double quotes in the formula.
// Adapted from https://productforums.google.com/d/msg/docs/ymxKs_QVEbs/pSYrElA0yBQJ
// These regular expressions match the __"__ prefix and the
// __"__ suffix. The search is case-insensitive ("i").
// The backslash has to be doubled so it reaches RegExp correctly.
// https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp
if(address && typeof(address) == 'string'){
var prefix = '\\"';
var suffix = '\\"';
var prefixToSearchFor = new RegExp(prefix, "i");
var suffixToSearchFor = new RegExp(suffix, "i");
var prefixLength = 1; // counting just the double quote character (")
var ss = SpreadsheetApp.getActiveSpreadsheet();
var cell, cellValue, cellFormula, prefixFoundAt, suffixFoundAt, extractedTextString;
cell = ss.getRange(address);
cellFormula = cell.getFormula();
// only proceed if the cell contains a formula
// if the leftmost character is "=", it contains a formula
// otherwise, the cell contains a constant and is ignored
// does not work correctly with cells that start with '=
if (cellFormula[0] == "=") {
// find the prefix
prefixFoundAt = cellFormula.search(prefixToSearchFor);
if (prefixFoundAt >= 0) { // yes, this cell contains the prefix
// remove everything up to and including the prefix
extractedTextString = cellFormula.slice(prefixFoundAt + prefixLength);
// find the suffix
suffixFoundAt = extractedTextString.search(suffixToSearchFor);
if (suffixFoundAt >= 0) { // yes, this cell contains the suffix
// remove all text from and including the suffix
extractedTextString = extractedTextString.slice(0, suffixFoundAt).trim();
// store the plain hyperlink string in the cell, replacing the formula
//cell.setValue(extractedTextString);
return extractedTextString;
}
}
} else {
throw new Error('The cell in ' + address + ' does not contain a formula');
}
} else {
throw new Error('The address must be a cell address');
}
}