如何插入 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);
}
我有下面的代码,想防止值在执行 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);
}