我正在尝试转置包含公式字符串的列,并让它们计算为谷歌表格中的结果。
这分为 2 个问题。第一个是如何在 google 表格中粘贴表示公式的字符串,以便其计算结果为 google 表格中的结果,而无需手动删除和添加
=
例如,如果我
fomulatext()
值 ="I went with "& B4
计算结果为 ="I went with "& B4
="I went with "& B4
的值,它将计算为 ="I went with "& B4
但是,如果我粘贴
"I went with "& B4
,然后手动添加“=”符号,那么谷歌表格将处理公式并评估为I went with jake
同样,我遇到了与下表相同的问题,我试图转置公式的值,并希望它执行方程而不是显示方程的字符串,以便
transpose(C4:C6)=TRANSPOSE(D4:D6)
的值
桌子
行 | A | B | C |
---|---|---|---|
3 | 名字 | 个别公式 | 公式文本 |
4 | 杰克 | 我和杰克一起去 | ="我选择了"& B4 |
5 | 沙地 | 我和桑迪一起去 | ="我选择了"& B5 |
6 | 莎拉 | 我和莎拉一起去 | ="我选择了"& B6 |
7 | |||
8 | 我和杰克一起去 | 我和桑迪一起去 | 我和莎拉一起去 |
9 | ="我选择了"& B4 | ="我选择了"& B5 | ="我选择了"& B6 |
10 | |||
11 | A6 | =转置(C4:C6) | |
12 | A7 | =转置(D4:D6) | 茶几 |
有没有办法在谷歌表格中执行此操作,以便转置值将被视为公式而不是文本字符串?
尝试过应用脚本
function transposeAndConvertFormulas() {
var spreadsheetId = 'asdfjasdflasjdflk;asjfdlksajfa';
var sourceRangeNotation = 'sheet!(range)';
var destinationNotation = 'sheet!(cell)';
var ss = SpreadsheetApp.openById(spreadsheetId);
var sourceSheet = ss.getSheetByName(sourceRangeNotation.split('!')[0]);
var destinationSheet = ss.getSheetByName(destinationNotation.split('!')[0]);
var sourceRange = sourceSheet.getRange(sourceRangeNotation);
var sourceValues = sourceRange.getValues();
var transposedValues = transposeValues(sourceValues);
var endCellNotation = calculateEndCell(destinationNotation, transposedValues[0].length);
var destinationRange = destinationSheet.getRange(destinationNotation + ':' + endCellNotation);
destinationRange.setValues(transposedValues);
}
function transposeValues(values) {
var transposed = [];
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
if (!transposed[j]) {
transposed[j] = [];
}
transposed[j][i] = values[i][j];
}
}
return transposed;
}
function calculateEndCell(startNotation, numberOfColumns) {
var startColumn = startNotation.replace(/[^A-Z]/g, '');
var startRow = parseInt(startNotation.match(/\d+/), 10);
var endColumn = columnToLetter(letterToColumn(startColumn) + numberOfColumns - 2);
var endRow = startRow;
return endColumn + endRow;
}
function letterToColumn(letter) {
var column = 0, length = letter.length;
for (var i = 0; i < length; i++) {
column += (letter.charCodeAt(i) - 64) * Math.pow(26, length - i - 1);
}
return column;
}
function columnToLetter(column) {
var letter = '';
while (column > 0) {
var temp = (column - 1) % 26;
letter = String.fromCharCode(temp + 65) + letter;
column = (column - temp - 1) / 26;
}
return letter;
}
在某些情况下,可以通过检查粘贴值的格式,然后检查格式、突出显示整行并从文本切换到自动来解决此问题,反之亦然,如果单元格显示=公式但未执行,则可能会起作用改变行为。
我不确定 google-sheets 如何在后台对数据进行编码。但似乎有时改变这些设置不起作用,有时又起作用。