将公式文本字符串转换为 googleSheets +/- appscript 中的公式

问题描述 投票:0回答:1

我正在尝试转置包含公式字符串的列,并让它们计算为谷歌表格中的结果。

这分为 2 个问题。第一个是如何在 google 表格中粘贴表示公式的字符串,以便其计算结果为 google 表格中的结果,而无需手动删除和添加

=

例如,如果我

  1. 从 C2 中复制并粘贴下面示例表中的
    fomulatext()
    ="I went with "& B4
    计算结果为
    ="I went with "& B4
  2. 如果我复制并粘贴
    ="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 google-apps-script google-sheets-formula
1个回答
0
投票

在某些情况下,可以通过检查粘贴值的格式,然后检查格式、突出显示整行并从文本切换到自动来解决此问题,反之亦然,如果单元格显示=公式但未执行,则可能会起作用改变行为。

我不确定 google-sheets 如何在后台对数据进行编码。但似乎有时改变这些设置不起作用,有时又起作用。

© www.soinside.com 2019 - 2024. All rights reserved.