如何插入 importRange 函数并防止值在实施后发生变化?

How can I insert the importRange function and prevent the values from changing after implementation?

我有下面的代码,想防止值在执行 importRange 函数后发生变化!我已经尝试过 setValue(),但它仍然会发生变化。除了那个问题,代码工作正常。你有什么想法?

function Evaluation() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var newSpreadsheet = SpreadsheetApp.create("SheetEvaluation");
  var newSheet = newSpreadsheet.getSheets()[0];
  var range = sheet.getRange("A1:AX80");
  var chart = sheet.getCharts()[0];
    var newSpreadsheet = SpreadsheetApp.getActive();
    newSheet.getRange('A1').activate();
  newSheet.getCurrentCell().setValue('=ImportRange("LINK"; "Evaluation!A1:AX80")')
  .setValue('=ImportRange("LINK"; "Evaluation!A1:AX80")');
  chart = chart.modify()
  .asComboChart()
  .addRange(newSpreadsheet.getRange('B48:AX77'))
  .addRange(newSpreadsheet.getRange('B78:AX78'))
  .addRange(newSpreadsheet.getRange('B40:AX40'))
  .setMergeStrategy(Charts.ChartMergeStrategy.MERGE_ROWS)
  .setTransposeRowsAndColumns(true)
  .setNumHeaders(1)
  .setHiddenDimensionStrategy(Charts.ChartHiddenDimensionStrategy.IGNORE_BOTH)
  .setOption('bubble.stroke', '#000000')
  .setOption('useFirstColumnAsDomain', true)
  .setOption('isStacked', 'absolute')
  .setOption('series.1.type', 'LineChart')
  .setOption('series.2.type', 'LineChart')
  .setOption('series.3.type', 'LineChart')
  .setOption('series.4.type', 'ColumnChart')
  .setOption('series.5.type', 'ColumnChart')
  .setOption('series.6.type', 'ColumnChart')
  .setOption('series.7.type', 'ColumnChart')
  .setOption('series.8.type', 'ColumnChart')
  .setOption('series.9.type', 'ColumnChart')
  .setOption('series.10.type', 'ColumnChart')
  .setOption('series.11.type', 'ColumnChart')
  .setOption('series.12.type', 'ColumnChart')
  .setOption('series.13.type', 'ColumnChart')
  .setOption('series.14.type', 'ColumnChart')
  .setOption('series.15.type', 'ColumnChart')
  .setOption('series.16.type', 'ColumnChart')
  .setOption('series.17.type', 'ColumnChart')
  .setOption('series.18.type', 'ColumnChart')
  .setOption('series.19.type', 'ColumnChart')
  .setOption('series.20.type', 'ColumnChart')
  .setOption('series.21.type', 'ColumnChart')
  .setOption('series.22.type', 'ColumnChart')
  .setOption('series.23.type', 'ColumnChart')
  .setOption('series.24.type', 'ColumnChart')
  .setOption('series.25.type', 'ColumnChart')
  .setOption('series.26.type', 'ColumnChart')
  .setOption('series.27.type', 'ColumnChart')
  .setOption('series.28.type', 'ColumnChart')
  .setOption('height', 505)
  .setOption('width', 817)
  .setPosition(1, 3, 116, 4)
  .build(); 
  newSheet.insertChart(chart);
};

在 Google 工作表中,您可以拥有动态值和静态值。

在 Apps 脚本和 API 端,您可以通过以下方式获取这些值:

  • 公式 - 动态值
  • 值 - 静态值
  • 显示值 - 值的 "Static" 版本。

在您的情况下,您希望保留某个时间点的公式值。为此,您需要保存这些值的 "static" 版本。

您需要使用getDisplayValues to get the value that will be shown (not the formula) and then set your values to those with setValues

下面是一些示例代码:

function freezeImportRange() {
  var importRangeUrl = "https://docs.google.com/spreadsheets/d/11lx7OPRXTV9xwqhCVcFPcpL43glyy_9y-PPIC1ADzhk/edit#gid=0";
  var importRangeA1 = "Sheet1!A:C";


  var importedValues = SpreadsheetApp.openByUrl(importRangeUrl).getRange(importRangeA1).getDisplayValues();

  var newSheet = SpreadsheetApp.create("New Sheet");
  var ss = newSheet.getSheetByName(newSheet.getSheets()[0].getName());

  ss.getRange(1, 1, importedValues.length, importedValues[0].length).setValues(importedValues);

}